Skip to content

Refunds

Refunds operate on a provider capture through POST /api/payments/captures/{capture_id}/refund.

Request fields are strict: an unrecognized property returns 422 Unprocessable Entity. Send only the documented fields and field names.

  • Omit the request body, or omit amount, for a full refund.
  • Send an amount for a partial refund. The schema requires a value greater than zero and accepts the amount representation declared by OpenAPI.
  • The capture must belong to the merchant represented by the credential.

Supply Idempotency-Key when retrying. Reusing a completed operation’s key replays its outcome instead of issuing the refund twice. Keep that key attached to your own refund record and do not reuse it for a different refund intent.

The operation accepts the security alternatives declared in the API contract: a suitably authorized dashboard session, a merchant API key, or a channel API key paired with the merchant header. A browser should never call it with a secret key.

After an accepted response, reconcile transaction state and process payment.refunded through your duplicate-safe webhook handler.

Refunds target provider captures, not checkout sessions, merchant order IDs, or browser callbacks. A refund response is not a channel statement or remittance record, and the operation does not accept an arbitrary target merchant from the request body.