Garu

2026-10-20

v0.34.0 — Assinaturas avisam cada pagamento, cada falha e o fim, também no Pix Automático

webhooksassinaturaspix-automatico

O que mudou

Eventos que agora chegam

EventoQuando chega
subscription.payment_failedUm pagamento falhou: o cartão foi recusado, ou o banco recusou o débito do Pix Automático. Chega em cada falha. Antes, nenhum fluxo o enviava.
subscription.cancelledA assinatura terminou. Agora chega também quando um cancelamento agendado chega ao fim do período, quando um Pix Automático termina por falhas e quando o cliente recusa ou cancela a autorização no banco.
subscription.createdNo Pix Automático, chega quando a assinatura é criada, com status: waitingPayment, como no cartão.
subscription.renewedChega a cada pagamento confirmado do Pix Automático, o primeiro também, como já acontecia no cartão.
transaction.created e transaction.payment.succeededChegam a cada pagamento do Pix Automático, e no pagamento de assinatura no cartão que a Celcoin já informa como pago.

Pix Automático: autorização recusada ou cancelada no banco

Quando o cliente recusa ou cancela a autorização no app do banco, a assinatura termina na hora, com cancellationReason: "authorization_rejected", e chega subscription.cancelled. Antes, a Garu tratava esse aviso como um débito que falhou: a assinatura ficava em past_due, e nada a encerrava.

Documentação

As páginas de assinatura citavam eventos que nunca existiram (subscription.activated, subscription.payment_success, subscription.trial_ending) e um campo que a API não lê: cancelImmediately. Elas agora mostram os cinco eventos de assinatura, o formato real do payload e o campo certo, cancelAtPeriodEnd. Veja Webhooks.

Precisa fazer alguma coisa?

  • Para receber subscription.payment_failed e os outros eventos, assine-os no painel, em Configurações → Webhooks.
  • Libere o acesso no subscription.renewed, não no subscription.created. No Pix Automático, o subscription.created chega antes de o cliente autorizar no banco.
  • Se a sua integração cancela com cancelImmediately: true, troque por cancelAtPeriodEnd: false. A API não lê cancelImmediately, e o cancelamento fica agendado para o fim do período.