Visão geral
O sistema de assinaturas da PlugToPay opera em três camadas:
O fluxo básico é: criar plano → criar assinatura → coletar cartão via Checkout → cobrar. A partir daí, a PlugToPay cobra automaticamente a cada ciclo, com retentativas em caso de falha, e dispara webhooks a cada evento relevante.
Criar assinatura
POST /api/v1/subscriptions — requer X-Client-ID + X-API-Key.
O sistema impede a criação de uma segunda assinatura ativa do mesmo cliente no mesmo plano. Para mudar o plano, use a troca de plano em vez de cancelar e recriar.
min_card_months: se o plano tiver esse campo definido, o cartão informado deve ter validade mínima de min_card_months meses a partir de hoje. Uma assinatura anual com min_card_months: 13, por exemplo, impede o uso de um cartão que vence em 6 meses.
Resposta 201:
Status possíveis
Ciclo de faturamento
Quandonext_billing_at é atingido, a PlugToPay:
- Cria um ciclo
pendingpara o período - Aplica o desconto do cupom (se elegível pelo
max_cycles) - Tenta cobrar o cartão via
CreatePaymentCardService(mesmo fluxo de pagamento avulso com cartão tokenizado) - Sucesso → ciclo marcado como
paid, período avança, webhooksubscription.payment.success - Falha → ciclo marcado como
failed, retentativas agendadas, webhooksubscription.payment.failed
Após a 4ª tentativa sem sucesso, a assinatura vai para
past_due e o webhook subscription.past_due é disparado. Nesse estado, nenhuma nova cobrança automática ocorre — o cliente deve atualizar o cartão.
Cálculo do billing_day:
weekly: obilling_dayé ignorado; o ciclo avança exatamente pelo número de semanas definidomonthly/yearly: a cobrança ocorre nobilling_daydo próximo mês/ano (sempre limitado a 28)
Listar assinaturas
GET /api/v1/subscriptions — requer X-Client-ID + X-API-Key.
Retorna lista paginada. Suporta filtros (consultar via parâmetros de query).
Consultar assinatura
GET /api/v1/subscriptions/{uuid} — requer X-Client-ID + X-API-Key.
Retorna o objeto completo com plan, customer, card, coupon e datas de período.
Listar ciclos
GET /api/v1/subscriptions/{uuid}/cycles — requer X-Client-ID + X-API-Key.
Retorna o histórico de ciclos de faturamento da assinatura:
Coletando o cartão via Checkout
Use o Checkout Session para coletar os dados do cartão do cliente no frontend sem expor sua chave de API. O fluxo funciona em dois estágios: primeiro a assinatura é criada (ficando no estadoincomplete), depois o cartão é coletado e a primeira cobrança é disparada automaticamente.
Assinaturas em planos com trial ficam em
trialing ao invés de incomplete. Nesse caso, o cartão é salvo mas a cobrança só ocorre quando o trial encerrar.Passo 1 — Criar a assinatura sem cartão
POST /api/v1/subscriptions
status: "incomplete" e o id que será usado no próximo passo.
Passo 2 — Criar uma sessão de checkout vinculada à assinatura
POST /api/v1/checkout/sessions — requer X-Client-ID + X-API-Key.
Resposta:
token (cs_live_...) ao frontend. O array saved_cards pode ser exibido para que o cliente escolha um cartão já cadastrado.
Passo 3 — Submeter o cartão pelo frontend
POST /api/v1/checkout/subscriptions/card — autenticado via X-Checkout-Token.
Resposta — assinatura atualizada:
incomplete, a cobrança do primeiro ciclo é disparada imediatamente. Se o cartão for aprovado, status passa para active. Se for recusado, passa para past_due e as retentativas são agendadas automaticamente.
Diagrama do fluxo completo
Referência rápida de rotas
Todos os endpoints requeremX-Client-ID + X-API-Key, exceto POST /api/v1/checkout/subscriptions/card que usa X-Checkout-Token.