Refunds

Refund a full or partial charge — from the dashboard today, via API soon.

Refunds

Refunds are issued today through the Dashboard → Transactions → Refund action. A public POST /v1/refunds endpoint is on the roadmap.

How it works

  1. Merchant clicks Refund on a succeeded transaction and enters an amount (full or partial).
  2. spuke issues a reversal of the destination transfer on the platform account so the money comes out of the merchant's balance, not spuke's.
  3. spuke also reverses the pro-rata application fee — you only keep fees for what the buyer actually paid.
  4. Transaction status becomes refunded (full) or partially_refunded (partial).
  5. A charge.refunded webhook fires.

Rules

  • You cannot refund a disputed charge — resolve the dispute first. The dashboard shows a friendly error (charge_disputed).
  • Refunds can be issued for up to 180 days after the original charge (processor limit).
  • Partial refunds can be issued multiple times up to the total captured amount.
  • Fee reversal is automatic and visible in the merchant's Wallet as spuke fee refund.

Webhook payload (charge.refunded)

{
  "type": "charge.refunded",
  "data": {
    "charge_id": "ch_…",
    "session_id": "cs_…",
    "amount_refunded": 1990,
    "amount": 4990,
    "currency": "EUR",
    "reason": "requested_by_customer",
    "fully_refunded": false
  }
}