Skip to main content
POST
Reembolsar pagamento de link
Reembolsa integralmente um pagamento realizado em um link de pagamento. O valor reembolsado é igual ao valor original da transação — não há reembolso parcial.
Requer a permissão REFUND:CREATE.
Cobranças de assinatura (checkout bill_... ou pagamento de uma assinatura) não podem ser reembolsadas pela API v2. A API retorna Cobranças de assinatura não podem ser reembolsadas pela API v2.

Obrigatório

Apenas id é obrigatório: o ID da cobrança de um pagamento específico, não o bill_... do link.
O campo id aceita:
Reembolsos atuam sobre um pagamento específico, não sobre o link como um todo. Se o mesmo link recebeu vários pagamentos, cada um precisa ser reembolsado individualmente.O ID de cada pagamento aparece no dashboard, em Links de pagamento → o link → transações. Por lá você também pode reembolsar direto.
Exemplo mínimo:
Exemplo com motivo:
Resposta:
id é a transação de reembolso, originalId repete o id enviado e reason vem null quando não é informado.
Uma nova chamada para um pagamento já reembolsado não cria outro reembolso: a API retorna o erro Esta cobrança já foi reembolsada. (HTTP 400). Trate esse erro como “já reembolsado”.

Regras de negócio

  • Reembolso total apenas — o valor é sempre igual ao valor original da transação.
  • Métodos suportados — PIX, PIX_QRCODE e CARD. Boleto, TED e movimentações internas não são reembolsáveis via API.
  • Estado exigido:
    • PIX / PIX_QRCODE — transação precisa estar COMPLETE.
    • CARD — transação precisa estar APPROVED ou COMPLETE.
  • Disputas — transações em disputa (UNDER_DISPUTE ou metadata.underDispute=true) não podem ser reembolsadas por este endpoint.
  • Saldo — o valor é debitado do saldo available da loja (ou pending, em casos específicos de CARD). Sem saldo, retorna INSUFFICIENT_FUNDS.
  • Modo dev (sandbox) — em devMode o reembolso é confirmado instantaneamente, sem chamar o provider real.
  • Status final após o reembolso:
    • A transação original vira REFUNDED.
    • O billing daquele pagamento vira REFUNDED.
    • O payment intent vira REFUNDED.
    • É criada uma nova transação que representa o reembolso; o ID dela volta no campo id da resposta.
Ao concluir, é disparado o webhook checkout.refunded. Configure seu endpoint em Webhooks para receber a notificação.

Códigos de erro

Exemplo de erro:

Exemplo cURL

Authorizations

Authorization
string
header
required

Todas as requisições devem incluir sua chave de API no header Authorization usando o formato Bearer <abacatepay-api-key>. Sem esse header a requisição será rejeitada.

Saiba mais sobre como criar e usar chaves de API na documentação de autenticação.

Body

application/json
id
string
required

ID da cobrança de um pagamento específico do link (pix_char_, card_ ou char_). O bill_ do link é recusado. O ID de cada pagamento aparece no dashboard, no detalhe das transações do link.

Example:

"pix_char_abc123xyz"

reason
string

Motivo do reembolso. Aparece no histórico da transação.

Maximum string length: 500
Example:

"Cobrança duplicada."

Response

Reembolso criado com sucesso.

data
object
error
string | null
Example:

null

success
boolean

Se a requisição obteve sucesso ou não.

Example:

true