Modelo mental
Uma assinatura na AbacatePay tem três fases distintas:POST /subscriptions/create não cria uma assinatura diretamente — ele cria um checkout de assinatura. A assinatura em si (com id: subs_...) só existe após o cliente concluir o pagamento. Esse detalhe muda como você lida com os webhooks: ouça subscription.completed para confirmar que a assinatura está ativa, não apenas que o checkout foi criado.
Criar checkout
Inicia o fluxo de assinatura.
Cancelar
Cancela imediatamente, sem cobranças futuras.
Alterar plano
Muda o produto; novo valor no próximo ciclo.
Toda assinatura antes de ser iniciada, o seu cliente deve passar pelo Checkout. A diferença é que um checkout de assinatura aceita só um produto, e esse produto precisa ter ciclo (frequency) definido na loja. Quando o pagamento é realizado, a assinatura se torna ativa.
Parâmetros
OPOST /subscriptions/create usa os mesmos parâmetros do Checkout:
| Parâmetro | Obrigatório | Descrição |
|---|---|---|
items | Sim | Lista com exatamente um item (id e quantity); o produto deve ter sido criado com ciclo de assinatura |
customerId | Não | ID do cliente já cadastrado |
externalId | Não | ID da assinatura no seu sistema |
returnUrl | Não | URL de retorno ao clicar em “Voltar” |
completionUrl | Não | URL após pagamento concluído |
metadata | Não | Metadados livres |
coupons | Não | Lista de cupons |
methods | Não | Lista de métodos (PIX, CARD). Padrão: ["CARD"] para assinaturas |
id e quantity; o ciclo vem do produto):
Resposta
Create e list retornam o mesmo formato do Checkout (id, url, amount, items, status, etc.).
Resposta:
Ciclo de cobrança
Definido no produto ao criar na loja. Valores: WEEKLY, MONTHLY, SEMIANNUALLY, ANNUALLY.Status
Mesmos do Checkout: PENDING, EXPIRED, CANCELLED, PAID, REFUNDED.Período de teste gratuito (Free Trial)
Configure um período de teste no produto com o campotrialDays ao criar o produto. Durante o trial, o cliente não é cobrado — a primeira cobrança ocorre somente ao final do período.
Como funciona
- Criação do produto: defina
trialDays(inteiro de 1 a 90) junto comcycle. - Checkout: o cliente insere o cartão normalmente, mas o valor cobrado é R$ 0,00. O cartão é apenas tokenizado para uso futuro.
- Assinatura ativa imediatamente: a assinatura é criada com
status: ACTIVEe os campostrialDaysetrialEndsAtpreenchidos. - Fim do trial: na data
trialEndsAt, a primeira cobrança pelo valor integral é processada automaticamente. - Renovações: seguem o ciclo normal do produto a partir do fim do trial.
Exemplo de produto com trial
Objeto da assinatura com trial
Após a ativação, a assinatura expõetrialDays e trialEndsAt:
| Campo | Tipo | Descrição |
|---|---|---|
trialDays | integer | null | Duração do período de teste em dias; null se não houver trial |
trialEndsAt | string | null | Data/hora (ISO 8601) em que o trial termina; null se não houver trial |
Webhook de início de trial
Quando uma assinatura com trial é criada, o eventosubscription.trial_started é disparado:
Cancelamento durante o trial
Cancelar uma assinatura em período de trial tem o mesmo comportamento que cancelar uma assinatura normal: o cancelamento é imediato e nenhuma cobrança futura é processada. Veja Cancelar assinatura.Gerenciando assinaturas ativas
Após uma assinatura ser criada e ativada, você pode gerenciá-la com os seguintes endpoints:| Endpoint | Descrição |
|---|---|
| Cancelar | Cancela a assinatura imediatamente e interrompe cobranças futuras |
| Alterar plano | Troca o produto principal; novo valor começa no próximo ciclo |
| Registrar uso | Adiciona ou remove unidades de produtos pay-as-you-go para cobrança no próximo ciclo |
Produtos de uso (pay-as-you-go)
Além do produto principal (com ciclo), uma assinatura pode acumular cobranças variáveis via Registrar uso. O produto referenciado precisa ser um produto sem ciclo — ele representa um item cobrado por unidade consumida (ex: chamadas de API, SMS, créditos).Segurança
- Requisições autenticadas via Bearer Token
- Abusos podem levar à suspensão da conta conforme os termos de uso