Issue a refund
Return funds to a customer for a charge, a payment intent, or a paid invoice — in full or in part.
A refund returns captured funds to the customer who paid them. You can refund a charge by its payment intent or by the invoice it paid, refund the full amount or only part of it, and record refunds that were already processed outside PaymentKit.
Create a refund
A refund always targets a single succeeded charge. You identify that charge in one of two ways:
payment_intent_id— refund the latest succeeded charge on a payment intent.invoice_id— refund the charge that paid an invoice. PaymentKit resolves the payment allocation for you. (If the invoice was paid by more than one payment intent, refund bypayment_intent_idinstead.)
Provide at least one of these. If you supply both, payment_intent_id takes precedence.
Dashboard
API
- Open the Payment or Invoice you want to refund
- Click Refund
- Enter a full or partial amount and choose a reason
- Click Refund to send it to the processor
The refund appears immediately with a Pending status and updates to Succeeded once the processor confirms it.
Request fields
Send an Idempotency-Key header on every create request. If the call is retried with the same
key, PaymentKit returns the original refund instead of issuing a duplicate.
The refund object
Refund statuses
Look up refunds
Rules and limits
- The charge must have succeeded. You can only refund a charge in the
succeededstate. - You cannot refund more than the refundable amount — the captured amount minus any refunds
that have already succeeded. Fully-refunded charges have a refundable amount of
0. - Partial refunds are allowed as long as the running total stays within the refundable amount. Issue several partial refunds against the same charge until it is fully refunded.
- Refunding an invoice payment reduces the paid amount on the linked invoice(s) accordingly.
Webhook events
There is no dedicated refund.succeeded event. A successful refund surfaces as refund.updated carrying the new succeeded status.