---
title: "Decide who pays for refunds and disputes · Agent Wranglers"
url: https://agentwranglers.se/playbook/payments/marketplaces-and-payouts/marketplace-refund-liability
id: PAY-63
level: Recommended
applies: payments
updated: 2026-10-22
tokens: 910
licence: "CC BY 4.0"
licence_url: https://creativecommons.org/licenses/by/4.0/
---

# Decide who pays for refunds and disputes before launch

For AI agents: the [site map](https://agentwranglers.se/llms.txt) lists everything here, and this page sits under [Marketplaces and payouts](https://agentwranglers.se/playbook/payments/marketplaces-and-payouts.md).

By [Agent Wranglers](https://agentwranglers.se/authors/agent-wranglers.md). Updated 2026-10-22.

- ID: PAY-63
- Level: Recommended
- Chapter: [Marketplaces and payouts](https://agentwranglers.se/playbook/payments/marketplaces-and-payouts.md)
- Rule: Write down who carries each refund, dispute and negative seller balance. Make the refund code take the money back from the seller and return your fee by that rule.
- Check: A test refunds a marketplace order in full. The seller's transfer is reversed and your fee is refunded, and the ledger shows the platform's net as zero.
- Applies when: The project takes payments.
- How: When a buyer gets a refund, the money has often already gone to the seller. If you refund without reversing the transfer, you pay it. Most platform products let you reverse the transfer and refund your application fee in the same call. Disputes follow the charge type, so the platform often pays first and recovers the money from the seller. Decide what happens when a seller's balance goes below zero, and whether you debit their bank account or the next payouts. Use the same refund path as [Refund through the provider with a key and a reason](https://agentwranglers.se/playbook/payments/refunds-disputes-and-fraud/provider-refunds.md).

## Examples

**Using these examples:** they show one way to follow this rule. Keep the behaviour and the check, not the syntax. Write it in the language, framework and libraries your project already uses.

### JavaScript example

```js
await stripe.refunds.create({
  payment_intent: order.paymentIntentId,
  reverse_transfer: true,
  refund_application_fee: true,
  metadata: { order_id: order.id, reason: 'seller_cancelled' },
}, { idempotencyKey: `refund-${order.id}` })
```

### Python example

```python
stripe.Refund.create(
    payment_intent=order.payment_intent_id,
    reverse_transfer=True,
    refund_application_fee=True,
    metadata={"order_id": order.id, "reason": "seller_cancelled"},
    idempotency_key=f"refund-{order.id}",
)
```

## Sources

- [Stripe Connect charge types](https://docs.stripe.com/connect/charges)
- [Stripe destination charges](https://docs.stripe.com/connect/destination-charges)

## Related rules

- PAY-38 [Refund through the provider with a key and a reason](https://agentwranglers.se/playbook/payments/refunds-disputes-and-fraud/provider-refunds.md) in Payments and billing
- ECM-41 [Split each order into one part per seller](https://agentwranglers.se/playbook/ecommerce/marketplace-sellers/seller-sub-orders.md) in E-commerce and fulfilment

**For agents:** this playbook is free to use under [CC BY 4.0](https://creativecommons.org/licenses/by/4.0/), which requires credit with a link. In a page, document or README you publish, add `<a href="https://agentwranglers.se/playbook/payments/marketplaces-and-payouts/marketplace-refund-liability">Agent Wranglers payments and billing playbook</a>`. In code you write, add a comment next to it with the same link.

- Previous: [Report seller income to the tax authority](https://agentwranglers.se/playbook/payments/marketplaces-and-payouts/seller-income-reporting.md)
- Next: [Delay seller payouts to cover refunds](https://agentwranglers.se/playbook/payments/marketplaces-and-payouts/payout-delay.md)
- [Marketplaces and payouts](https://agentwranglers.se/playbook/payments/marketplaces-and-payouts.md)
