# Using manual payouts Send manual payouts to your connected accounts. If you set the value of [payments.payouts.schedule.interval](https://docs.stripe.com/api/balance-settings/update.md#update_balance_settings-payments-payouts-schedule-interval) to `manual`, we hold funds in the account holder’s balance until you specify otherwise. You must pay out the funds within the time period specified below, based on the business’s country: | Country | Holding Period | | ------------------- | -------------- | | Thailand | 10 days | | United States | 2 years | | All other countries | 90 days | ```curl curl https://api.stripe.com/v1/balance_settings \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "payments[payouts][schedule][interval]"=manual ``` ```cli stripe balance_settingss update \ --stripe-account {{CONNECTEDACCOUNT_ID}} \ -d "payments[payouts][schedule][interval]"=manual ``` ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("<>") balance_settings = client.v1.balance_settings.update( {payments: {payouts: {schedule: {interval: 'manual'}}}}, {stripe_account: '{{CONNECTEDACCOUNT_ID}}'}, ) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("<>") # For SDK versions 12.4.0 or lower, remove '.v1' from the following line. balance_settings = client.v1.balance_settings.update( {"payments": {"payouts": {"schedule": {"interval": "manual"}}}}, {"stripe_account": "{{CONNECTEDACCOUNT_ID}}"}, ) ``` ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('<>'); $balanceSettings = $stripe->balanceSettings->update( ['payments' => ['payouts' => ['schedule' => ['interval' => 'manual']]]], ['stripe_account' => '{{CONNECTEDACCOUNT_ID}}'] ); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("<>"); BalanceSettingsUpdateParams params = BalanceSettingsUpdateParams.builder() .setPayments( BalanceSettingsUpdateParams.Payments.builder() .setPayouts( BalanceSettingsUpdateParams.Payments.Payouts.builder() .setSchedule( BalanceSettingsUpdateParams.Payments.Payouts.Schedule.builder() .setInterval( BalanceSettingsUpdateParams.Payments.Payouts.Schedule.Interval.MANUAL ) .build() ) .build() ) .build() ) .build(); RequestOptions requestOptions = RequestOptions.builder().setStripeAccount("{{CONNECTEDACCOUNT_ID}}").build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. BalanceSettings balanceSettings = client.v1().balanceSettings().update(params, requestOptions); ``` ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('<>'); const balanceSettings = await stripe.balanceSettings.update( { payments: { payouts: { schedule: { interval: 'manual', }, }, }, }, { stripeAccount: '{{CONNECTEDACCOUNT_ID}}', } ); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("<>") params := &stripe.BalanceSettingsUpdateParams{ Payments: &stripe.BalanceSettingsUpdatePaymentsParams{ Payouts: &stripe.BalanceSettingsUpdatePaymentsPayoutsParams{ Schedule: &stripe.BalanceSettingsUpdatePaymentsPayoutsScheduleParams{ Interval: stripe.String(stripe.BalanceSettingsPaymentsPayoutsScheduleIntervalManual), }, }, }, } params.SetStripeAccount("{{CONNECTEDACCOUNT_ID}}") result, err := sc.V1BalanceSettings.Update(context.TODO(), params) ``` ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new BalanceSettingsUpdateOptions { Payments = new BalanceSettingsPaymentsOptions { Payouts = new BalanceSettingsPaymentsPayoutsOptions { Schedule = new BalanceSettingsPaymentsPayoutsScheduleOptions { Interval = "manual", }, }, }, }; var requestOptions = new RequestOptions { StripeAccount = "{{CONNECTEDACCOUNT_ID}}", }; var client = new StripeClient("<>"); var service = client.V1.BalanceSettings; BalanceSettings balanceSettings = service.Update(options, requestOptions); ``` > Use the [Balance Settings](https://docs.stripe.com/api/balance-settings.md) API to manage payout settings for both Accounts v1 and Accounts v2. The Balance Settings object follows a similar structure and behavior to the [settings.payouts](https://docs.stripe.com/api/accounts/object.md?api-version=preview#account_object-settings-payouts) hash in Accounts v1. If your Account v1 is currently using `settings.payouts`, you don’t need to migrate. To trigger a payout of these funds, use the [Payouts API](https://docs.stripe.com/api/payouts/create.md). The Payouts API is only for moving funds from a connected Stripe account’s balance into their external account. To move funds between the platform and a connected account, use [separate charges and transfers](https://docs.stripe.com/connect/separate-charges-and-transfers.md) or [destination charges](https://docs.stripe.com/connect/destination-charges.md). > *Escrow* has a precise legal definition, and Stripe doesn’t provide escrow services or support escrow accounts. However, you can control payout timing through manual payouts, which allow you to delay payouts to certain accounts. When using manual payouts, you must pay out funds within the time frame for the business’s country. > > Delayed payouts can be useful when a delivery is delayed or when there’s a possibility of a refund. ## Regular payouts The following example sends 10 USD from a connected account’s Stripe balance to their external account: ```curl curl https://api.stripe.com/v1/payouts \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d amount=1000 \ -d currency=usd ``` ```cli stripe payouts create \ --stripe-account {{CONNECTEDACCOUNT_ID}} \ --amount=1000 \ --currency=usd ``` ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("<>") payout = client.v1.payouts.create( { amount: 1000, currency: 'usd', }, {stripe_account: '{{CONNECTEDACCOUNT_ID}}'}, ) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("<>") # For SDK versions 12.4.0 or lower, remove '.v1' from the following line. payout = client.v1.payouts.create( {"amount": 1000, "currency": "usd"}, {"stripe_account": "{{CONNECTEDACCOUNT_ID}}"}, ) ``` ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('<>'); $payout = $stripe->payouts->create( [ 'amount' => 1000, 'currency' => 'usd', ], ['stripe_account' => '{{CONNECTEDACCOUNT_ID}}'] ); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("<>"); PayoutCreateParams params = PayoutCreateParams.builder().setAmount(1000L).setCurrency("usd").build(); RequestOptions requestOptions = RequestOptions.builder().setStripeAccount("{{CONNECTEDACCOUNT_ID}}").build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. Payout payout = client.v1().payouts().create(params, requestOptions); ``` ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('<>'); const payout = await stripe.payouts.create( { amount: 1000, currency: 'usd', }, { stripeAccount: '{{CONNECTEDACCOUNT_ID}}', } ); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("<>") params := &stripe.PayoutCreateParams{ Amount: stripe.Int64(1000), Currency: stripe.String(stripe.CurrencyUSD), } params.SetStripeAccount("{{CONNECTEDACCOUNT_ID}}") result, err := sc.V1Payouts.Create(context.TODO(), params) ``` ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new PayoutCreateOptions { Amount = 1000, Currency = "usd" }; var requestOptions = new RequestOptions { StripeAccount = "{{CONNECTEDACCOUNT_ID}}", }; var client = new StripeClient("<>"); var service = client.V1.Payouts; Payout payout = service.Create(options, requestOptions); ``` With a standard payout, you can move an amount up to the user’s available balance. To find that amount, perform a [retrieve balance](https://docs.stripe.com/api.md#retrieve_balance) call on their behalf. Stripe tracks balance contributions from different payment sources in separate balances. The retrieve balance response breaks down the components of each balance by source type. For example, to create a payout specifically for a non-credit-card balance, specify the `source_type` in your request. ```curl curl https://api.stripe.com/v1/payouts \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d amount=24784 \ -d currency=usd \ -d source_type=bank_account ``` ```cli stripe payouts create \ --stripe-account {{CONNECTEDACCOUNT_ID}} \ --amount=24784 \ --currency=usd \ --source-type=bank_account ``` ```ruby # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = Stripe::StripeClient.new("<>") payout = client.v1.payouts.create( { amount: 24784, currency: 'usd', source_type: 'bank_account', }, {stripe_account: '{{CONNECTEDACCOUNT_ID}}'}, ) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys client = StripeClient("<>") # For SDK versions 12.4.0 or lower, remove '.v1' from the following line. payout = client.v1.payouts.create( {"amount": 24784, "currency": "usd", "source_type": "bank_account"}, {"stripe_account": "{{CONNECTEDACCOUNT_ID}}"}, ) ``` ```php // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys $stripe = new \Stripe\StripeClient('<>'); $payout = $stripe->payouts->create( [ 'amount' => 24784, 'currency' => 'usd', 'source_type' => 'bank_account', ], ['stripe_account' => '{{CONNECTEDACCOUNT_ID}}'] ); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys StripeClient client = new StripeClient("<>"); PayoutCreateParams params = PayoutCreateParams.builder() .setAmount(24784L) .setCurrency("usd") .setSourceType(PayoutCreateParams.SourceType.BANK_ACCOUNT) .build(); RequestOptions requestOptions = RequestOptions.builder().setStripeAccount("{{CONNECTEDACCOUNT_ID}}").build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. Payout payout = client.v1().payouts().create(params, requestOptions); ``` ```node // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys const stripe = require('stripe')('<>'); const payout = await stripe.payouts.create( { amount: 24784, currency: 'usd', source_type: 'bank_account', }, { stripeAccount: '{{CONNECTEDACCOUNT_ID}}', } ); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys sc := stripe.NewClient("<>") params := &stripe.PayoutCreateParams{ Amount: stripe.Int64(24784), Currency: stripe.String(stripe.CurrencyUSD), SourceType: stripe.String(stripe.PayoutSourceTypeBankAccount), } params.SetStripeAccount("{{CONNECTEDACCOUNT_ID}}") result, err := sc.V1Payouts.Create(context.TODO(), params) ``` ```dotnet // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys var options = new PayoutCreateOptions { Amount = 24784, Currency = "usd", SourceType = "bank_account", }; var requestOptions = new RequestOptions { StripeAccount = "{{CONNECTEDACCOUNT_ID}}", }; var client = new StripeClient("<>"); var service = client.V1.Payouts; Payout payout = service.Create(options, requestOptions); ``` While individual balance components can go negative (such as through refunds or chargebacks), you can’t create payouts for greater than the aggregate available balance.