Refunds
Give back all or part of a collection.
Create a refund
POST /v1/refunds
| Field | Required | Description |
|---|---|---|
payment_id |
yes | The original collection: its identifier or reference |
amount_minor |
— | String, in minor units. Absent = the remaining balance |
reason |
— | customer_request, duplicate, fraudulent or other |
description |
— | Free text, visible in the dashboard |
A refund is a full operation in its own right: its own id, its own status, its own webhook event
(refund.success / refund.failed).
Rules
- Only a successful collection can be refunded.
- Refunds cannot add up to more than the amount collected — the API answers
422 refund_exceeds_refundablebeyond that. - Collection fees are not given back: they stay with you.
- A partial refund leaves the original collection readable, with its full history.
- Funds are taken from your available balance at the time of the call, like a payout.
One idempotency key per refund. Never the original payment's identifier: a collection can be refunded in several parts, and a key carrying the parent's identifier would make the second partial refund look like a replay of the first.
Read and list
GET /v1/refunds/{id}
GET /v1/refunds — list; ?payment_id= for one collection
GET /v1/payments/{id}/refunds — one collection's refunds
GET /v1/payments/{id}/refunds and GET /v1/refunds?payment_id= return the same object as the list,
with the same pagination. The collection is named by its identifier or its reference; another
account's answers 404 on the sub-resource, and an empty list on the filter.
Refusal codes
A refused refund answers 422, in the usual error envelope:
| Code | Meaning |
|---|---|
refund_exceeds_refundable |
The amount is above what remains refundable. The error carries amount_refundable_minor. |
wave_partial_refund_window_closed |
Wave collection: the partial-refund period has passed; only a full refund remains possible, if nothing was refunded. |
wave_partial_refunds_disabled |
Wave partial refunds are not open; a full refund remains possible. |
wave_refund_window_closed |
Wave collection already partly refunded and the period has passed: no further refund. |
payer_not_found |
Wave does not name the payer: a partial refund, paid to the payer, cannot be sent. |
insufficient_funds |
Your available balance does not cover the refund. |
Wave: partial refunds
Wave only refunds a transaction in full. A partial refund of a Wave collection is therefore paid
to the payer's Wave number, and only within the period given by partial_refund_deadline on the
collection. After it, only a full refund remains possible, and only if nothing was refunded.