Skip to content

Refunds

Refund a captured transaction in full or in part. Refunds are processed against the original card and emit a payment.refunded webhook.

Issue a refund

http
POST /api/v1/payments/{transaction_id}/refund
json
{
  "amount": 1000,
  "reason": "Customer request"
}

Response

json
{
  "id": "ref_xyz789",
  "payment_id": "txn_789xyz",
  "amount": 1000,
  "status": "completed",
  "created_at": "2026-05-05T12:00:00+00:00"
}

Partial and multiple refunds

  • Set amount less than the original transaction amount for a partial refund.
  • Multiple partial refunds are allowed up to the original captured amount.
  • Each refund fires its own payment.refunded webhook.

When to use refund vs void

If the underlying transaction is authorized but not yet captured, use Void instead — it releases the hold without a refund record. Once captured, only refund applies.

Reason codes

reason is free-text, stored on the refund record, and surfaces on receipts and the dashboard. Keep it customer-friendly — it shows up in dispute documentation.

Next

Released under the proprietary Genius Checkout license.