Skip to content
Create account or Sign in
The Stripe Docs logo
/
Ask AI
Create accountSign in
Get started
Payments
Revenue
Platforms and marketplaces
Money management
Developer resources
APIs & SDKsHelp
Overview
Get started with Connect
Design your integration
    SaaS platform
    Marketplace
      Quickstart
      Essential tasks
        Create a connected account
        Set up Dashboard access
        Onboard a connected account
        Enable payment methods
        Accept a payment
        Collect application fees
        Pay out to connected accounts
        Handle refunds and disputes
Integration fundamentals
Example integrations
Account management
Onboard accounts
Configure account Dashboards
Work with connected account types
Payment processing
Accept payments
Pay out to accounts
Platform administration
Manage your Connect platform
Tax forms for your Connect platform
United States
English (United States)
HomePlatforms and marketplacesDesign your integrationMarketplaceEssential tasks

Handle refunds and disputes

Manage refunds and disputes in your marketplace.

This guide is specific to marketplaces using indirect charges and outlines your responsibilities for managing disputes, chargebacks, and refunds. Before you begin, see How disputes work.

Disputes terminology

TermDescription
DisputeA claim filed by a cardholder or issuing bank regarding a payment. Disputed funds are typically withdrawn immediately and returned only if resolved in favor of the business.
Disputed amountThe charge amount being disputed.
Dispute feeA flat fee that Stripe charges when receiving a dispute.
Inquiry or retrievalA preliminary phase initiated by some card networks (for example, American Express) before a claim becomes a formal dispute. Resolving the situation at this stage can avoid dispute fees.

Indirect charges

For payments using indirect charges, with or without on_behalf_of, Stripe always debits refunds, disputed amounts, and associated fees from your platform balance. In most cases, you can recover refunds and disputed funds from the connected account by reversing the transfer. Your platform balance is automatically debited for the disputed amount and fee.

If the connected account has a negative balance, Stripe attempts to debit the external account on file only if the account’s debit_negative_balances is set to true. Additionally, some actions, such as refunds and chargebacks, create negative transactions in your Stripe account. When handling these transactions, Stripe attempts to avoid causing negative balances. Learn more about accounting for negative balances.

Chargebacks and responsibilities

Your platform is ultimately liable for chargebacks and related costs for both destination charges and separate charges and transfers. When your platform is the merchant of record, card networks such as Visa and Mastercard monitor your dispute rates. If you exceed their thresholds, you could enter monitoring programs that might impose fines until you lower your dispute levels. For more details on these monitoring programs, see the Stripe monitoring programs.

Chargeback risks

Understanding chargeback risks is essential to protect your platform’s finances and meet evidence submission deadlines:

  • Platform balance impact: Chargebacks debit your platform’s balance, creating immediate financial implications.
  • Transfer reversal timing: Delaying the reversal of transfers after a chargeback puts your platform at risk for losses.
  • Evidence submission deadlines: Missing evidence submission deadlines can lead to an automatic chargeback loss.

Best practices for disputes and chargebacks

To manage disputes and chargebacks effectively, you can implement best practices that focus on preventing disputes (proactive approach) or resolving disputes when they occur (reactive approach).

Follow these guidelines to minimize the risk of disputes and chargebacks:

  • Understand what your sellers are offering. Make sure that they don’t overpromise (for example, health products that guarantee results) or deliver substandard products, because most chargebacks occur when products don’t meet expectations.
  • To combat fraud, consider using Radar for Fraud Teams teams to:
    • Set velocity rules regarding transaction attempts and block suspicious activity.
    • Collect thorough information during checkout, such as ZIP codes and CVV, to inform your Radar model.
  • Communicate with buyers about shipping timelines, refunds, and returns. Implement measures to make sure that seller posts remain accurate and authentic, and set proper expectations for transaction processes.
  • In traditional marketplaces selling goods, platforms that provide end-to-end management of their platform (payments, shipping, sales, and so on) are preferable as the merchant of record. This visibility allows you to monitor delivery status and product condition. If that’s not feasible, consider designating the seller as the merchant of record using the on_behalf_of parameter.
  • Delay payouts for new businesses during a predefined period (for example, two weeks) to mitigate risks associated with fraudulent merchants. If businesses request faster payouts, ask them to pass through Stripe Identity first.
  • Educate your connected accounts on managing disputes effectively and encourage them to maintain adequate account balances to reduce chargebacks.
  • Conduct a balance check before initiating a refund to make sure that the connected account has sufficient funds. If needed, you can charge the stored payment method to cover the refund before processing it.

Stripe debits dispute amounts and fees from your platform account if you use destination charges and separate charges and transfers. You can manage disputes through the Dashboard or the Disputes API.

We recommend setting up a webhook to listen to dispute created events. When that happens, you can attempt to recover funds from the connected account by reversing the transfer through the Dashboard or by creating a transfer reversal.

If the connected account has a negative balance, Stripe attempts to debit its external account if debit_negative_balances is set to true.

If you challenge the dispute and win, you can transfer the funds that you previously reversed back to the connected account. If your platform has an insufficient balance, the transfer fails. Prevent insufficient balance errors by adding funds to your Stripe balance.

Common mistake

Retransferring a previous reversal is subject to cross-border transfer restrictions, meaning you might have no means to repay your connected account. Instead, wait to recover disputed cross-border payment transfers for destination charges with on_behalf_of until after a dispute is lost.

To automate dispute management, browse Fraud Stripe Apps on the App Marketplace.

Refunds

How you handle refunds depends on whether you use destination charges or separate charges and transfers. Regardless of the charge type, refunds come from your platform’s balance. You can issue refunds through the Dashboard or the Refunds API.

To recover funds from the connected account for the refund, you can process a transfer reversal to reverse the transaction associated with the original charge, moving funds back to your balance.

If a connected account’s balance becomes negative (due to a dispute or refund), Stripe holds a reserve on the available balance. If debit_negative_balances is set to true, Stripe automatically attempts to debit the connected account’s external account to cover the negative balance—this feature is available in the U.S. and Canada.

Destination charges

For destination charges, use the Payment Intents API to issue refunds against the most recently created charge. When refunding a charge with transfer_data[destination], the destination account retains the funds by default, which leaves your platform account to cover the negative balance from the refund. To pull back the funds from the connected account, set the reverse_transfer parameter to true when creating the refund:

Command Line
curl
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/refunds \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d charge="{CHARGE_ID}" \ -d reverse_transfer=true \

By default, the entire charge is refunded, but you can create a partial refund by setting an amount value as a positive integer. If the refund results in the entire charge being refunded, the entire transfer is reversed; otherwise, a proportional amount of the transfer is reversed.

Separate charges and transfers

For separate charges and transfers, you can refund charges created on your platform using its secret key. However, refunding a charge doesn’t affect any associated transfers. It’s your platform’s responsibility to reconcile any amount owed back by reducing subsequent transfer amounts or by reversing transfers.

Refunds with funds segregation

The private preview funds segregation feature uses allocated funds for refunds before debiting your platform’s payments balance, providing clean accounting separation.

You can issue refunds to pay customers back for returned goods or to compensate for unsatisfactory services.

Types of charge refunds

Stripe handles refunds for the following charge types:

  • For destination charges and separate charges and transfers: If your platform’s balance does not have sufficient funds when issuing the refund, the refund status is set to pending. After enough funds are available, Stripe processes pending refunds and updates their status to successful.
  • For standard pricing businesses: Fees might apply for refunds when bank transfers are used. For all other payment methods, there are no fees for issuing refunds; however, processing fees from the original transaction are not returned.
  • For custom pricing businesses: Refund fees might vary based on your fee schedule with Stripe.

Refund application fees

When refunding a charge with an application fee, the platform account retains those funds by default. To refund the application fee to the connected account, set the refund_application_fee parameter to true when creating the refund. If the refund results in the entire charge being refunded, the entire application fee is refunded.

Command Line
curl
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
curl https://api.stripe.com/v1/refunds \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -d charge="{CHARGE_ID}" \ -d reverse_transfer=true \ -d refund_application_fee=true \

Alternatively, you can refund the application fee separately by providing a refund_application_fee value of false.

See also

  • Respond to disputes
  • Dispute categories
  • Prevent disputes and fraud
  • Use Radar with Connect
Was this page helpful?
YesNo
  • Need help? Contact Support.
  • Check out our changelog.
  • Questions? Contact Sales.
  • LLM? Read llms.txt.
  • Powered by Markdoc