Refund and Cancel Payments Fresh
Cancel a payment before it's completed at no cost, or refund all or part of a completed payment.
Stripe's processing fees from the original transaction are not returned when issuing a refund.
Cancel before completion
Cancel a PaymentIntent that hasn't been confirmed yet:
bash
curl https://api.stripe.com/v1/payment_intents/pi_123/cancel \
-u "sk_test_YOUR_KEY:" \
-X POSTIssue a full refund
Via API
bash
curl https://api.stripe.com/v1/refunds \
-u "sk_test_YOUR_KEY:" \
-d payment_intent=pi_Aabcxyz01aDfoojavascript
const refund = await stripe.refunds.create({
payment_intent: 'pi_Aabcxyz01aDfoo',
});Via Dashboard
- Go to Payments in the Dashboard
- Click the overflow menu next to the payment
- Select Refund payment
- Select a reason, click Refund
Issue a partial refund
Specify an amount in the smallest currency unit (cents for USD):
bash
curl https://api.stripe.com/v1/refunds \
-u "sk_test_YOUR_KEY:" \
-d payment_intent=pi_Aabcxyz01aDfoo \
-d amount=1000javascript
const refund = await stripe.refunds.create({
payment_intent: 'pi_Aabcxyz01aDfoo',
amount: 1000, // $10.00
});You can issue multiple partial refunds against a charge, but the total can't exceed the original charge amount.
Bulk refunds
The Dashboard supports bulk full refunds. Select multiple payments using the checkboxes, click Refund, and select a reason. Partial refunds must be issued individually.
Refund destinations
Refunds go back to the original payment method — you can't redirect a refund to a different card or bank account.
- Expired/canceled cards — the card issuer typically credits the customer's replacement card, or delivers via check/bank deposit
- ACH/SEPA — if the customer closed the account, the bank returns the refund as failed
- Other methods — refund handling varies by bank
How refunds appear
Successful refunds appear on the customer's bank statement. Stripe emails refund notifications to customers when:
- The original charge was created on a Customer object with an email address
- You've enabled "Email customers for refunds" in Dashboard settings
Failed refunds
In rare cases, a refund can fail. When it does, Stripe returns the funds to your Stripe balance. Check the refund's status field:
| Status | Meaning |
|---|---|
pending | Refund is in progress |
succeeded | Refund completed successfully |
failed | Refund failed (funds returned to your balance) |
canceled | Refund was canceled |
Refunds on Connect platforms
Refund behavior depends on the charge type:
- Direct charges — Stripe debits the connected account directly
- Destination charges — Stripe debits your platform; reverse the transfer to recover from the connected account
- Separate charge and transfer — same as destination charges
Refund API reference
bash
# Create a refund
POST /v1/refunds
# Retrieve a refund
GET /v1/refunds/:id
# Update a refund (add metadata or reason)
POST /v1/refunds/:id
# List refunds
GET /v1/refunds