# Using manual payouts Send manual payouts to your connected accounts. If you set the value of [schedule.interval](https://docs.stripe.com/api/accounts/object.md#account_object-settings-payouts-schedule) to `manual`, we hold funds in the accountholder’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/accounts/{{CONNECTEDACCOUNT_ID}} \ -u "<>:" \ -d "settings[payouts][schedule][interval]"=manual ``` ```cli stripe accounts update {{CONNECTEDACCOUNT_ID}} \ -d "settings[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 Stripe.api_key = '<>' account = Stripe::Account.update( '{{CONNECTEDACCOUNT_ID}}', {settings: {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("<>") account = client.v1.accounts.update( '{{CONNECTEDACCOUNT_ID}}', {settings: {payouts: {schedule: {interval: 'manual'}}}}, ) ``` ```python # Set your secret key. Remember to switch to your live secret key in production. # See your keys here: https://dashboard.stripe.com/apikeys import stripe stripe.api_key = "<>" account = stripe.Account.modify( "{{CONNECTEDACCOUNT_ID}}", settings={"payouts": {"schedule": {"interval": "manual"}}}, ) ``` ```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. account = client.v1.accounts.update( "{{CONNECTEDACCOUNT_ID}}", {"settings": {"payouts": {"schedule": {"interval": "manual"}}}}, ) ``` ```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('<>'); $account = $stripe->accounts->update( '{{CONNECTEDACCOUNT_ID}}', ['settings' => ['payouts' => ['schedule' => ['interval' => 'manual']]]] ); ``` ```java // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys Stripe.apiKey = "<>"; Account resource = Account.retrieve("{{CONNECTEDACCOUNT_ID}}"); AccountUpdateParams params = AccountUpdateParams.builder() .setSettings( AccountUpdateParams.Settings.builder() .setPayouts( AccountUpdateParams.Settings.Payouts.builder() .setSchedule( AccountUpdateParams.Settings.Payouts.Schedule.builder() .setInterval( AccountUpdateParams.Settings.Payouts.Schedule.Interval.MANUAL ) .build() ) .build() ) .build() ) .build(); Account account = resource.update(params); ``` ```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("<>"); AccountUpdateParams params = AccountUpdateParams.builder() .setSettings( AccountUpdateParams.Settings.builder() .setPayouts( AccountUpdateParams.Settings.Payouts.builder() .setSchedule( AccountUpdateParams.Settings.Payouts.Schedule.builder() .setInterval( AccountUpdateParams.Settings.Payouts.Schedule.Interval.MANUAL ) .build() ) .build() ) .build() ) .build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. Account account = client.v1().accounts().update("{{CONNECTEDACCOUNT_ID}}", params); ``` ```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 account = await stripe.accounts.update( '{{CONNECTEDACCOUNT_ID}}', { settings: { payouts: { schedule: { interval: 'manual', }, }, }, } ); ``` ```go // Set your secret key. Remember to switch to your live secret key in production. // See your keys here: https://dashboard.stripe.com/apikeys stripe.Key = "<>" params := &stripe.AccountParams{ Settings: &stripe.AccountSettingsParams{ Payouts: &stripe.AccountSettingsPayoutsParams{ Schedule: &stripe.AccountSettingsPayoutsScheduleParams{ Interval: stripe.String(stripe.AccountSettingsPayoutsScheduleIntervalManual), }, }, }, } result, err := account.Update("{{CONNECTEDACCOUNT_ID}}", params) ``` ```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.AccountUpdateParams{ Settings: &stripe.AccountUpdateSettingsParams{ Payouts: &stripe.AccountUpdateSettingsPayoutsParams{ Schedule: &stripe.AccountUpdateSettingsPayoutsScheduleParams{ Interval: stripe.String(stripe.AccountSettingsPayoutsScheduleIntervalManual), }, }, }, Account: stripe.String("{{CONNECTEDACCOUNT_ID}}"), } result, err := sc.V1Accounts.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 StripeConfiguration.ApiKey = "<>"; var options = new AccountUpdateOptions { Settings = new AccountSettingsOptions { Payouts = new AccountSettingsPayoutsOptions { Schedule = new AccountSettingsPayoutsScheduleOptions { Interval = "manual" }, }, }, }; var service = new AccountService(); Account account = service.Update("{{CONNECTEDACCOUNT_ID}}", options); ``` ```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 AccountUpdateOptions { Settings = new AccountSettingsOptions { Payouts = new AccountSettingsPayoutsOptions { Schedule = new AccountSettingsPayoutsScheduleOptions { Interval = "manual" }, }, }, }; var client = new StripeClient("<>"); var service = client.V1.Accounts; Account account = service.Update("{{CONNECTEDACCOUNT_ID}}", options); ``` 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 Stripe.api_key = '<>' payout = Stripe::Payout.create( { amount: 1000, currency: 'usd', }, {stripe_account: '{{CONNECTEDACCOUNT_ID}}'}, ) ``` ```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 import stripe stripe.api_key = "<>" payout = stripe.Payout.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 Stripe.apiKey = "<>"; PayoutCreateParams params = PayoutCreateParams.builder().setAmount(1000L).setCurrency("usd").build(); RequestOptions requestOptions = RequestOptions.builder().setStripeAccount("{{CONNECTEDACCOUNT_ID}}").build(); Payout payout = Payout.create(params, requestOptions); ``` ```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 stripe.Key = "<>" params := &stripe.PayoutParams{ Amount: stripe.Int64(1000), Currency: stripe.String(stripe.CurrencyUSD), } params.SetStripeAccount("{{CONNECTEDACCOUNT_ID}}") result, err := payout.New(params) ``` ```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 StripeConfiguration.ApiKey = "<>"; var options = new PayoutCreateOptions { Amount = 1000, Currency = "usd" }; var requestOptions = new RequestOptions { StripeAccount = "{{CONNECTEDACCOUNT_ID}}", }; var service = new PayoutService(); Payout payout = service.Create(options, requestOptions); ``` ```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 Stripe.api_key = '<>' payout = Stripe::Payout.create( { amount: 24784, currency: 'usd', source_type: 'bank_account', }, {stripe_account: '{{CONNECTEDACCOUNT_ID}}'}, ) ``` ```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 import stripe stripe.api_key = "<>" payout = stripe.Payout.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 Stripe.apiKey = "<>"; PayoutCreateParams params = PayoutCreateParams.builder() .setAmount(24784L) .setCurrency("usd") .setSourceType(PayoutCreateParams.SourceType.BANK_ACCOUNT) .build(); RequestOptions requestOptions = RequestOptions.builder().setStripeAccount("{{CONNECTEDACCOUNT_ID}}").build(); Payout payout = Payout.create(params, requestOptions); ``` ```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 stripe.Key = "<>" params := &stripe.PayoutParams{ Amount: stripe.Int64(24784), Currency: stripe.String(stripe.CurrencyUSD), SourceType: stripe.String(stripe.PayoutSourceTypeBankAccount), } params.SetStripeAccount("{{CONNECTEDACCOUNT_ID}}") result, err := payout.New(params) ``` ```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 StripeConfiguration.ApiKey = "<>"; var options = new PayoutCreateOptions { Amount = 24784, Currency = "usd", SourceType = "bank_account", }; var requestOptions = new RequestOptions { StripeAccount = "{{CONNECTEDACCOUNT_ID}}", }; var service = new PayoutService(); Payout payout = service.Create(options, requestOptions); ``` ```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.