Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

5282 articles

Multiple financial accounts and external funding


Public preview

Multiple financial accounts and external funding Public preview

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 and Treasury for platforms. One restaurant wants two financial accounts (operations and tips) so that card revenue flows to the operations account, then evenly distributes tips to employees. The restaurant also wants to set up US bank account credentials to add funds to the operational account for a dining room renovation.

The example integration requires the following steps:

  • Create and onboard a connected account for Treasury for platforms.
  • Create two financial accounts (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 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 for the restaurant with the merchant and money_manager configurations and requests the associated capabilities.

Command Line

cURL

Example response

{
 "id": "{{CONNECTED_ACCOUNT_ID}}",
 "object": "v2.core.account",
 "applied_configurations": ["merchant","money_manager"],
 "configuration": {
 "money_manager": {
 "capabilities": {
 "business_storage": {
 "inbound": {
 "usd": {
 "requested": true,
 "status": "restricted"
 }
 },
 "outbound": {
 "usd": {
 "requested": true
 }
 }
 }
 }
 }
 },
 "display_name": "Donut Shop",
 "dashboard": "none",
 "livemode": false
}

Onboard the restaurant

The platform then onboards the connected account by:

  1. Retrieving the requirements generated for the requested capabilities.
  2. Providing a form to collect the information required from your connected account.
  3. Updating the Account with the collected information, specifying the connected account in the Stripe-Context header: {{the related setting}} to identify the connected account as the account to update.

Alternatively, the platform might create an 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 to confirm the capabilities are active for its connected account.

Create the operations financial account

The platform creates a US storage financial account for day-to-day operations, specifying the restaurant’s account ID in the Stripe-Context header to associate the financial account with the restaurant.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

The response includes the operations financial account ID:

Example response

{
 "id": "fa_12345",
 "object": "v2.money_management.financial_account",
 "balance": {
 "available": { "usd": { "value": 0, "currency": "usd" } },
 "inbound_pending": { "usd": { "value": 0, "currency": "usd" } },
 "outbound_pending": { "usd": { "value": 0, "currency": "usd" } }
 },
 "country": "US",
 "created": "2025-06-18T11:05:27.930Z",
 "metadata": { "name": "operations" },
 "status": "pending",
 "status_details": null,
 "storage": { "holds_currencies": ["usd"] },
 "type": "storage",
 "livemode": false
}

Create the tips financial account

The platform creates a second US storage financial account dedicated to tips.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

The response includes the tips financial account ID:

Example response

{
 "id": "fa_67890",
 "object": "v2.money_management.financial_account",
 "balance": {
 "available": { "usd": { "value": 0, "currency": "usd" } },
 "inbound_pending": { "usd": { "value": 0, "currency": "usd" } },
 "outbound_pending": { "usd": { "value": 0, "currency": "usd" } }
 },
 "country": "US",
 "created": "2025-06-18T11:06:10.000Z",
 "metadata": { "name": "tips" },
 "status": "pending",
 "status_details": null,
 "storage": { "holds_currencies": ["usd"] },
 "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 US bank financial address for the operations financial account.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

The response includes the ID of the financial address and the US bank credentials:

Example response

{
 "id": "{{FINANCIAL_ADDRESS_ID}}",
 "object": "v2.money_management.financial_address",
 "credentials": {
 "type": "us_bank_account",
 "us_bank_account": {
 "account_number": "123456890",
 "routing_number": "110000000",
 "bic": "TSTEZ122",
 "bank_name": "STRIPE TEST BANK",
 "last4": "6890"
 }
 },
 "status": "active",
 "financial_account": "fa_12345",
 "created": "2023-03-30T17:32:06.665Z",
 "currency": "usd"
}

The platform simulates receiving funds through the financial address using the Credit a FinancialAddress object test helper in a sandbox instead of funding in live mode using an external bank account.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

The response indicates the outcome.

Example response

{
 "object": "financial_address_credit_simulation",
 "status": "accepted",
 "livemode": false
}

Move funds from operations to tips

The platform creates an outbound transfer to move funds between two financial accounts that both belong to the restaurant.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Example response

{
 "id": "obt_test_65OAfYe4XKyMwZeHlcV16NybHIZ4SQ3LORe4rpuNGDIRZw",
 "object": "v2.money_management.outbound_transfer",
 "from": {
 "financial_account": "fa_12345",
 "debited": { "value": 1000, "currency": "usd" }
 },
 "to": {
 "payout_method": "fa_67890",
 "credited": { "value": 1000, "currency": "usd" }
 },
 "amount": { "value": 1000, "currency": "usd" },
 "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.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Example response

{
 "data": [
 {
 "id": "{% identifier type=\"operationsFinancialAccountId\" /%}",
 "object": "v2.money_management.financial_account",
 "balance": {
 "available": { "usd": { "value": 4000, "currency": "usd" } },
 "inbound_pending": { "usd": { "value": 0, "currency": "usd" } },
 "outbound_pending": { "usd": { "value": 0, "currency": "usd" } }
 },
 "country": "US",
 "status": "open",
 "storage": { "holds_currencies": ["usd"] },
 "type": "storage",
 "livemode": false
 },
 {
 "id": "{% identifier type=\"tipsFinancialAccountId\" /%}",
 "object": "v2.money_management.financial_account",
 "balance": {
 "available": { "usd": { "value": 1000, "currency": "usd" } },
 "inbound_pending": { "usd": { "value": 0, "currency": "usd" } },
 "outbound_pending": { "usd": { "value": 0, "currency": "usd" } }
 },
 "country": "US",
 "status": "open",
 "storage": { "holds_currencies": ["usd"] },
 "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.

Last verified 2026-09-25

Is this helpful?