# Multiple financial accounts and external funding Learn how to create two financial accounts and move funds between them. This example use case shows an integration using a SaaS platform that provides financial services to restaurants using *Connect* (Connect is Stripe's solution for multi-party businesses, such as marketplace or software platforms, to route payments between sellers, customers, and other recipients) and [Treasury for platforms](https://docs.stripe.com/treasury/connect/v2.md). One of its UK restaurants wants two financial accounts (Operations and Tips) so card revenues can flow to operations while evenly paying tips out to employees. The restaurant also wants a GBP bank account number and sort code to add money for a dining room renovation. The example integration requires the following steps: - Create and onboard a [connected account](https://docs.stripe.com/treasury/connect/v2/account-management/connected-accounts.md) for Treasury for platforms. - Create two [financial accounts](https://docs.stripe.com/treasury/connect/v2/account-management/financial-accounts.md) (Operations and Tips). - Create a financial address so the restaurant can bank-transfer funds into a financial account. - Move funds between the two financial accounts. > #### Develop in a sandbox > > Begin in a [sandbox](https://docs.stripe.com/sandboxes.md) with access to Treasury for platforms and use that sandbox’s test API keys for all requests. ## Create the connected account The platform [creates the connected account](https://docs.stripe.com/api/v2/core/accounts/create.md) for the restaurant with the `merchant` and `money_manager` configurations and requests the associated capabilities. ```curl curl -X POST https://api.stripe.com/v2/core/accounts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-06-10.preview" \ --json '{ "include": [ "configuration.money_manager" ], "contact_email": "restaurant@example.com", "display_name": "Donut Shop", "identity": { "country": "gb", "entity_type": "company" }, "configuration": { "merchant": { "mcc": "5814", "support": { "phone": "0000000000" }, "capabilities": { "card_payments": { "requested": true } } }, "money_manager": { "capabilities": { "received_credits": { "bank_accounts": { "requested": true } }, "business_storage": { "inbound": { "gbp": { "requested": true } }, "outbound": { "gbp": { "requested": true } } }, "outbound_transfers": { "bank_accounts": { "requested": true } }, "outbound_payments": { "bank_accounts": { "requested": true } } } } }, "dashboard": "none", "defaults": { "currency": "gbp", "responsibilities": { "fees_collector": "application", "losses_collector": "application" } } }' ``` ```json { "id": "{{CONNECTED_ACCOUNT_ID}}", "object": "v2.core.account", "applied_configurations": ["merchant","money_manager"], "configuration": { "money_manager": { "capabilities": { "business_storage": { "inbound": { "gbp": { "requested": true, "status": "restricted" } }, "outbound": { "gbp": { "requested": true, "status": "restricted" } } } } } }, "display_name": "Donut Shop", "dashboard": "none", "livemode": false } ``` ## Onboard the restaurant The platform then [onboards the connected account](https://docs.stripe.com/connect/api-onboarding.md) by: 1. Retrieving the requirements generated for the requested capabilities. 1. Providing a form to collect the information required from your connected account. 1. Updating the `Account` with the collected information, specifying the connected account in the `Stripe-Context` header: `{{CONNECTED_ACCOUNT_ID}}` to identify the connected account as the account to update. Alternatively, the platform might create an [account link](https://docs.stripe.com/connect/hosted-onboarding.md?accounts-namespace=v2&lang=curl#create-account-link) specifying the `type` as the `merchant` and `money_manager` configurations, then send the returned URL to the connected account before it expires so they can provide the required information in a Stripe-hosted interface. The platform listens for the `v2.core.account[configuration.money_manager].capability_status_updated` [webhook](https://docs.stripe.com/webhooks.md) to confirm the capabilities are active for its connected account. ## Create the Operations financial account The platform creates a [GBP storage financial account](https://docs.stripe.com/api/v2/money-management/financial-accounts/create.md?api-version=preview) for day-to-day operations, specifying the restaurant’s account ID in the `Stripe-Context` header to associate the financial account with the restaurant. ```curl curl -X POST https://api.stripe.com/v2/money_management/financial_accounts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-02-25.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" \ --json '{ "type": "storage", "storage": { "holds_currencies": [ "gbp" ] }, "metadata": { "name": "operations" } }' ``` The response includes the Operations financial account ID: ```json { "id": "fa_12345", "object": "v2.money_management.financial_account", "balance": { "available": { "gbp": { "value": 0, "currency": "gbp" } }, "inbound_pending": { "gbp": { "value": 0, "currency": "gbp" } }, "outbound_pending": { "gbp": { "value": 0, "currency": "gbp" } } }, "country": "GB", "created": "2025-06-18T11:05:27.930Z", "metadata": { "name": "operations" }, "status": "pending", "status_details": null, "storage": { "holds_currencies": ["gbp"] }, "type": "storage", "livemode": false } ``` ## Create the Tips financial account The platform creates a second GBP storage financial account dedicated to tips. ```curl curl -X POST https://api.stripe.com/v2/money_management/financial_accounts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-02-25.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" \ --json '{ "type": "storage", "storage": { "holds_currencies": [ "gbp" ] }, "metadata": { "name": "tips" } }' ``` The response includes the Tips financial account ID: ```json { "id": "fa_67890", "object": "v2.money_management.financial_account", "balance": { "available": { "gbp": { "value": 0, "currency": "gbp" } }, "inbound_pending": { "gbp": { "value": 0, "currency": "gbp" } }, "outbound_pending": { "gbp": { "value": 0, "currency": "gbp" } } }, "country": "GB", "created": "2025-06-18T11:06:10.000Z", "metadata": { "name": "tips" }, "status": "pending", "status_details": null, "storage": { "holds_currencies": ["gbp"] }, "type": "storage", "livemode": false } ``` ## Create a financial address for the Operations account To allow the restaurant to add funds through bank transfers, the platform [creates a GBP financial address](https://docs.stripe.com/api/v2/money-management/financial-addresses/create.md?api-version=preview) for the Operations financial account. ```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": "{{OPERATIONSFINANCIALACCOUNTID_ID}}", "type": "gb_bank_account" }' ``` The response includes the ID of the financial address: ```json { "id": "{{FINANCIAL_ADDRESS_ID}}", "object": "v2.money_management.financial_address", "created": "2025-06-19T19:17:54.607Z", "credentials": null, "currency": "gbp", "financial_account": "fa_12345", "settlement_currency": "gbp", "status": "pending", "livemode": false } ``` The platform simulates receiving funds through the financial address using the [Credit a FinancialAddress object test helper](https://docs.stripe.com/api/v2/money-management/financial-addresses/credit.md?api-version=preview) in a sandbox instead of [funding in live mode](https://docs.stripe.com/treasury/connect/v2/moving-money/fund-a-financial-account.md#external-account) using an external bank account. ```curl curl -X POST https://api.stripe.com/v2/test_helpers/financial_addresses/{{FINANCIAL_ADDRESS_ID}}/credit \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-02-25.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" \ --json '{ "amount": { "value": 5000, "currency": "gbp" }, "network": "fps" }' ``` The response indicates the outcome. ```json { "object": "financial_address_credit_simulation", "status": "accepted", "livemode": false } ``` ## Move funds from Operations to Tips The platform [creates an outbound transfer](https://docs.stripe.com/api/v2/money-management/outbound-transfers/create.md?api-version=preview) to move funds between two financial accounts that both belong to the restaurant. ```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": "{{OPERATIONSFINANCIALACCOUNTID_ID}}", "currency": "gbp" }, "to": { "payout_method": "{{TIPSFINANCIALACCOUNTID_ID}}", "currency": "gbp" }, "amount": { "value": 1000, "currency": "gbp" }, "description": "Move tips to Tips FA" }' ``` ```json { "id": "obt_test_65OAfYe4XKyMwZeHlcV16NybHIZ4SQ3LORe4rpuNGDIRZw", "object": "v2.money_management.outbound_transfer", "from": { "financial_account": "fa_12345", "debited": { "value": 1000, "currency": "gbp" } }, "to": { "payout_method": "fa_67890", "credited": { "value": 1000, "currency": "gbp" } }, "amount": { "value": 1000, "currency": "gbp" }, "cancelable": true, "description": "Move tips to Tips FA", "status": "processing", "status_transitions": { "canceled_at": null, "failed_at": null, "posted_at": null, "returned_at": null }, "created": "2025-06-19T17:52:34.829Z", "expected_arrival_date": "2025-06-19T17:52:34.803Z", "receipt_url": "https://payments.stripe.com/transaction_receipt/…", "livemode": false } ``` To verify balances after the transfer, the platform [lists the connected account’s financial accounts](https://docs.stripe.com/api/v2/money-management/financial-accounts/list.md?api-version=preview). ```curl curl https://api.stripe.com/v2/money_management/financial_accounts \ -H "Authorization: Bearer <>" \ -H "Stripe-Version: 2026-02-25.preview" \ -H "Stripe-Context: {{CONTEXT_ID}}" ``` ```json { "data": [ { "id": "{% identifier type=\"operationsFinancialAccountId\" /%}", "object": "v2.money_management.financial_account", "balance": { "available": { "gbp": { "value": 4000, "currency": "gbp" } }, "inbound_pending": { "gbp": { "value": 0, "currency": "gbp" } }, "outbound_pending": { "gbp": { "value": 0, "currency": "gbp" } } }, "country": "GB", "status": "open", "storage": { "holds_currencies": ["gbp"] }, "type": "storage", "livemode": false }, { "id": "{% identifier type=\"tipsFinancialAccountId\" /%}", "object": "v2.money_management.financial_account", "balance": { "available": { "gbp": { "value": 1000, "currency": "gbp" } }, "inbound_pending": { "gbp": { "value": 0, "currency": "gbp" } }, "outbound_pending": { "gbp": { "value": 0, "currency": "gbp" } } }, "country": "GB", "status": "open", "storage": { "holds_currencies": ["gbp"] }, "type": "storage", "livemode": false } ], "next_page_url": null, "previous_page_url": null } ``` With two financial accounts in place and a way to move funds between them, the platform can route revenue from card payments to the Operations account and use the Tips account to fund periodic employee payouts.