# Disputes for a payment Enable a connected account to view and manage disputes for a payment. Render a UI component for connected accounts to view disputes applicable to a specific payment. Connected accounts can see details for each dispute, such as the dispute reason, status, amount, and created date. If you enable the `dispute_management` feature for the account session, the connected account can perform actions like submitting evidence and accepting disputes. This functionality is also available in the [Payment details component](https://docs.stripe.com/connect/supported-embedded-components/payment-details.md). This inline component can be integrated on the same page as your other payments UI. It’s suitable for use in full screen, overlay, drawer, or any other layout with adaptable widths. If there aren’t any disputes associated with the payment, the component renders nothing. You can also configure custom behavior, such as different margins, for when there are no disputes. To do so, set a custom callback function using `onDisputesLoaded`. Note: The following is a preview/demo component that behaves differently than live mode usage with real connected accounts. The actual component has more functionality than what might appear in this demo component. For example, for connected accounts without Stripe dashboard access (custom accounts), no user authentication is required in production. In rare cases, a connected account can receive multiple disputes for the same payment created by a customer. Your connected account must review and handle each dispute for the same payment separately. We recommend you inform your connected accounts about this best practice to help improve their payment success rate. By default, embedded components are most compatible with Connect integrations that accept direct charges. Embedded components display less information for destination charges and separate charges and transfers, and this UI component renders nothing for these charge types. To enable users to see disputes associated with destination charges with the [on_behalf_of](https://docs.stripe.com/api/payment_intents/object.md#payment_intent_object-on_behalf_of) attribute, enable the `destination_on_behalf_of_charge_management` feature. When [creating an Account Session](https://docs.stripe.com/api/account_sessions/create.md), enable this component by specifying `payment_disputes` in the `components` parameter. You can turn on or off an individual feature of the payment details component by specifying the `features` parameter under `payment_disputes`: ```curl curl https://api.stripe.com/v1/account_sessions \ -u "<>:" \ -d "account={{CONNECTEDACCOUNT_ID}}" \ -d "components[payment_disputes][enabled]=true" \ -d "components[payment_disputes][features][refund_management]=true" \ -d "components[payment_disputes][features][dispute_management]=true" \ -d "components[payment_disputes][features][destination_on_behalf_of_charge_management]=false" ``` After creating the account session and [initializing ConnectJS](https://docs.stripe.com/connect/get-started-connect-embedded-components.md#account-sessions), you can render the Disputes for a payment component in the frontend: #### JavaScript ```js // Include this element in your HTML const paymentDisputes = stripeConnectInstance.create('payment-disputes'); paymentDisputes.setPayment('{{PAYMENT_INTENT_OR_CHARGE_ID}}'); container.appendChild(paymentDisputes); ``` For [destination charges](https://docs.stripe.com/connect/destination-charges.md) and [separate charges and transfers](https://docs.stripe.com/connect/separate-charges-and-transfers.md), the PaymentIntent doesn’t exist on the connected account. Instead, pass the associated charge ID that belongs to the connected account: 1. Retrieve the charge ID from the PaymentIntent’s [latest_charge](https://docs.stripe.com/api/payment_intents/object.md?api-version=2025-05-28.basil). 1. Expand the `transfer` parameter for this charge. 1. In the expanded object, find the connected account’s charge ID in [transfer.destination_payment](https://docs.stripe.com/api/transfers/object.md#transfer_object-destination_payment). ## Supported parameters This embedded component supports the following parameters: #### HTML + JS | Method | Type | Description | | | --------------------- | ------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | | `setPayment` | `string` | The ID of the payment, charge, or PaymentIntent that displays in the overlay. This should be an ID of the payment, charge, or PaymentIntent on the connected account. If this attribute isn’t defined, the embedded component renders nothing. To obtain this ID, query the [charges API](https://docs.stripe.com/api/charges.md) or use a payment ID that you’ve created or stored in your integration. | required | | `setOnDisputesLoaded` | `({total}: {total: number}) => void` | We send this event with the total number of disputes on this payment when the disputes are loaded. It allows specifying custom behaviors when disputes are loaded. | | #### React | React prop | Type | Description | | | ------------------ | ------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------- | | `payment` | `string` | The ID of the payment, charge, or PaymentIntent that displays in the overlay. This should be an ID of the payment, charge, or PaymentIntent on the connected account. If this parameter isn’t passed in, the embedded component renders nothing. To obtain this ID, query the [charges API](https://docs.stripe.com/api/charges.md) or use a payment ID that you’ve created or stored in your integration. | required | | `onDisputesLoaded` | `() => void` | Allows user to provide a callback to specify custom behaviors when disputes are loaded. | | ## Dispute management for destination charges When you enable both `dispute_management` and `destination_on_behalf_of_charge_management`, your connected accounts can update and modify dispute evidence, counter disputes, and accept disputes for destination charges with the `on_behalf_of` attribute set to the connected account. For [destination charges](https://docs.stripe.com/connect/destination-charges.md), with or without `on_behalf_of`, Stripe debits dispute amounts and fees from your platform account. We recommend setting up [a webhook](https://docs.stripe.com/webhooks.md) to listen to [dispute created events](https://docs.stripe.com/api/events/types.md#event_types-charge.dispute.created). When that happens, you can attempt to recover funds from the connected account by reversing the transfer through the [Dashboard](https://dashboard.stripe.com/test/transfers) or by [creating a transfer reversal](https://docs.stripe.com/api/transfer_reversals/create.md). If the connected account has a negative balance, Stripe attempts to [debit its external account](https://docs.stripe.com/connect/account-balances.md#automatically-debit-connected-accounts) 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](https://docs.stripe.com/get-started/account/add-funds.md). > Retransferring a previous reversal is subject to [cross-border transfer restrictions](https://docs.stripe.com/connect/account-capabilities.md#transfers-cross-border), 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.