Stripe Transfer

A Stripe transfer moves money from a Connect platform's balance to a connected account's balance. Learn how transfers work, how to reverse one, and the risks.

Updated October 1, 2026

A Stripe transfer moves money from a Stripe Connect platform's balance to one of its connected accounts. A marketplace uses it to give a seller their share of a payment that landed on the platform. The money stays inside Stripe. Getting it to the seller's bank is a separate payout from the connected account.

What is a Stripe transfer?

A transfer is a Transfer object with an ID that starts with tr_. It records:

  • amount and currency, the money sent.
  • destination, the connected account ID that received it.
  • amount_reversed, how much has been pulled back so far.
  • reversed, which turns true only once the whole transfer is reversed.
  • transfer_group, an optional label that ties a charge and its transfers to one order.
  • source_transaction, the charge the transfer is funded from, if you set one.

Stripe sends transfer.created when a transfer is made and transfer.reversed when it's reversed, including partial reversals. transfer.updated only fires when the description or metadata changes.

Where transfers come from

Two of Connect's three charge types use transfers.

  • Destination charges. The platform creates the charge with transfer_data[destination] set to the connected account, and Stripe creates the transfer for you. If the platform also sets application_fee_amount, Stripe transfers the full amount and then sends the fee back to the platform. That's how the platform keeps its cut.
  • Separate charges and transfers. The platform charges the customer, then creates one or more transfers itself with the Transfers API.

Direct charges don't use transfers. The payment lands on the connected account, and the platform collects an application fee instead.

Separate charges and transfers

Separate charges and transfers fit cases where a payment and the money sent to sellers don't line up one to one. Stripe lists these cases:

  • One payment split between several sellers, such as a delivery paid to both the restaurant and the courier.
  • Several payments going to one seller.
  • A charge taken before you know who will do the work.
  • A transfer sent before the payment arrives, or for more than the payment.

Two fields keep this safe. source_transaction ties a transfer to a specific charge. Without it, the transfer draws on your available platform balance and fails if that balance is too low. With it, the request succeeds straight away and Stripe moves the money once the charge's funds become available. transfer_group only labels records. It doesn't change how money moves.

Transfer, payout, and application fee

People often mix these up.

  • A transfer moves money from the platform's Stripe balance to a connected account's Stripe balance.
  • A payout moves money from any Stripe balance to a real bank account or debit card, on that account's payout schedule.
  • An application fee is the platform's cut of a payment, collected on the charge.

Reversing a transfer

For destination charges and separate charges and transfers, Stripe takes refunds and disputes from the platform's balance, not the seller's. Stripe doesn't reverse the transfer for you.

  • On a refund, pass reverse_transfer=true to pull back the seller's share in proportion to the refunded amount. For destination charges, if the seller's balance can't cover the reversal, Stripe returns an error and creates no refund.
  • On a dispute, Stripe debits the platform for the disputed amount and the dispute fee. You recover the seller's share by reversing the transfer in the Dashboard or with the API.

Separate transfers carry two more risks. If you transfer money for a bank debit that later fails, Stripe doesn't reverse the transfer, so your platform balance absorbs the loss until you reverse it. And Stripe doesn't retry a transfer that failed for lack of funds, even after you add money.

What to do in practice

  1. Engineering sets source_transaction on separate transfers, stores the transfer_group, and listens for transfer.reversed so internal seller balances stay correct.
  2. Support or operations decide on every refunded destination charge whether the seller should bear the cost, and reverse the transfer if so.
  3. Finance reconciles per connected account, covering the charge in, the transfer out, the application fee kept, and the payout sent.

ChargeBell and transfers

ChargeBell has no transfer alert. It watches the Stripe account you connect for payments, refunds, disputes, subscriptions, and payouts. On a platform that uses destination charges or separate charges and transfers, the charge, the refund, and the dispute all happen on the platform account. A refund alert or dispute alert in Slack is your cue to check whether the matching transfer should be reversed.

Get alerted in Slack

Stripe events: transfer.created, transfer.reversed, transfer.updated

ChargeBell posts Stripe events to the Slack channel you pick, written in plain English.

Related terms