Skip to main content
Uma assinatura é um Pix Automático: o cliente paga o primeiro ciclo e, no mesmo QR, autoriza os próximos no app do banco. Depois disso cada renovação é cobrada sozinha. Tudo que muda nela chega na callbackUrl que você mandou ao criar (ou na URL da conta). O paymentId muda a cada ciclo (psa_sub_…, psa_sub_…_c1, psa_sub_…_c2). O subscriptionId é o mesmo em todos os eventos: é por ele que você acha o assinante.

subscription.authorized

O banco do cliente aprovou a recorrência. A partir daqui as renovações saem sozinhas.
O primeiro pagamento chega separado, como um payment.paid normal do paymentId da criação. Autorização e pagamento são atos diferentes no banco e podem chegar em qualquer ordem.

payment.paid de renovação

Cada ciclo pago é um payment.paid como outro qualquer, com dois campos a mais:
subscriptionCycle é 0 no primeiro pagamento e cresce a cada renovação. Renove o acesso pelo subscriptionId, nunca pelo paymentId.

subscription.charge_failed

Uma cobrança recorrente não liquidou. A assinatura continua ativa: quando a política permite, a retentativa é pedida sozinha (até 3 em 7 dias), e o ciclo seguinte é enviado normalmente.
reason é rejeitada, expirada ou cancelada. detail traz o código e a descrição que o banco devolveu, quando há.

subscription.cancelled

Acabou: pela loja (reason: "merchant"), pelo cliente ou pelo banco (cancelada), recusada na autorização (rejeitada) ou vencida (expirada). Não haverá novas cobranças.
Derrube o acesso pela data, não pelo evento: quando um ciclo não é pago, a validade que você guardou vence sozinha. O subscription.cancelled é o aviso de que não vale esperar pela próxima.
Mesmas garantias dos outros eventos: assinatura HMAC no X-Webhook-Signature, idempotência por X-Webhook-Id e reentrega com backoff. Veja Validando a assinatura.