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
When integrating subscriptions, you’ll receive webhooks to track the subscription lifecycle. These webhooks help you manage subscription states and payment scenarios effectively. To set up your webhook endpoint, please follow our Detailed Integration Guide.Subscription Event Types
The following webhook events track subscription status changes:subscription.active- Subscription is successfully activated.subscription.updated- Subscription object was updated (fires on any field change).subscription.on_hold- Subscription is put on hold due to failed renewal.subscription.failed- Subscription creation failed during mandate creation.subscription.renewed- Subscription is renewed for the next billing period.
Payment Scenarios
Successful Payment Flow When a payment succeeds, you’ll receive the following webhooks:subscription.active- Indicates subscription activationpayment.succeeded- Confirms the initial payment:- For immediate billing (0 trial days): Expect within 2-10 minutes
- For trial days: whenever that ends
subscription.renewed- Indicates payment deduction and renewal for next cycle. (Basically, whenever payment gets deducted for subscription products, you will getsubscription.renewedwebhook along withpayment.succeeded)
- Subscription Failure
subscription.failed- Subscription creation failed due to failure to create a mandate.payment.failed- Indicates failed payment.
- Subscription On Hold
subscription.on_hold- Subscription is put on hold due to failed renewal payment or failed plan change charge.- When a subscription goes on hold, it will not renew automatically until the payment method is updated.
Best Practice: To simplify implementation, we recommend primarily tracking subscription events for managing the subscription lifecycle.
subscription.failed vs. subscription.on_hold
Esses dois eventos são fáceis de confundir, mas requerem manejos muito diferentes:
| Evento | Quando ocorre | Status | Recuperável? | O que fazer |
|---|---|---|---|---|
subscription.failed | O mandato inicial não pôde ser criado na criação da assinatura | failed | Não — terminal | Não conceda acesso. Peça ao cliente para iniciar uma nova assinatura com um método de pagamento diferente. |
subscription.on_hold | Um pagamento de renovação (ou cobrança de mudança de plano) falhou em uma assinatura já ativa | on_hold | Sim | Recupere atualizando o método de pagamento; veja Tratamento de Assinatura Em Suspensão abaixo. |
Tratamento de Assinatura Em Suspensão
Quando uma assinatura entra no estadoon_hold, é necessário atualizar o método de pagamento para reativá-la. Esta seção explica quando assinaturas são colocadas em suspensão e como tratá-las.
Quando Assinaturas São Colocadas Em Suspensão
Uma assinatura é colocada em suspensão quando:- Pagamento de renovação falha: A cobrança automática de renovação falha devido a fundos insuficientes, cartão expirado ou recusa do banco
- Cobrança de mudança de plano falha: Uma cobrança imediata durante upgrade/downgrade de plano falha
- Autorização do método de pagamento falha: O método de pagamento não pode ser autorizado para cobranças recorrentes
Reativando Assinaturas de Em Suspensão
Para reativar uma assinatura do estadoon_hold, use a API de Atualização de Método de Pagamento. Isso automaticamente:
- Cria uma cobrança para os valores devidos
- 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
Handle subscription.on_hold webhook
Quando você recebe um webhook
subscription.on_hold, atualize o estado do seu aplicativo e notifique o cliente:Update payment method
Quando o cliente estiver pronto para atualizar seu método de pagamento, chame a API de Atualização de Método de Pagamento:
Você também pode usar um ID de método de pagamento existente se o cliente tiver métodos de pagamento salvos:
Exemplo de Payload de Evento de Assinatura
| Propriedade | Tipo | Obrigatório | Descrição |
|---|---|---|---|
business_id | string | Sim | O identificador único para o negócio |
timestamp | string | Sim | O carimbo de data e hora de quando o evento ocorreu (não necessariamente o mesmo que quando foi entregue) |
type | string | Sim | O tipo de evento. Veja Tipos de Evento |
data | object | Sim | O payload principal de dados. Veja Objeto de Dados |
Mudança de Planos de Assinatura
Você pode fazer upgrade ou downgrade de um plano de assinatura usando o endpoint da API de mudança de plano. Isso permite modificar o produto, a quantidade da assinatura e lidar com a prorrateação.Change Plan API Reference
Para informações detalhadas sobre a mudança de planos de assinatura, por favor, consulte nossa documentação da API de Mudança de Plano.
Opções de Prorrateação
Ao mudar planos de assinatura, você tem duas opções para lidar com a cobrança imediata:1. prorated_immediately
- Calcula o valor prorrateado com base no tempo restante no ciclo de faturamento atual
- Cobra do cliente apenas a diferença entre o plano antigo e o novo
- Durante um período de teste, isso mudará imediatamente o usuário para o novo plano, cobrando do cliente imediatamente
2. full_immediately
- Cobra do cliente o valor total da assinatura para o novo plano
- Ignora qualquer tempo restante ou créditos do plano anterior
- Útil quando você deseja reiniciar o ciclo de faturamento ou cobrar o valor total independente da prorrateação
3. difference_immediately
- Ao fazer upgrade, o cliente é imediatamente cobrado pela diferença entre os valores dos dois planos.
- Por exemplo, se o plano atual é de 30 Dólares e o cliente faz upgrade para 80 Dólares, ele é cobrado $50 instantaneamente.
- Ao fazer downgrade, o valor não utilizado do plano atual é adicionado como crédito interno e aplicado automaticamente nas futuras renovações da assinatura.
- Por exemplo, se o plano atual é de 50 Dólares e o cliente muda para um plano de 20 Dólares, os $30 restantes são creditados e usados no próximo ciclo de faturamento.
Comportamento
- Quando você invoca esta API, o Dodo Payments inicia imediatamente uma cobrança com base na opção de prorrateação selecionada
- Se a mudança de plano for um downgrade e você usar
prorated_immediately, os créditos serão calculados automaticamente e adicionados ao saldo de crédito da assinatura. Esses créditos são específicos para aquela assinatura e só serão usados para compensar futuros pagamentos recorrentes da mesma assinatura - A opção
full_immediatelyignora cálculos de crédito e cobra o valor completo do novo plano
Processamento de Cobranças
- A cobrança imediata iniciada na mudança de plano geralmente completa o processamento em menos de 2 minutos
- Se essa cobrança imediata falhar por qualquer motivo, a assinatura é automaticamente colocada em suspensão até que o problema seja resolvido
Assinaturas Sob Demanda
Assinaturas sob demanda permitem cobrar clientes de forma flexível, não apenas em um cronograma fixo. Este recurso está disponível para todas as contas.
on_demand em seu corpo de 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 para essa transação.
Para um guia completo, passo a passo — incluindo exemplos de solicitação/resposta, políticas de tentativa segura, e tratamento de webhooks — veja o Guia de Assinaturas Sob Demanda.
Referência da API Relacionada
Create Subscription
Referência da API para criar produtos de assinatura e gerenciar o ciclo de vida da assinatura
Change Subscription Plan
Referência da API para fazer upgrade, downgrade ou alterar planos de assinatura com opções de prorrateação
Update Payment Method
Referência da API para atualizar métodos de pagamento e reativar assinaturas em suspensão
Patch Subscription
Referência da API para atualizar detalhes e configurações de assinatura