Quando usar
Use assinatura para mensalidades e planos: cursos e mentorias, SaaS, comunidades, clubes de assinatura.Como funciona uma assinatura
São dois recursos, com IDs e rotas próprias:
As regras:
- O produto precisa ter ciclo. Só produto criado com
cycleentra numa assinatura. O valor de cada cobrança é o preço do produto vezes a quantidade. - Um produto por checkout. Mais de um produto no mesmo checkout de assinatura precisa ser liberado na sua conta pelo suporte, e todos os produtos têm que ter o mesmo ciclo.
- Um checkout, um cliente. Depois do pagamento, o checkout de assinatura fica
PAIDe o link não aceita outro pagamento. Para cada cliente, crie um checkout. - A data se repete. A próxima cobrança cai na mesma data da contratação, a cada ciclo. Com teste grátis, a contagem começa no fim do teste. O campo
nextChargeAtda assinatura traz a data da próxima cobrança. - Sem parcelamento. A assinatura no cartão é sempre à vista, e não aceita repasse de taxa.
- Liberação. Em produção, a conta precisa ter assinaturas liberadas. No Modo Teste, elas funcionam sem liberação.
Formas de pagamento
O campomethods aceita:
Com
["CARD", "PIX"], o cliente escolhe no checkout.
Ciclos de cobrança
O ciclo é definido no produto e não muda depois que a assinatura começa.
Status da assinatura
Enquanto a AbacatePay tenta cobrar um ciclo recusado, a assinatura continua
ACTIVE. Quando as tentativas acabam, ela vira CANCELLED.
Pagamento recusado e retentativas
No cartão, uma cobrança recusada é tentada de novo conforme aretryPolicy do checkout de assinatura:
- Cada tentativa que falha dispara
subscription.payment_failed. - Com
maxRetry: 3eretryEvery: 2, a AbacatePay tenta no dia do ciclo, 2 dias depois e mais 2 dias depois. - Quando a última tentativa falha, a assinatura é cancelada com
cancelledDueTo: "max_payment_retries_exceeded", e sai osubscription.cancelled. - Enquanto a assinatura está ativa, o cliente pode trocar o cartão pelo Portal do cliente. Se uma cobrança estiver em retentativa, ela é cobrada no cartão novo na hora.
retryPolicy só pode ser definida pela API. Checkouts criados pelo dashboard usam o padrão. No Pix Automático, quem debita é o banco do cliente, e a retryPolicy não se aplica: veja cobrança recusada no Pix Automático.
Período de teste grátis
O teste grátis deixa o cliente usar antes de pagar. Ele é configurado no produto, comtrialDays (de 1 a 90 dias), ao criar o produto pela API. O campo só tem efeito em produto com cycle: num produto avulso, ele é aceito e não faz nada.
- No checkout, o cliente digita o cartão, e o valor cobrado é R$ 0,00. O cartão fica salvo para as próximas cobranças.
- A assinatura nasce
ACTIVE, comtrialDaysetrialEndsAtpreenchidos. - Na contratação sai
subscription.trial_started, no lugar desubscription.completed. A primeira cobrança, no fim do teste, chega comosubscription.renewed. Se você libera o acesso nocompleted, libere também notrial_started. - Se a assinatura for cancelada durante o teste, nada é cobrado.
- O teste grátis é do cartão. Com teste, o checkout não aceita cupom.
Cupom em assinatura
O cupom vale só em assinatura cobrada só no cartão (methods: ["CARD"]) e com produto sem teste grátis.
- O desconto vale na primeira cobrança. As renovações cobram o preço cheio.
- Os cupons aceitos vão em
couponsna criação do checkout. Depois, não há como aplicar ou trocar o cupom de uma assinatura. - Com
PIXemmethodsou comtrialDaysno produto, o campo de cupom some do checkout e o cupom é recusado. A criação pela API aceitacouponsmesmo assim; a regra vale na hora do pagamento.
Trocar o plano da assinatura
Para fazer upgrade ou downgrade, chame Alterar plano com os novos produtos emitems.
- A troca fica pendente até a próxima cobrança do ciclo. O ciclo atual não muda, e não há cobrança proporcional.
- Uma troca pendente por vez. Uma chamada nova substitui a troca que ainda não foi aplicada.
- Mesmo ciclo. Os produtos novos precisam ter o mesmo ciclo da assinatura.
- Valor mínimo de R$ 1,00 para o novo plano.
- Só assinatura ativa. Mais de um produto no plano precisa de liberação, como na criação.
- Pix Automático: a troca só é aceita se o valor continuar o mesmo.
subscription.plan_changed dispara duas vezes: no pedido, com pendingUpdateId, newAmount e status: "PENDING"; e quando a troca é aplicada, já com o novo amount na assinatura.
Cobrança por uso
Além do valor fixo do plano, a assinatura pode cobrar o que o cliente consumiu no ciclo, como chamadas de API, SMS ou créditos. É o modelo pay-as-you-go.- Crie um produto sem
cyclepara a unidade de uso, com o preço de cada unidade. - A cada consumo, chame Registrar uso com o produto, as unidades e
action: "add". Para estornar unidades do mesmo ciclo, useaction: "subtract". - Na próxima cobrança, a AbacatePay soma o uso ao valor do plano.
Cancelar uma assinatura
O momento em que o cancelamento vale depende de quem cancela:
Nos dois casos, o status vira
CANCELLED e o subscription.cancelled sai na hora. No cancelamento pelo portal, o cliente já pagou o ciclo em curso: corte o acesso só depois do fim dele (currentPeriodEnd em Buscar assinatura), e não no recebimento do evento.
O subscription.cancelled dispara por estas causas, indicadas em cancelledDueTo:
Excluir o checkout de assinatura não cancela a assinatura que ele gerou.
Pelo dashboard
- Em Sua Loja → Produtos, crie o produto. Em Tipo de cobrança, escolha Assinatura e ative os ciclos com o preço de cada um (Mensal, Trimestral, Anual ou Semanal). Cada ciclo ativado vira um produto.
- Em Sua Loja → Assinaturas, clique em Criar checkout.
- Escolha o Produto de assinatura, o Cliente (opcional) e os Métodos de pagamento. Se quiser, preencha a URL de finalização e a URL de retorno. Clique em Cadastrar.
- Na aba Checkouts, abra o checkout em Ver detalhes e copie a URL para mandar ao cliente.
- Depois do pagamento, a assinatura aparece na aba Assinaturas. Para cancelar, abra a assinatura e clique em Cancelar assinatura no menu de ações.
Pela API
-
Crie o produto com ciclo em Criar produto, com
cyclee, se quiser teste grátis,trialDays. -
Crie o checkout de assinatura em Criar checkout de assinatura:
Se já existir um checkout com o mesmo
externalId, a API devolve esse checkout em vez de criar outro. -
Mande o cliente para a
urlda resposta. É lá que ele paga a primeira vez. -
Espere o webhook
subscription.completed(ousubscription.trial_started, com teste grátis) para liberar o acesso. Odata.subscription.idé osubs_...da assinatura. - Gerencie a assinatura com os endpoints abaixo.
A assinatura aponta o checkout que a originou em
checkoutId. Para achar a assinatura de um checkout, use GET /v2/subscriptions/list?checkoutId=bill_....
Notificações
Os payloads estão em Eventos de assinatura. Para configurar o recebimento, veja Webhooks.
Cada contratação e cada cobrança paga de assinatura também disparam
checkout.completed, com frequency: "SUBSCRIPTION". Se você trata os dois eventos, trate a assinatura num só deles para não processar o mesmo pagamento duas vezes.Testar no Modo Teste
- No Modo Teste, as assinaturas funcionam sem liberação. O Pix Automático precisa estar liberado também no Modo Teste.
- No checkout, use os cartões de teste para aprovar ou recusar o primeiro pagamento.
- As cobranças dos próximos ciclos acontecem na data do ciclo, também no Modo Teste. Não há como adiantar uma renovação.
Perguntas frequentes
Como o cliente cancela a assinatura?
Como o cliente cancela a assinatura?
Pelo Portal do cliente. O cancelamento pelo portal vale no fim do ciclo já pago. Você também pode cancelar pela API ou pelo dashboard, e aí vale na hora.
O cliente pode trocar o cartão da assinatura?
O cliente pode trocar o cartão da assinatura?
Sim, pelo Portal do cliente, enquanto a assinatura estiver ativa. Se houver uma cobrança em retentativa, ela é cobrada no cartão novo.
Como mudo o valor de uma assinatura?
Como mudo o valor de uma assinatura?
Troque o plano com Alterar plano. O novo valor vale a partir da próxima cobrança do ciclo.
Posso reativar uma assinatura cancelada?
Posso reativar uma assinatura cancelada?
Não. Crie um checkout de assinatura novo e mande para o cliente.
Posso reembolsar uma cobrança de assinatura?
Posso reembolsar uma cobrança de assinatura?
Pela API, não: as rotas de reembolso recusam cobrança de assinatura. O cliente pode pedir o reembolso pelo Portal do cliente, e isso cancela a assinatura na hora. Veja Reembolsos.
Por que não recebi o subscription.completed?
Por que não recebi o subscription.completed?
Se o produto tem teste grátis, a contratação dispara
subscription.trial_started no lugar do completed, e a primeira cobrança chega como subscription.renewed.Posso usar o mesmo checkout para vários clientes?
Posso usar o mesmo checkout para vários clientes?
Não. Depois do primeiro pagamento, o checkout de assinatura fecha. Crie um checkout para cada cliente.