Skip to main content

Visão Geral

O webhook REFUND é enviado quando uma devolução PIX é processada. Existem dois cenários:
  1. CashInReversal: Você devolveu um PIX recebido (via /pix/:e2eid/devolucao/:id)
  2. CashOutReversal: Alguém devolveu um PIX que você enviou

Quando é enviado

  • Devolução de PIX recebido confirmada (você devolvendo)
  • Devolução de PIX enviado recebida (alguém devolvendo para você)

Estrutura do Payload

Diferença entre CashInReversal e CashOutReversal

Você devolveu um PIX recebido.
Exemplo: Você recebeu R100,depoisdevolveuR 100, depois devolveu R 50.

Campos Importantes

string
Sempre "REFUND" para devoluções.
number
ID da transação original (não da devolução).
string
Status da transação original após a devolução:
  • REFUNDED: Devolução processada
  • ERROR: Falha na devolução
object
Valor da transação original, não da devolução.
array
Lista de devoluções realizadas. Contém detalhes de cada devolução.
string
Direção do dinheiro:
  • DEBIT: Saindo da sua conta (CashInReversal)
  • CREDIT: Entrando na sua conta (CashOutReversal)
string
E2E ID da transação original.

Processando o Webhook

Exemplo Node.js

Exemplo Python

Devoluções Parciais

Uma transação pode ter múltiplas devoluções parciais. O array refunds contém todas:
Cálculo do saldo de devolução:

Atenção: amount é number em refunds

Dentro do array refunds, o campo payment.amount é number, não string!

Idempotência

Use uma combinação de data.id e refunds[].endToEndId para idempotência:

Tratamento de Erros

Se refund.status === 'ERROR', a devolução falhou:

Boas Práticas

Use creditDebitType para determinar se é CashInReversal (DEBIT) ou CashOutReversal (CREDIT).
O array refunds pode conter múltiplas devoluções parciais. Itere por todas.
  • data.payment.amount é string
  • data.refunds[].payment.amount é number
  • CashInReversal: Debita do seu saldo
  • CashOutReversal: Credita no seu saldo

Próximos Passos

RECEIVE

PIX recebido

TRANSFER

PIX enviado