Prerequisites
To integrate the Dodo Payments API, you’ll need:- A Dodo Payments merchant account
- API credentials (API key and webhook secret key) from the dashboard
API Integration
Checkout Sessions
Use Checkout Sessions to sell subscription products with a secure, hosted checkout. Pass your subscription product inproduct_cart and redirect customers to the returned checkout_url.
- Node.js SDK
- Python SDK
- REST API
API Response
The following is an example of the response:checkout_url.
Webhooks
Ao integrar assinaturas, você receberá webhooks para acompanhar o ciclo de vida da assinatura. Esses webhooks ajudam você a gerenciar estados de assinatura e cenários de pagamento de forma eficaz. Para configurar seu endpoint de webhook, siga nosso Guia de Integração Detalhado.Tipos de Eventos de Assinatura
Os seguintes eventos de webhook acompanham as mudanças de status de assinatura:subscription.active- Assinatura ativada com sucesso.subscription.updated- Objeto de assinatura foi atualizado (acionado em qualquer alteração de campo).subscription.on_hold- Assinatura suspensa devido a falha na renovação.subscription.failed- Falha na criação da assinatura durante a criação do mandato.subscription.renewed- Assinatura renovada para o próximo período de cobrança.
Cenários de Pagamento
Fluxo de Pagamento Bem-Sucedido Os webhooks que você recebe e o momento em que são enviados dependem de o produto ter um período de teste. Cobrança imediata (0 dias de teste):subscription.active: o mandato é autorizado e a assinatura é ativada.payment.succeeded: confirma a primeira cobrança. Espere recebê-lo em 2 a 10 minutos após o checkout.
- No início do teste (checkout):
subscription.activeé disparado assim que o método de pagamento é autorizado. Nenhuma cobrança recorrente é realizada ainda. A primeira cobrança real é adiada até o término do teste. - No término do teste: o valor recorrente é cobrado, e você recebe
payment.succeededjunto comsubscription.renewed.
subscription.renewed: é disparado em cada ciclo de cobrança quando o pagamento da renovação é debitado, sempre junto compayment.succeeded. Ele também inclui onext_billing_dateatualizado.
Sempre que um valor é realmente debitado para um produto de assinatura, você recebe
subscription.renewed e payment.succeeded. Use subscription.renewed (em vez de usar apenas payment.succeeded) como sinal para estender o acesso para o próximo ciclo.- Falha na assinatura
subscription.failed- A criação da assinatura falhou porque não foi possível criar um mandato.payment.failed- Indica um pagamento malsucedido.
- Assinatura suspensa
subscription.on_hold- A assinatura é suspensa devido a uma falha no pagamento da renovação ou na cobrança da alteração do plano.- Quando uma assinatura é suspensa, ela não será renovada automaticamente até que o método de pagamento seja atualizado.
Boa prática: para simplificar a implementação, recomendamos acompanhar principalmente os eventos da assinatura para gerenciar o ciclo de vida da assinatura.
subscription.failed vs. subscription.on_hold
É fácil confundir esses dois eventos, mas eles exigem tratamentos muito diferentes:
Como lidar com uma assinatura suspensa
Quando uma assinatura entra no estadoon_hold, você precisa atualizar o método de pagamento para reativá-la. Esta seção explica quando as assinaturas são suspensas e como lidar com elas.
Quando as assinaturas são suspensas
Uma assinatura é suspensa quando:- O pagamento da renovação falha: a cobrança automática da renovação falha devido a fundos insuficientes, cartão expirado ou recusa do banco
- A cobrança da alteração do plano falha: uma cobrança imediata durante o upgrade ou downgrade do plano falha
- A autorização do método de pagamento falha: não é possível autorizar o método de pagamento para cobranças recorrentes
Reativando assinaturas suspensas
Para reativar uma assinatura no estadoon_hold, use a API Update Payment Method. Isso automaticamente:
- Cria uma cobrança pelos valores pendentes
- Gera uma fatura para a cobrança
- Processa o pagamento usando o novo método de pagamento
- Reativa a assinatura para o estado
activeapós o pagamento bem-sucedido
1
Handle subscription.on_hold webhook
Ao receber um webhook
subscription.on_hold, atualize o estado da sua aplicação e notifique o cliente:2
Update payment method
Quando o cliente estiver pronto para atualizar o método de pagamento, chame a API Update Payment Method:
Você também pode usar um ID de método de pagamento existente se o cliente tiver métodos de pagamento salvos:
3
Monitor webhook events
Após atualizar o método de pagamento, monitore estes eventos de webhook:
payment.succeeded- A cobrança pelos valores pendentes foi bem-sucedidasubscription.active- A assinatura foi reativada
Exemplo de payload de evento de assinatura
Alterando planos de assinatura
Você pode fazer upgrade ou downgrade de um plano de assinatura usando o endpoint da API de alteração de plano. Isso permite modificar o produto, a quantidade e tratar o rateio proporcional da assinatura.Change Plan API Reference
Para obter informações detalhadas sobre como alterar planos de assinatura, consulte nossa documentação da API Change Plan.
Opções de rateio proporcional
Ao alterar planos de assinatura, você tem duas opções para tratar a cobrança imediata:1. prorated_immediately
- Calcula o valor proporcional com base no tempo restante do ciclo de cobrança atual
- Cobra do cliente apenas a diferença entre o plano antigo e o novo
- Durante um período de teste, isso muda imediatamente o usuário para o novo plano, cobrando o cliente na hora
2. full_immediately
- Cobra do cliente o valor integral da assinatura do novo plano
- Ignora qualquer tempo ou crédito restante do plano anterior
- Útil quando você deseja redefinir o ciclo de cobrança ou cobrar o valor integral independentemente do rateio proporcional
3. difference_immediately
- Ao fazer upgrade, o cliente é cobrado imediatamente pela diferença entre os valores dos dois planos.
- Por exemplo, se o plano atual custa 30 dólares e o cliente fizer upgrade para um plano de 80 dólares, serão cobrados $50 instantaneamente.
- Ao fazer downgrade, o valor não utilizado do plano atual é adicionado como crédito interno e aplicado automaticamente às futuras renovações da assinatura.
- Por exemplo, se o plano atual custa 50 dólares e o cliente mudar para um plano de 20 dólares, os $30 restantes serão creditados e usados no próximo ciclo de cobrança.
4. do_not_bill
- Aplica a alteração do plano imediatamente, mas não cobra nada no momento da alteração.
- O plano atualizado (e a quantidade/add-ons) será cobrado na próxima renovação programada, e a data de cobrança original será preservada.
Comportamento
- Quando você chama esta API, Dodo Payments inicia imediatamente uma cobrança com base na opção de rateio proporcional selecionada
- Se a alteração do plano for um downgrade e você usar
prorated_immediately, os créditos serão calculados e adicionados automaticamente ao saldo de créditos da assinatura. Esses créditos são específicos dessa assinatura e serão usados somente para compensar pagamentos recorrentes futuros da mesma assinatura - A opção
full_immediatelyignora os cálculos de crédito e cobra o valor integral do novo plano
Processamento da cobrança
- A cobrança imediata iniciada após a alteração do plano geralmente termina de ser processada em menos de 2 minutos
- Se essa cobrança imediata falhar por qualquer motivo, a assinatura será automaticamente suspensa até que o problema seja resolvido
Assinaturas sob demanda
As assinaturas sob demanda permitem cobrar dos clientes com flexibilidade, e não apenas em uma programação fixa. Esse recurso está disponível para todas as contas.
on_demand no corpo da solicitação. Isso permite autorizar um método de pagamento sem uma cobrança imediata ou definir um preço inicial personalizado.
Para cobrar uma assinatura sob demanda:
Para cobranças subsequentes, use o endpoint POST /subscriptions//charge e especifique o valor a ser cobrado do cliente nessa transação.
Para obter um guia completo e passo a passo (incluindo exemplos de solicitação/resposta, políticas de nova tentativa seguras e tratamento de webhooks), consulte o Guia de assinaturas sob demanda.
Principais informações sobre a cobrança de assinaturas
Os períodos de teste fazem uma autorização de $0, não uma cobrança. Quando uma assinatura tem um período de teste, o início do teste cria uma autorização de mandato de $0 para salvar o cartão; a primeira cobrança real ocorre quando o teste termina. Na lista de pagamentos, uma assinatura em período de teste exibe exatamente um pagamento com
amount: 0.Ciclo de vida da assinatura:
on_hold = uma renovação falhou (recuperável: solicite ao cliente que atualize o método de pagamento; novas tentativas de cobrança são aplicadas). expired = o período terminou sem renovação e não pode ser reativado. O cliente deve assinar novamente. cancelled = encerrada pelo cliente ou pelo merchant. A maioria das falhas de renovação são recusas do emissor (fundos insuficientes, cartão recusado), não um erro da Dodo.Referência de API relacionada
Create Subscription
Referência da API para criar produtos de assinatura e gerenciar o ciclo de vida das assinaturas
Change Subscription Plan
Referência da API para fazer upgrade, downgrade ou alterar planos de assinatura com opções de rateio proporcional
Update Payment Method
Referência da API para atualizar métodos de pagamento e reativar assinaturas suspensas
Patch Subscription
Referência da API para atualizar detalhes e configurações de assinaturas