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
- Merchant clicks Refund on a
succeededtransaction and enters an amount (full or partial). - 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.
- spuke also reverses the pro-rata application fee — you only keep fees for what the buyer actually paid.
- Transaction status becomes
refunded(full) orpartially_refunded(partial). - A
charge.refundedwebhook fires.
Rules
- You cannot refund a
disputedcharge — 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
}
}