Skip to content

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 POST

Issue a full refund

Via API

bash
curl https://api.stripe.com/v1/refunds \
  -u "sk_test_YOUR_KEY:" \
  -d payment_intent=pi_Aabcxyz01aDfoo
javascript
const refund = await stripe.refunds.create({
  payment_intent: 'pi_Aabcxyz01aDfoo',
});

Via Dashboard

  1. Go to Payments in the Dashboard
  2. Click the overflow menu next to the payment
  3. Select Refund payment
  4. 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=1000
javascript
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:

StatusMeaning
pendingRefund is in progress
succeededRefund completed successfully
failedRefund failed (funds returned to your balance)
canceledRefund 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

Stripe API Reference - Self-contained docs reference, refreshed 2026-05-18