# Transfer money between owned accounts Learn how to transfer money from financial accounts to other accounts owned by the same business. An [OutboundTransfer](https://docs.stripe.com/api/v2/money-management/outbound-transfers/object.md?api-version=preview) object facilitates money movement between financial accounts owned by the same entity (either the same connected account or the same platform). Use outbound transfers to send funds from a financial account to an external bank account or to move money between multiple financial accounts owned by the same entity. > To move funds between financial accounts that different entities own (for example, from your platform financial account to a connected account’s financial account, or between two different connected accounts), use [OutboundPayment](https://docs.stripe.com/treasury/connect/v2/moving-money/out-of/outbound-payments.md) instead. ## Move money from one financial account to another financial account Using an outbound transfer, you can move money between two financial accounts owned by the same connected account. For two financial accounts owned by the platform, exclude the `Stripe-Context` header specifying the connected account ID. ```curl curl -X POST https://api.stripe.com/v2/money_management/outbound_transfers \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-02-25.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" \ --json '{ "from": { "financial_account": "{{FINANCIALACCOUNTID_ID}}", "currency": "gbp" }, "to": { "payout_method": "{{SECOND_FINANCIAL_ACCOUNT_ID}}", "currency": "gbp" }, "amount": { "value": 1, "currency": "gbp" }, "description": "Payout to own bank account" }' ``` ## Move money from financial account to a bank account To create an outbound transfer to a bank account your connected account owns, first create a [FinancialAddress](https://docs.stripe.com/api/v2/money-management/financial-addresses/object.md?api-version=preview) for the financial account: Create a [Financial Address](https://docs.stripe.com/api/v2/money-management/financial-addresses.md?api-version=preview) to assign bank details to your financial account you can share with customers or partners so they can send funds directly to the financial account. Specify the `type` corresponding to the country of the financial account to make sure we provision the correct [address credentials](https://docs.stripe.com/api/v2/money-management/financial-addresses/object.md?api-version=preview#v2_financial_address_object-credentials) (such as a US routing number or a British sort code). After you create a financial address, it starts in a `pending` status while Stripe provisions the bank details. When the status becomes `active`, you can retrieve the credentials (bank details) and share them to receive funds. You can monitor incoming funds using [received credits](https://docs.stripe.com/treasury/connect/v2/moving-money/fund-a-financial-account.md#monitor-received-credits). ```curl curl -X POST https://api.stripe.com/v2/money_management/financial_addresses \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-02-25.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" \ --json '{ "financial_account": "{{FINANCIALACCOUNTID_ID}}", "type": "gb_bank_account" }' ``` If successful, the response provides the ID for the financial address you’re creating: ```json {"id": "{{FINANCIAL_ADDRESS_ID}}", "object": "v2.money_management.financial_address", "created": "2025-06-19T19:17:54.607Z", "credentials": null, "currency": "gbp", "financial_account": "{{FINANCIAL_ACCOUNT_ID}}", "settlement_currency": "gbp", "status": "pending", "livemode": false } ``` Outbound transfers require a financial address. Add a payout method to the account that will receive the funds: #### GB bank account Create a GB bank account and initiate Confirmation of Payee (CoP) using the [GB Bank Accounts API](https://docs.stripe.com/api/v2/core/vault/gb-bank-accounts.md?api-version=preview). ```curl curl -X POST https://api.stripe.com/v2/core/vault/gb_bank_accounts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-05-27.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" \ --json '{ "sort_code": "108800", "account_number": "00012345", "currency": "gbp", "confirmation_of_payee": { "initiate": true } }' ``` ```json { "id": "{{PAYOUT_METHOD_ID}}", "object": "v2.core.vault.gb_bank_account", "bank_name": "Test Bank", "last4": "2345", "confirmation_of_payee": { "status": "awaiting_acknowledgement" } } ``` Check CoP status and acknowledge if needed. ```curl curl https://api.stripe.com/v2/core/vault/gb_bank_accounts/{{PAYOUT_METHOD_ID}} \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-05-27.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" ``` ```curl curl -X POST https://api.stripe.com/v2/core/vault/gb_bank_accounts/{{PAYOUT_METHOD_ID}}/acknowledge_confirmation_of_payee \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-05-27.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" ``` #### US bank account Create a US bank account for ACH using the [US Bank Accounts API](https://docs.stripe.com/api/v2/core/vault/us-bank-accounts.md?api-version=preview). ```curl curl -X POST https://api.stripe.com/v2/core/vault/us_bank_accounts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-05-27.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" \ --json '{ "routing_number": "110000000", "account_number": "000123456789", "bank_account_type": "checking", "currency": "usd" }' ``` ```json { "id": "{{PAYOUT_METHOD_ID}}", "object": "v2.core.vault.us_bank_account", "bank_name": "Test Bank", "last4": "6789", "routing_number": "110000000" } ``` Optionally, you can add a Fedwire routing number if you want to support wires. ```curl curl -X POST https://api.stripe.com/v2/core/vault/us_bank_accounts/{{BANKACCOUNT_ID}} \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-05-27.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" \ --json '{ "fedwire_routing_number": "110000000" }' ``` #### OSI (50+ countries) Create a payout method globally with the [OutboundSetupIntents API](https://docs.stripe.com/api/v2/money-management/outbound-setup-intents.md?api-version=preview). In this sample, the response shows required next steps to obtain payee confirmation and that the status requires action, because the country of the bank account requires it. ```curl curl -X POST https://api.stripe.com/v2/money_management/outbound_setup_intents \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-05-27.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" \ --json '{ "payout_method_data": { "type": "bank_account", "bank_account": { "country": "GB", "routing_number": "108800", "account_number": "00012345", "currency": "gbp" } }, "usage_intent": "payment" }' ``` ```json { "id": "osi_test_61Uo1MjgIZUEjAHYm16Uo0zj0KE9m04eAZihENE5YR8i", "object": "v2.money_management.outbound_setup_intent", "created": "2026-06-04T15:42:13.000Z","next_action": { "confirmation_of_payee": { "object": "core.vault.gb_bank_account", "status": "uninitiated" }, "type": "confirmation_of_payee" }, "payout_method": { "id": "gbba_test_61Uo1MizBMc75kr8s16Uo0zj0KE9m04eAZihENE5YJA8", "object": "v2.money_management.payout_method", "available_payout_speeds": [ "standard" ], "bank_account": { ... }, "created": "2026-06-04T15:42:12.945Z", "latest_outbound_setup_intent": "osi_test_61Uo1MjgIZUEjAHYm16Uo0zj0KE9m04eAZihENE5YR8i", "type": "bank_account", "usage_status": { "payments": "requires_action", "transfers": "eligible" }, "livemode": false },"status": "requires_action", "usage_intent": "payment", "livemode": false } ``` Make the outbound transfer from the financial account according to the region and currency. #### General At this point, you have all the necessary pieces to transfer funds from the connected account’s financial account using the [Create an OutboundTransfer](https://docs.stripe.com/api/v2/money-management/outbound-transfers/create.md?api-version=preview) endpoint. ```curl curl -X POST https://api.stripe.com/v2/money_management/outbound_transfers \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-02-25.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" \ --json '{ "from": { "financial_account": "{{FINANCIALACCOUNTID_ID}}", "currency": "gbp" }, "to": { "payout_method": "{{PAYOUT_METHOD_ID}}", "currency": "gbp" }, "amount": { "value": 1, "currency": "gbp" }, "description": "Payout from a platform financial account to own bank account" }' ``` ## Webhooks Stripe emits the following `OutboundTransfer` [events](https://docs.stripe.com/api/v2/money-management/outbound-transfers/event-types.md?api-version=preview) to your [webhook](https://docs.stripe.com/webhooks.md) endpoint: - `v2.money_management.outbound_transfer.created` - `v2.money_management.outbound_transfer.posted` - `v2.money_management.outbound_transfer.returned` - `v2.money_management.outbound_transfer.updated` - `v2.money_management.outbound_transfer.failed` - `v2.money_management.outbound_transfer.canceled` ## See also - [Working with financial accounts](https://docs.stripe.com/treasury/connect/v2/account-management/financial-accounts.md) - [Move money with financial accounts](https://docs.stripe.com/treasury/connect/v2/moving-money/moving-money-with-financial-accounts.md)