Sending Payouts

Pay out funds received from credit cards to third-party bank accounts or debit cards.

Once you've accepted a payment through Stripe, you can create payouts through the API to send funds to arbitrary third-party bank accounts or debit cards.

This feature is currently only available for U.S. Stripe accounts. When sending to a bank account, the recipient's bank account must be in the U.S. When sending to a debit card, payouts must be less than $3000, and the recipient's card must be a U.S. Visa or Mastercard debit card that is not prepaid.

Stripe sends automatic payouts to your bank account on a two-day rolling basis. Once you switch to manual payouts, though, you'll no longer receive automatic Stripe payouts. Payments you receive will instead accumulate in your Stripe balance. The funds from a payment will become available for you to pay out to third parties (or yourself) after two days.

Creating payouts

You can initiate a payout to a recipient with a single API call. While doing so, you can also specify the description that appears on the recipient's account statement.

The returned payout object describes the status of the payout and specifies when the payout should be available in the destination bank account or debit card account.

Payout timeline

Unlike charging a credit card, sending a payout is not synchronous. For bank accounts, payouts will be available in the bank account the next business day if created before 21:00 UTC. If the payout fails (due to a typo in the bank details, for example), it can take up to five business days for Stripe to be notified.

Payouts to debit cards can take 1 to 2 days to complete. However, unlike with bank accounts, we'll know instantaneously if the debit card is not valid when it is added to the recipient.

Here's what the flow looks like:

  • A payout is created via the API. At this point, the payout's status is pending.
  • You receive a payout.paid webhook when the payout is expected to be available in the recipient's bank account or debit card. However, this webhook does not guarantee that the payout was actually successful.
  • If the payout fails, you'll receive a payout.failed webhook within five business days (that's unfortunately how long some banks take to return payouts) and the payout will be marked as failed.
  • You can safely assume the payout was successful if you don't receive a payout.failed webhook within five business days.

Handling payout failures

If a payout fails, it will most likely be because of incorrect bank account or debit card details. You should update the recipient object with the correct details and retry the payout.

Sending payouts to yourself

Once you enable manual payouts, Stripe will no longer send automatic payouts to your bank account (if we did, there would be no funds left for you to pay others out with!). You need to explicitly create a payout if you'd like to pay out funds from your Stripe balance to your bank account.

If you set the recipient of the payout as self, the payout will be sent to the bank account associated with your Stripe account. There are no fees for these payouts.


You can use our test bank account numbers, debit card numbers, and tax IDs to test sending payouts.


Invalid bank account

You'll get an error when creating a recipient if the routing number does not correspond to a valid U.S. bank account. For account numbers, we won't know if the account exists until a successful payout is made.

{ "error": { "message": "We couldn't find that routing number", "type": "invalid_request_error" } }

Insufficient funds

If the funds in your Stripe account aren't enough to cover a payout, the payout will not be created:

{ "error": { "message": "Insufficient funds in Stripe account", "type": "invalid_request_error" } }

Invalid debit card

You'll get an error when creating a recipient if the debit card number isn't a U.S. Mastercard or Visa debit card. The card cannot be prepaid.

{ "error": { "message": "This card doesn't appear to be a non-prepaid Visa or Mastercard debit card.", "type": "invalid_request_error" } }