GET /payment-pix/get/:id em loop. Quando um pagamento confirma, a GoatPay envia um POST HTTPS para a URL cadastrada.
Sem porta pública HTTPS? Use WebSocket — conexão persistente com
gp_live_... e subscribe por pattern (payment.*).Configurar
1
1. Endpoint HTTPS
Exponha uma rota pública, por exemplo
https://api.suaempresa.com/goatpay/webhook.2
2. Cadastrar URL
Via API: POST /webhooks/create com sua chave
gp_live_....3
3. Guardar o segredo
Anote o
whsec_... exibido uma única vez na criação.4
4. Validar assinatura
Confira Segurança e assinatura em cada
POST recebido.Escopo por API key
Endpoints criados comPOST /v1/webhooks/create ficam vinculados à chave usada. Recebem eventos das transações criadas pela mesma API key. Endpoints do dashboard (sem vínculo de chave) recebem eventos de toda a conta.
Teste
Dispare o eventowebhook.test cadastrando o tipo na lista de events e processando um teste a partir do painel da conta, ou aguarde uma transação real da mesma API key.
Formato da entrega
Cada entrega é umPOST com corpo JSON no formato abaixo. O campo event repete o tipo inscrito no endpoint; data carrega o payload do evento.
O objeto
data segue o mesmo formato enxuto das respostas /v1: sem provider, accountId, metadata, direction nem updatedAt. IDs do processador aparecem como referenceId; infrações MED como infractionId.
Tipos de data
Campos úteis em transações PIX
Headers:
Segurança e assinatura
Cada entrega usa HMAC-SHA256 com o segredowhsec_... da criação do endpoint.
Validação (Node.js)
Retentativas
Se o endpoint não responder2xx a tempo, a GoatPay reenvia com backoff: 1 min, 5 min, 15 min, 1 h, 4 h (até 5 tentativas).
Idempotência
Persista oid da entrega antes de processar. Duplicatas devem responder 200 sem efeito colateral.
Checklist
- URL HTTPS em produção
- Validar
x-goatpay-signaturecom owhsec_...correto - Responder
200após processar ou enfileirar com segurança - Tratar o mesmo
idde entrega apenas uma vez - Ignorar campos extras desconhecidos em
data
Eventos
Inscreva os tipos abaixo emevents ao criar o endpoint. Use "*" apenas se realmente precisar de todos os eventos futuros.
Catálogo (ativos)
Eventos de cripto e boleto existem no código mas não estão ativos na API pública no momento.
PIX recebido
Disparados por cobranças POST /payment-pix/create. Em todos os exemplos,data.type é PIX_IN.
payment.created — notificação de cobrança criada (payer omitido enquanto pendente; sem QR — guarde a resposta do POST /create):
O QR (
copyPaste, qrCodeBase64, qrcodeUrl) é retornado apenas na resposta de POST /payment-pix/create. O webhook payment.created não inclui esses campos — persista a resposta do create ao gerar a cobrança. Desde 15/08/2026, GET /payment-pix/get pendente retorna copyPaste e qrcodeUrl, mas não qrCodeBase64.payment.paid — pagador identificado em payer:
payment.failed:
payment.pix.expired:
payment.refunded — disparado junto com refund.completed; prefira refund.completed em integrações novas:
Estorno PIX (depósito recebido)
Disparados após POST /refunds/create. Odata é o depósito original com bloco refund.
refund.requested:
refund.completed:
refund.failed:
PIX enviado
Disparados por POST /transfer-pix/create. Em todos os exemplos,data.type é PIX_OUT.
transfer.created — recipient omitido até liquidar; pode incluir securityReview:
transfer.completed — recipient preenchido após liquidação:
transfer.failed:
Transferência interna
Disparados por POST /transfer-internal/create. Dois eventos por operação:transfer.internal.completed:
transfer.internal.received:
transfer.internal.received vai para endpoints da conta destino, não da API key que originou o envio.MED
Disputas MED no trilho PADRAO (PIX regulado). O objetodata segue o mesmo formato de GET /meds/get.
Exemplo
med.created:
med.evidence_sent:
med.updated (disputa rejeitada — saldo liberado):
Links de pagamento
payment_link.paid — payload próprio (não é PIX_IN):
payment.paid também pode ser emitido (formato de PIX recebido). Para checkout de link, inscreva-se em payment_link.paid.
Nota fiscal
Emitidos quando a cobrança usaemitFiscalInvoice: true e a emissão automática está ativa. O webhook traz apenas o ID.
OAuth 2.0
Eventos do ciclo de vida de aplicações OAuth e autorizações de terceiros. Não incluem emissão ou refresh de tokens (alto volume).
O mesmo
event pode chegar em contas diferentes com campos contextualizados: o dono da aplicação vê resourceOwnerAccountName; a conta autorizada não recebe esse campo (já é o titular).
oauth.authorization.granted:
oauth.authorization.revoked — campo reason: user, app_owner, auto ou security:
Apps de terceiros com token OAuth podem cadastrar webhooks via
/v1/webhooks/* usando Authorization: Bearer gp_oat_... e scopes webhooks:read / webhooks:write. Veja o guia OAuth.Teste
Fluxos comuns
Endpoints da API
Permissões na API key:
webhooks/create, webhooks/list, webhooks/get, webhooks/update, webhooks/delete.
