# Stripe: refund_disputed_payment

> Stripe returns refund_disputed_payment when code tries to refund a payment with an open dispute. Accept or counter the dispute instead of refunding.

Canonical: https://app369.com/fix/stripe-refund-disputed-payment/
Last updated: 2026-11-09

refund_disputed_payment is the Stripe error for a refund request on a payment that is under dispute. Once a formal dispute opens, the money is already pulled back, so Stripe allows no refund outside the dispute process.

**Short answer**

Look up the dispute for the payment. To give the customer the money back, accept the dispute, which closes it in their favor. To fight it, submit evidence. Before any automatic refund, check the charge’s disputed flag, and handle the refund failure reason that appears when a dispute lands while a refund is still pending.

Rather not fix it yourself? [**Stripe Billing Fix and Setup**](https://app369.com/fixed-price/stripe-billing-setup/) handles it at a fixed price, agreed before work starts.

## **Why Stripe blocks the refund, and the fix**

1. 01 ### **The payment has an open dispute**
  > “You can’t issue a refund outside the dispute process while the dispute is open.” [**Stripe, How disputes work (receive a dispute)**](https://docs.stripe.com/disputes/how-disputes-work) A support tool or cancel flow called the refund API on a disputed charge. Find the dispute and accept it instead; accepting closes it, and the customer keeps the disputed amount. This applies to formal disputes; for an inquiry (status warning_needs_response), submit evidence instead.```
const { data } = await stripe.disputes.list({ payment_intent: paymentIntentId, limit: 1 });
const dispute = data[0];
if (dispute && dispute.status === 'needs_response') {
  await stripe.disputes.close(dispute.id); // accept the dispute
}
```
2. 02 ### **The refund code never checks for disputes**
  > “You can’t refund a disputed payment.” [**Stripe, Error codes (refund_disputed_payment)**](https://docs.stripe.com/error-codes) Read charge.disputed before calling refunds.create, and route disputed charges to the dispute flow. Log the error code so the support team sees why the refund failed.
3. 03 ### **The dispute arrived while a refund was pending**
  > “A customer disputed the charge while the refund is pending.” [**Stripe, Refunds (failure reasons)**](https://docs.stripe.com/refunds) The refund fails later with failure_reason charge_for_pending_refund_disputed. Listen for refund.failed, then accept or counter the dispute so the customer isn’t paid twice.
4. 04 ### **It is still an inquiry, not a chargeback**
  > “Inquiries on partially refunded charges can still escalate to a chargeback.” [**Stripe, How disputes work (inquiries)**](https://docs.stripe.com/disputes/how-disputes-work) Also check: some networks open an inquiry first. Stripe says a full refund can resolve an inquiry without a dispute fee, but a partial refund may not stop it.

Checked against the vendor’s docs on November 9, 2026: [Stripe docs: Error codes](https://docs.stripe.com/error-codes); [Stripe docs: How disputes work](https://docs.stripe.com/disputes/how-disputes-work); [Stripe docs: Respond to disputes](https://docs.stripe.com/disputes/responding); [Stripe docs: Refund and cancel payments](https://docs.stripe.com/refunds).

## **Rather hand it over?**

Fixed scope, fixed price, paid upfront. The work happens in writing; no call needed.

- [$950**Stripe Billing Fix and Setup**Subscriptions, webhooks, customer portal and failed payments set up or fixed, tested in Stripe test mode.**See scope and start**](https://app369.com/fixed-price/stripe-billing-setup/)
- [from $450**App Fix Ticket**One reproducible bug in an existing mobile or web app, diagnosed and fixed.**See scope and start**](https://app369.com/fixed-price/flutter-firebase-bug-fix/)
- [from $450**AI-Built App Rescue**A Lovable, Bolt or Cursor app checked end to end in 3 days, then its worst problems fixed at a fixed price.****No issues worth fixing, no charge.**** If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.**See scope and start**](https://app369.com/fixed-price/ai-app-rescue/)

[**All 127 Fiverr reviews**](https://app369.com/reviews/)

Related: [**Stripe charge_already_refunded**](https://app369.com/fix/stripe-charge-already-refunded/) · [**Stripe dispute and chargeback**](https://app369.com/fix/stripe-dispute-chargeback/) · [**Stripe subscription past_due**](https://app369.com/fix/stripe-subscription-past-due/) · [**Stripe payment_intent_authentication_failure**](https://app369.com/fix/stripe-payment-intent-authentication-failure/)

Questions

## **More on this error**

<details>

<summary>**Is accepting a dispute the same as a refund? **+</summary>

For the customer, yes: the disputed amount stays with them. The dispute fee isn’t returned (outside Mexico), and the dispute still counts toward the dispute rate.

</details>

<details>

<summary>**What is charge_disputed? **+</summary>

A related Stripe error for refunding a charge that has been charged back. The fix is the same: respond through the dispute.

</details>

<details>

<summary>**Can you fix it for me? **+</summary>

If one bug is the whole problem, the App Fix Ticket covers it: a written diagnosis first, then the fix. If the app has more going on, the Launch Check is a written check of the whole app. Each issue found is rated critical, high, medium or low, with where it is and how it was confirmed. No issues worth fixing, no charge. If the Launch Check finds nothing rated medium or higher, Simon refunds the full $450. You keep the report either way. This applies to the first 10 Launch Checks bought after October 30, 2026.

</details>

A different error?

## **Describe it and get a written quote**

Send the error and what you were doing. You get a written scope, a fixed price and a timeline; Simon replies by email, usually within one business day.

[**Describe your problem **→](https://app369.com/contact/) [**All fixes**](https://app369.com/fix/)