Skip to main content
Os webhooks de saída são as notificações que a PagFinance envia ao seu backend quando ocorre um evento de cash-out, cash-in, saque ou KYC. Você registra um destino e recebe todos os seus eventos ali.
Este é o sentido de saída (API para você). Os webhooks de entrada que a plataforma expõe para receber callbacks dos provedores bancário e de KYC (por exemplo /webhooks/bank) não fazem parte da sua integração; você não os consome.

Registrar um destino

POST /api/v1/partners/me/webhook-config (API key do parceiro ou HMAC) Registre uma vez a URL de destino, os eventos que você quer e quaisquer cabeçalhos customizados. Leia com GET e remova com DELETE no mesmo path.
string
obrigatório
O único destino HTTPS que recebe todas as suas notificações.
string[]
Filtro de assinatura. Ausente ou vazio recebe todos os eventos. Veja o catálogo abaixo para os valores válidos.
object
Cabeçalhos HTTP extras enviados em cada entrega (por exemplo um token de autorização para o seu endpoint). Os cabeçalhos de assinatura e de evento da plataforma têm precedência e nunca são sobrescritos.
Sem um destino registrado, os eventos são apenas persistidos, não enviados.

Envelope do payload

Toda entrega compartilha um envelope comum. O id de correlação varia por família de evento: intentId (cash-out e cash-in), withdrawId (saque BRLP) ou sessionId (KYC).

Catálogo de eventos

Cash-out (offramp), chave de correlação intentId

Cash-in (onramp), chave de correlação intentId

CASHIN_COMPLETED tem duas variantes, discriminadas por data.deliveryId:
  • Sem deliveryId (legado): creditar a cripto na carteira do usuário é responsabilidade do seu backend. data: correlationID, walletAddress, valueCents, transactionID, splitApplied, splitValueCents, completedAt.
  • Com deliveryId: a plataforma já entregou a cripto on-chain em data.destination, nada a creditar. data: correlationID, deliveryId, onChainTxId, asset, chain, tokenAmount, destination, completedAt.
CASHIN_FAILED significa que o fiduciário foi capturado mas nenhuma cripto foi entregue. Trate como um incidente e encaminhe ao suporte. A expiração de uma cobrança de cash-in atualmente não produz webhook; consulte o status com GET se necessário.

Saque BRLP (Modo B), chave de correlação withdrawId

KYC, chave de correlação sessionId

O data do KYC carrega externalUserId, type ('PF' | 'PJ'), provider, status, previousStatus, documentMasked, rejectionReason?, completedAt?.

Verificação de assinatura

Toda entrega é assinada. Verifique a assinatura antes de confiar no payload.
A assinatura é HMAC-SHA256 sobre o corpo JSON cru, assinada com o seu webhookSecret de parceiro (entregue no onboarding e rotacionável via POST /api/v1/partners/me/rotate-webhook-secret). Calcule o valor esperado e compare com um timing-safe equal.
O prefixo do cabeçalho de assinatura tem App como padrão (X-App-Signature, X-App-Event); o prefixo exato da sua instância é confirmado no onboarding. Parceiros legados sem segredo próprio recorrem a um segredo de assinatura global.

Garantias de entrega

Retry

3 tentativas, backoff 2s / 4s / 8s, timeout de 10s por tentativa. Falha após os retries é apenas registrada; não bloqueia o fluxo de negócio.

Confirmação

Responda 2xx. Qualquer não-2xx ou timeout conta como falha e dispara um retry.

Idempotência

A ordem não é garantida. Deduplique por intentId, correlationID, withdrawId ou sessionId.

Somente HTTPS

Registre apenas um destino HTTPS.