Skip to main content
Registre uma URL HTTPS e o SwytchPay faz POST nela quando um evento ocorre.

Registrar

POST /v1/webhooks
A resposta traz o secret (whsec_…) uma única vez — use-o para validar a assinatura. Omita events para receber todos.

Eventos

Depósitosdeposit.pending · deposit.paid · deposit.expired Saquespayout.pending · payout.processing · payout.paid · payout.failed · payout.canceled MED (chargeback)med.opened · med.under_analysis · med.won · med.lost

Verificar a assinatura

Cada entrega traz dois headers:
A assinatura é HMAC-SHA256(secret, "{timestamp}.{corpo cru}"). Valide sobre o corpo cru (não re-serialize o JSON) e rejeite timestamps com mais de 5 minutos (anti-replay):

Entrega e idempotência

  • Responda 2xx em até 7s. Falhas são re-tentadas (2 tentativas imediatas + redelivery por até 24h).
  • O mesmo evento pode chegar mais de uma vez — implemente idempotência por data.id + event.
  • GET /v1/webhooks/:id/deliveries mostra o log de entregas (status, latência, tentativas).
  • POST /v1/webhooks/:id/test dispara um evento de exemplo assinado.

Formato compatível (ZyroPay)

O webhook tem dois formatos, escolhidos por como você registra:
  • Nativo (acima) — registrado por POST /v1/webhooks. Payload { event, data } + assinatura HMAC.
  • Compat ZyroPay — registrado por PUT /compat/zyropay/cli/client/update/notification-url (veja Integração de corretora). O payload sai no formato do conector (status: CONFIRMED, type: PixIn/PixOut, externalId, paymentId, movId, amount, securityParaphrase) — a plataforma que já consumia a ZyroPay recebe sem mudar nada.
Mapeamento no modo compat (o Zyro só notifica estados terminaisstatus ∈ PENDING|CONFIRMED|EXPIRED|FAILED):
Eventos de andamento (deposit.pending, payout.pending, payout.processing) e as categorias MED/conversão/ estorno não são enviados no modo compat — são exclusivos do formato nativo (mais rico). No compat, só chegam os estados terminais que o conector ZyroPay espera.