Skip to content

Refunds

Money → Refunds lists every refund, and a refund is created from the transaction it reverses rather than from this page.

Open the transaction, choose Refund, and enter an amount. Leave the amount as it is to refund in full, or lower it for a partial refund.

You can refund in several parts. The total of all refunds against one charge cannot exceed the original — the attempt is refused with refund_exceeds_original, and the figure to check is the original amount, not the merchant amount.

A refund has its own status and takes its own time. pending means it is with the partner; succeeded means the customer has it. The customer does not see it the moment you click.

A refund takes the money back out of your balance. If your available balance is not sufficient, the refund can be refused — the funds have to come from somewhere, and a refund is not a reversal of the bookkeeping, it is a new movement in the other direction.

The fee on the original collection is not automatically returned. Check your pricing agreement for what is refundable. Budget for this: a full refund usually costs you slightly more than the payment earned you.

  • A transaction that never succeeded. There is nothing to send back. If a customer was charged on a transaction showing failed, that is a real discrepancy — raise it with us rather than refunding something else.
  • More than the original amount, in total across all refunds.
  • A transaction under dispute. The dispute process decides that money; see Disputes. Refunding a disputed payment mid-process can leave you out twice.

The usual causes are a closed or changed customer account — a wallet that no longer exists, a card that has been reissued. The money stays with you and the customer still does not have it, which means somebody has to contact them for current details.

The transaction’s own page shows the reason. If it says nothing useful, send us the refund’s reference.

POST /v1/refunds against the charge, with a refund.create scope. It takes an Idempotency-Key like any other money movement — and for the same reason. See Idempotency.

Refunds also emit webhooks (refund.succeeded, refund.failed), so your own system can learn the outcome rather than polling for it.