# Platform financial accounts Learn about the financial account for your platform. After you’ve [gained API access](https://docs.stripe.com/treasury/access.md) to Stripe *Treasury* (A collection of API endpoints and cloud- and web-based features that enable platforms to offer embedded financial solutions to their users), we automatically provision your platform with a financial account. For *sandbox* (A sandbox is an isolated test environment that allows you to test Stripe functionality in your account without affecting your live integration. Use sandboxes to safely experiment with new features and changes) environments, it’s a test platform financial account. The test platform financial account on your sandbox environment enables you to set up and test your integration without actually affecting your live account’s platform financial account. The live mode platform financial account is where you store your own funds as working capital for your Treasury program. The live mode platform financial account has its own routing number and account number and supports most of the same types of money movement as the financial accounts attached to your platform’s connected accounts. ## Platform financial account differences The financial accounts (both live and test) for your platform are essentially the same as the financial accounts attached to your platform’s connected accounts. You use the same API requests regardless of which financial account is involved; however, you don’t include a [Stripe-Account header](https://docs.stripe.com/connect/authentication.md#stripe-account-header) when making API calls against your platform financial account. The `Stripe-Account` header signals that a request is for the associated connected account’s financial account rather than your platform’s. The following list itemizes the differences between platform financial accounts and financial accounts attached to connected accounts: - You can’t attach Stripe Issuing cards to platform financial accounts. - You can attach Stripe Issuing cards to the financial accounts attached to connected accounts. - You can’t transfer funds from your platform financial account balance directly to the account balance of a connected account. - You can transfer funds from your platform financial account balance directly to the balance of a financial account attached to a connected account. - You must use the Stripe Dashboard (rather than the API) to set the platform financial account as a `BankAccount` object that you can use for payouts from or top-ups to the platform payments balance. - See the [Payouts and top-ups](https://docs.stripe.com/treasury/moving-money/payouts.md#financial-accounts-as-external-accounts) guide for more information. - You can’t accelerate payouts from the platform account balance to the platform financial account balance. ## Retrieving platform financial account details You can retrieve the details of your platform financial accounts through the API and the Stripe Dashboard. #### Dashboard View your platform financial accounts, along with their routing numbers, account numbers, and balances, in the **Treasury** section under the **Balances** tab of your Stripe [Dashboard](https://dashboard.stripe.com/test/treasury/balances). ![Treasury balance section of the Dashboard showing account number, routing number, and total amount of balance.](https://b.stripecdn.com/docs-statics-srv/assets/treasury-balance.0e2dc871edffb717e362db845d314edb.png) Treasury balance Click a platform financial account to open an expanded view, where you can see more detailed information, including: - Financial account features - Balance history - Recent transactions - Events and logs ![Expanded view of the platform financial account](https://b.stripecdn.com/docs-statics-srv/assets/treasury-balance-details-page.fd235bae0d10f594b41df72c46197b9c.png) Expanded platform financial account details #### API Use `GET /v1/treasury/financial_accounts` to list all the details of your platform financial accounts through the API. A `Stripe-Account` header isn’t included, signaling this request is for the platform financial account. ```curl curl https://api.stripe.com/v1/treasury/financial_accounts \ -u "<>:" ``` ```cli stripe treasury financial_accounts list ``` ```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 = '<>' financial_accounts = Stripe::Treasury::FinancialAccount.list() ``` ```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("<>") financial_accounts = client.v1.treasury.financial_accounts.list() ``` ```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 = "<>" financial_accounts = stripe.treasury.FinancialAccount.list() ``` ```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. financial_accounts = client.v1.treasury.financial_accounts.list() ``` ```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('<>'); $financialAccounts = $stripe->treasury->financialAccounts->all([]); ``` ```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 = "<>"; FinancialAccountListParams params = FinancialAccountListParams.builder().build(); FinancialAccountCollection financialAccounts = FinancialAccount.list(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("<>"); FinancialAccountListParams params = FinancialAccountListParams.builder().build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. StripeCollection stripeCollection = client.v1().treasury().financialAccounts().list(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 financialAccounts = await stripe.treasury.financialAccounts.list(); ``` ```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.TreasuryFinancialAccountListParams{} result := financialaccount.List(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.TreasuryFinancialAccountListParams{} result := sc.V1TreasuryFinancialAccounts.List(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 service = new Stripe.Treasury.FinancialAccountService(); StripeList financialAccounts = service.List(); ``` ```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 client = new StripeClient("<>"); var service = client.V1.Treasury.FinancialAccounts; StripeList financialAccounts = service.List(); ``` If successful, the response includes your platform financial account `id`. You can use the financial account ID to directly retrieve your platform financial account details using `GET /v1/treasury/financial_accounts/{{FINANCIALACCOUNT_ID}}`. ```curl curl https://api.stripe.com/v1/treasury/financial_accounts/{{TREASURYFINANCIALACCOUNT_ID}} \ -u "<>:" ``` ```cli stripe treasury financial_accounts retrieve {{TREASURYFINANCIALACCOUNT_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 Stripe.api_key = '<>' financial_account = Stripe::Treasury::FinancialAccount.retrieve('{{TREASURYFINANCIALACCOUNT_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("<>") financial_account = client.v1.treasury.financial_accounts.retrieve('{{TREASURYFINANCIALACCOUNT_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 = "<>" financial_account = stripe.treasury.FinancialAccount.retrieve( "{{TREASURYFINANCIALACCOUNT_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. financial_account = client.v1.treasury.financial_accounts.retrieve( "{{TREASURYFINANCIALACCOUNT_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('<>'); $financialAccount = $stripe->treasury->financialAccounts->retrieve( '{{TREASURYFINANCIALACCOUNT_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 = "<>"; FinancialAccount financialAccount = FinancialAccount.retrieve("{{TREASURYFINANCIALACCOUNT_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("<>"); FinancialAccountRetrieveParams params = FinancialAccountRetrieveParams.builder().build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. FinancialAccount financialAccount = client.v1().treasury().financialAccounts().retrieve( "{{TREASURYFINANCIALACCOUNT_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 financialAccount = await stripe.treasury.financialAccounts.retrieve( '{{TREASURYFINANCIALACCOUNT_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.TreasuryFinancialAccountParams{} result, err := financialaccount.Get("{{TREASURYFINANCIALACCOUNT_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.TreasuryFinancialAccountRetrieveParams{ FinancialAccount: stripe.String("{{TREASURYFINANCIALACCOUNT_ID}}"), } result, err := sc.V1TreasuryFinancialAccounts.Retrieve(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 service = new Stripe.Treasury.FinancialAccountService(); Stripe.Treasury.FinancialAccount financialAccount = service.Get( "{{TREASURYFINANCIALACCOUNT_ID}}"); ``` ```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 client = new StripeClient("<>"); var service = client.V1.Treasury.FinancialAccounts; Stripe.Treasury.FinancialAccount financialAccount = service.Get( "{{TREASURYFINANCIALACCOUNT_ID}}"); ``` The `FinancialAccount` object displays the data that defines your financial account, including your balance and the balance of any pending transactions. #### JSON (commented) ```json { "object": "treasury.financial_account", "created": 1612927106, "id": "fa_123", "country": "US", "supported_currencies": ["usd"], // Arrays of active, pending and restricted features summarize the status of all requested features "active_features": ["financial_addresses.aba", "deposit_insurance"], "pending_features": ["inbound_transfers.ach"], "restricted_features": ["intra_stripe_flows", "outbound_payments.ach", "outbound_payments.us_domestic_wire"], "balance": { "cash": {"usd": 9000}, "inbound_pending": {"usd": 0}, "outbound_pending": {"usd": 1000} }, // The FinancialAccount gains a FinancialAddress once the `financial_addresses.aba` feature is active. For more information, see "Activating features" "financial_addresses": [ { "type": "aba", "supported_networks": ["ach", "domestic_wire_us"], "aba": { "account_number_last4": "7890", // Use the expand[] parameter to view the `account_number` field hidden by default "account_number": "1234567890", "routing_number": "000000001", "bank_name": "Goldman Sachs" } } ], "livemode": true, // Financial accounts begin in the "open" state, but can be closed // `status_details.closed` is populated once a financial account is closed "status": "open", "status_details": { // `closed` is null if financial account is not closed "closed": { // List of one or more reasons why the FinancialAccount was closed: // - account_rejected // - closed_by_platform // - other "reasons": [] } }, // User-defined metadata "metadata": {}, } ``` #### JSON ```json { "object": "treasury.financial_account", "created": 1612927106, "id": "fa_123", "country": "US", "supported_currencies": ["usd"], "active_features": ["financial_addresses.aba", "deposit_insurance"], "pending_features": ["inbound_transfers.ach"], "restricted_features": ["intra_stripe_flows", "outbound_payments.ach", "outbound_payments.us_domestic_wire"], "balance": { "cash": {"usd": 9000}, "inbound_pending": {"usd": 0}, "outbound_pending": {"usd": 1000} }, "financial_addresses": [ { "type": "aba", "supported_networks": ["ach", "domestic_wire_us"], "aba": { "account_number_last4": "7890", "account_number": "1234567890", "routing_number": "000000001", "bank_name": "Goldman Sachs" } } ], "livemode": true, "status": "open", "status_details": { "closed": null }, "metadata": {}, } ``` ### Retrieve platform financial account features Use `GET /v1/treasury/financial_accounts/{{FINANCIALACCOUNT_ID}}/features` to retrieve your platform’s financial account feature information. ```curl curl https://api.stripe.com/v1/treasury/financial_accounts/{{TREASURYFINANCIALACCOUNT_ID}}/features \ -u "<>:" ``` ```cli stripe treasury financial_accounts retrieve_features {{TREASURYFINANCIALACCOUNT_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 Stripe.api_key = '<>' financial_account_features = Stripe::Treasury::FinancialAccount.retrieve_features('{{TREASURYFINANCIALACCOUNT_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("<>") financial_account_features = client.v1.treasury.financial_accounts.features.retrieve('{{TREASURYFINANCIALACCOUNT_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 = "<>" financial_account_features = stripe.treasury.FinancialAccount.retrieve_features( "{{TREASURYFINANCIALACCOUNT_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. financial_account_features = client.v1.treasury.financial_accounts.features.retrieve( "{{TREASURYFINANCIALACCOUNT_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('<>'); $financialAccountFeatures = $stripe->treasury->financialAccounts->retrieveFeatures( '{{TREASURYFINANCIALACCOUNT_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 = "<>"; FinancialAccount resource = FinancialAccount.retrieve("{{TREASURYFINANCIALACCOUNT_ID}}"); FinancialAccountRetrieveFeaturesParams params = FinancialAccountRetrieveFeaturesParams.builder().build(); FinancialAccountFeatures financialAccountFeatures = resource.retrieveFeatures(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("<>"); FinancialAccountFeaturesRetrieveParams params = FinancialAccountFeaturesRetrieveParams.builder().build(); // For SDK versions 29.4.0 or lower, remove '.v1()' from the following line. FinancialAccountFeatures financialAccountFeatures = client.v1().treasury().financialAccounts().features().retrieve( "{{TREASURYFINANCIALACCOUNT_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 financialAccountFeatures = await stripe.treasury.financialAccounts.retrieveFeatures( '{{TREASURYFINANCIALACCOUNT_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.TreasuryFinancialAccountRetrieveFeaturesParams{} result, err := financialaccount.RetrieveFeatures( "{{TREASURYFINANCIALACCOUNT_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.TreasuryFinancialAccountRetrieveFeaturesParams{ FinancialAccount: stripe.String("{{TREASURYFINANCIALACCOUNT_ID}}"), } result, err := sc.V1TreasuryFinancialAccounts.RetrieveFeatures(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 service = new Stripe.Treasury.FinancialAccountFeaturesService(); Stripe.Treasury.FinancialAccountFeatures financialAccountFeatures = service.Get( "{{TREASURYFINANCIALACCOUNT_ID}}"); ``` ```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 client = new StripeClient("<>"); var service = client.V1.Treasury.FinancialAccounts.Features; Stripe.Treasury.FinancialAccountFeatures financialAccountFeatures = service.Get( "{{TREASURYFINANCIALACCOUNT_ID}}"); ``` If successful, the response itemizes the features assigned to your platform financial account. ```json { "object": "treasury.financial_account_features", "card_issuing": { "requested": true, "status": "active", "status_details": [] }, "deposit_insurance": { "requested": true, "status": "active", "status_details": [] }, "financial_addresses": { "aba": { "requested": true, "status": "active", "status_details": [] } }, "inbound_transfers": { "ach": { "requested": true, "status": "active", "status_details": [] } }, "intra_stripe_flows": { "requested": true, "status": "active", "status_details": [] }, "outbound_payments": { "ach": { "requested": true, "status": "active", "status_details": [] }, "us_domestic_wire": { "requested": true, "status": "active", "status_details": [] } } } ``` ## Create additional financial accounts for your platform You can create up to 3 financial accounts on your platform account. Use `POST /v1/treasury/financial_accounts` without a `Stripe-Account` header to create a new financial account. ## Platform default financial account Your platform includes one default financial account, which Stripe uses to service your platform. For example, Stripe uses the default financial account to remediate negative balances incurred by connected accounts. By default, the first financial account you create on your platform account becomes your default financial account. To verify this, check that the `is_default` field is set to `true` on the financial account. ## Moving money between the Treasury financial accounts of the platform and its connected accounts Use `OutboundPayments` over the `stripe` network to instantly move funds between a platform Treasury financial account and the Treasury financial accounts of connected accounts associated with the same platform. See [Creating an OutboundPayment to a financial account](https://docs.stripe.com/treasury/moving-money/financial-accounts/out-of/outbound-payments.md#create-obp-for-fa) for more information. ## See also - [Treasury account structure](https://docs.stripe.com/treasury/account-management/treasury-accounts-structure.md) - [Working with connected accounts](https://docs.stripe.com/treasury/account-management/connected-accounts.md) - [Working with balances](https://docs.stripe.com/treasury/account-management/working-with-balances-and-transactions.md) - [Moving money into Treasury financial accounts](https://docs.stripe.com/treasury/moving-money/moving-money-into-financial-accounts.md) - [Moving money out of Treasury financial accounts](https://docs.stripe.com/treasury/moving-money/moving-money-out-of-financial-accounts.md)