Refunds
How to issue full and partial refunds, understand fee behaviour, and track refund status through webhooks.
A refund returns money from a settled payment back to the payer. Refunds can be full or partial, and they are initiated via the API — there is no automatic refund trigger.
Refunds can only be requested within 180 days of the original payment being taken.
How refunds work
When you create a refund, Pinch debits the refund amount from your merchant settlement account and returns it to the payer's payment method. The lifecycle is:
- You call
POST /refunds→ status becomesrequested - Pinch picks it up in the next processing run → status moves to
pending-return - Funds are debited from your account →
pending-clearance - Processing completes →
completed
Monitor the refund-created and refund-updated webhook events (or poll List Refunds) to track progress. See Refund Statuses for the full status reference.
Full vs partial refund
- Full refund — set
amountto the original payment amount (in cents). Pinch refunds the entire payment. - Partial refund — set
amountto a smaller value in cents. For example, to refund $25.00 of a $100.00 payment, setamount: 2500.
{
"paymentId": "pmt_abc123",
"amount": 10000,
"reason": "Duplicate charge"
}{
"paymentId": "pmt_abc123",
"amount": 2500,
"reason": "Partial cancellation"
}What happens to fees
By default, Pinch does not return processing fees when you issue a refund — the merchant absorbs the original processing cost.
The response includes two fee-related fields:
| Field | Meaning |
|---|---|
refundFeeCharged | The fee amount (in cents) that was not returned as part of this refund |
refundedFees | Any fees that were returned (if applicable) |
If your fee schedule includes refundable fees, refundedFees will be non-zero. Contact [email protected] for details on your specific fee schedule.
Replay protection with idempotency
To prevent duplicate refunds (e.g. from retrying a failed network request), use the nonce field.
{
"paymentId": "pmt_abc123",
"amount": 10000,
"reason": "Customer request",
"nonce": "refund-pmt_abc123-unique-key"
}If you send the same nonce twice, Pinch returns the existing refund rather than creating a duplicate.
Tracking refunds with webhooks
Subscribe to the following event types on your webhook to be notified of refund state changes:
| Event type | When it fires |
|---|---|
refund-created | A refund is created and queued |
refund-updated | A refund's status changes (e.g. moves to completed or failed) |
See the Events Guide for the full event payloads.
Querying refunds
- List refunds —
GET /refunds— paged, filterable by date range. - Get a refund —
GET /refund/{id}— fetch a single refund by itsref_prefixed ID. - Check replay protection key —
POST /refunds/nonce— confirm whether a givennoncehas already been processed.
Common questions
Can I refund a payment that hasn't settled yet?
No. The payment must be in a settled or approved state. You cannot refund a scheduled or processing payment — cancel it instead using Delete Payment.
What if the refund fails?
The refund will move to failed or cancelled-declined status. Contact [email protected] with the refund ID for assistance.
Can I partially refund multiple times?
Yes. You can issue multiple partial refunds against a single payment as long as the sum does not exceed the original payment amount and each refund is within the 180-day window.
Does the payer receive an email?
Pinch sends the payer a notification email when the refund is processed. The original payment method is credited.
Got feedback on this feature?
Send an email to [email protected] or book in a chat with our API team.
Updated about 16 hours ago
