Objetivo
Devolver ao pagador original parte ou a totalidade de um cash-inPAID, dentro de 89 dias após o recebimento, via POST /api/pix/refund-in/{id} com {id} = UUID do cash-in (não o transactionId do parceiro).
Corpo (exemplo)
| Campo | Obrigatório | Descrição |
|---|---|---|
refundValue | Sim | Valor em BRL (> 0). |
reason | Não | Motivo. |
externalId | Não | Seu id de estorno; se omitido, a plataforma pode gerar. |
Regras de negócio (origem)
| Regra | Detalhe |
|---|---|
| Pré-condição | Cash-in em PAID. |
| Prazo | Até 89 dias após o recebimento. |
| Soma de devoluções | Não pode exceder o valor original. |
| Competição | Estornos confirmados e ainda pendentes/ambíguos competem pelo mesmo teto (regras internas de soma). |
| Parciais múltiplos | Permitidos; cada um vira um pix_refund_in distinto. |
Estados do refund
| Status | Quando ocorre |
|---|---|
PENDING | Solicitação aceita; aguarda webhook. |
CONFIRMED | Devolução confirmada. |
FAILED | Rejeitada. |
PROVIDER_RESULT_UNKNOWN / RECONCILIATION_REQUIRED | Conforme status. |
Consultas
GET /api/pix/refund/{id}—{id}é o UUID do refund-in (não o cash-in).GET /api/pix/refund— lista paginada com filtros documentados.
Notificação ao comerciante
O eventopix_cash_in_reversal traz event.id = UUID do cash-in original e event.external_id = externalId do refund-in — atenção à semântica na referência de eventos.
Erros de negócio comuns (mensagens orientativas)
| Situação | Mensagem (tipificada) |
|---|---|
| Valor inválido | refundValue must be greater than zero |
| Acima do disponível | refundValue exceeds the amount available for refund |
| Prazo | refund deadline of 89 days has been exceeded |
| Cash-in não pago | refunds can only be issued for PAID cash-in transactions |
| Não encontrado | original cash-in transaction not found |