# Fund Issuing balances with Connect Learn how to fund connected accounts for Issuing. Before an issued card can be used for transactions, you must first allocate funds to the connected account’s [Issuing balance](https://docs.stripe.com/issuing/funding/balance.md) associated with the card. An Issuing balance holds funds reserved for the card and is safely separated from earnings, [payouts](https://docs.stripe.com/payouts.md), and funds from other Stripe products. ## Fund from a bank account You have two options for funding an Issuing balance from an external account that each have different setups: pull funding and push funding. - **Pull funding** is the default funding option in the US and isn’t available in the EU or the UK. You need to verify external bank accounts, which usually causes a delay in transferring funds (up to 5 business days). This option allows you to control and identify which bank your top-up originates from. - **Push funding** is available in the UK and EU and as a beta in the US. This options allows you to originate the funds from your own bank account to Stripe. You might be able to receive funds the same day with push funding, which depends on the process you use (for example, ACH or wire transfer). #### Pull funding (US) Before you can top-up a connected account from your user’s bank account, you must first collect and verify their account information. Stripe provides the option of collection through [Stripe.js](https://docs.stripe.com/payments/elements.md) with verification using microdeposits. #### Microdeposit ### Collecting your users’ information To debit the user’s bank account for funding, you’ll need to collect their bank account information and submit evidence of their authorization to debit their account. This is known as a [mandate](https://docs.stripe.com/api/sources/create.md#create_source-mandate), and ensures both you and Stripe remain compliant with ACH network rules, as well as provide you with access to evidence to ease in any dispute resolution. Create a form that captures: - Nama - Nomor routing - Nomor rekening As your customers submit the mandate, you should record: - Alamat IP - Agen pengguna - Tanggal If instead you prefer to collect mandates from your users *offline* (such as through phone or a paper agreement), you won’t upload evidence of acceptance to Stripe. You should maintain your own record of the acceptance and provide us a contact email in case the evidence is requested. ### Creating the token and source Create a token using the [Bank Account Token API](https://docs.stripe.com/api/tokens/create_bank_account.md), and then use it to create a source. Create both the bank account token and `source` on the connected account you want to fund. > Store these `Source` tokens in your own system where your integration can retrieve them. Stripe currently doesn’t provide a way to programmatically retrieve or list the tokens after they’re created. ```curl curl https://api.stripe.com/v1/tokens \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "bank_account[country]=US" \ -d "bank_account[currency]=usd" \ -d "bank_account[account_holder_name]=Jenny Rosen" \ -d "bank_account[account_holder_type]=individual" \ -d "bank_account[routing_number]=110000000" \ -d "bank_account[account_number]=000000000009" ``` Create a `source` using the token you obtained: ```curl curl https://api.stripe.com/v1/sources \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d type=ach_debit \ -d currency=usd \ -d token={{TOKEN_ID}} \ -d "owner[address][line1]=510 Townsend Street" \ -d "owner[address][city]=San Francisco" \ -d "owner[address][state]=California" \ -d "owner[address][country]=US" \ --data-urlencode "owner[email]=jenny.rosen@example.com" \ -d "owner[name]=Jenny Rosen" \ -d "owner[phone]=5554443333" ``` ### Verifying sources with microdeposits Two small deposits with the statement description **ACCTVERIFY** are sent to the bank account within 1-2 days. You should collect these two amounts from your user to verify the bank account. ```curl curl https://api.stripe.com/v1/sources/{{SOURCE_ID}}/verify \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d "values[]=32" \ -d "values[]=45" ``` ### Top-up a connected account’s Issuing balance Fund the Issuing balance on your connected account with top-ups by passing in the `source` that was made and setting the `destination_balance` to `issuing`. #### curl ```bash curl https://api.stripe.com/v1/topups \ -u <>: \ -H "Stripe-Account: {{CONNECTED_STRIPE_ACCOUNT_ID}}" \ -d "amount"=2000 \ -d "currency"="usd" \ -d "description"="Top-up for week of May 31" \ -d "destination_balance"="issuing" \ -d "statement_descriptor"="Top-up" \ -d "source"="{{SOURCE_ID}}" ``` #### Push funding (US) A Funding Instruction contains bank account and routing information applicable to your local region. When that account receives funds, they’re immediately available to your Stripe Account balance using a top-up. You can create Funding Instructions with the API. For a given currency, the provided bank account information is unique and can receive funds any number of times. Although funds might be currency-converted by your bank sometimes, they always arrive in your Stripe balance under the specified currency. | Wilayah | Payment Scheme | Currency Supported | Speed | Maximum amount accepted | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------- | | US(Beta) | *Wire Transfer* (Also called a bank transfer or credit transfer, wire transfers are a method of electronic funds transfers that move money from a payer to a payee) from US banks only | USD | A few minutes to 1 business day | Varies by bank, usually many millions | | *ACH* (Automated Clearing House (ACH) is a US financial network used for electronic payments and money transfers that doesn’t rely on paper checks, credit card networks, wire transfers, or cash) Credit Transfer | USD | Several hours to several business days | Varies by bank, usually less than 25,000 USD | | EU | Transfer Kredit SEPA | EUR | About a day | 999,999,999.99 GBP | | GB | FPS | GBP | About 2 hours during a bank’s business hours, or at the start of the next banking day. | 1 million GBP | | BACS | GBP | 2-3 hari kerja | 20 million GBP | ### Create Funding Instructions with the API (Beta) To access account information for pushing funds, use the [Funding Instructions create API](https://docs.stripe.com/api/issuing/funding_instructions/create.md). This returns unique instructions for your merchant account or each Connect account to push funds to using a bank transfer. ```bash curl https://api.stripe.com/v1/issuing/funding_instructions \ -u <>: \ -H "Stripe-Account: {{CONNECTED_ACCOUNT_ID}}" \ -d "funding_type"="bank_transfer" \ -d "bank_transfer[type]"="us_bank_transfer" \ -d "currency"="usd" ``` If the request succeeds, it returns a response similar to the following: ```json { "object": "funding_instructions", "bank_transfer": { "country": "US", "financial_addresses": [ { "aba": { "account_number": "test_c44b907982bf", "bank_name": "TEST BANK", "routing_number": "110000000" }, "supported_networks": [ "ach", "domestic_wire_us" ], "type": "aba" } ], "type": "us_bank_transfer" }, "currency": "usd", "funding_type": "bank_transfer", "livemode": false } ``` ### Test pushing funds with the Funding Instructions API (Beta) You can simulate a bank transfer to the Issuing balance in *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. Call the [Fund](https://docs.stripe.com/api/issuing/funding_instructions/fund.md) endpoint and specify the transfer amount. Set the `amount` parameter to a positive integer in the smallest currency unit. You must specify the currency that you want the simulated funds to arrive in. For example, to create a test transfer of 1 USD, use `100` as the amount, and `usd` as the currency. After simulating a bank transfer, the specified amount is added to the test Issuing balance. View your updated balance from the [Dashboard](https://dashboard.stripe.com/balance/overview#issuing-summary) or with the [Retrieve balance](https://docs.stripe.com/api/balance/balance_retrieve.md) endpoint. Each call to the test endpoint simulates a new bank transfer. > Currently, client libraries aren’t supported. ```bash curl https://api.stripe.com/v1/test_helpers/issuing/fund_balance \ -u <>: \ -H "Stripe-Account: {{CONNECTED_ACCOUNT_ID}}" \ -d "amount"=100 \ -d "currency"="usd" ``` If the request succeeds, it returns a response similar to the following: ```json { "object": "funding_instructions", "bank_transfer": { "country": "US", "financial_addresses": [ { "aba": { "account_number": "test_c44b907982bf", "bank_name": "TEST BANK", "routing_number": "110000000" }, "supported_networks": [ "ach", "domestic_wire_us" ], "type": "aba" } ], "type": "us_bank_transfer" }, "currency": "usd", "funding_type": "bank_transfer", "livemode": false } ``` ### Request early access Access to US push funding is currently limited to US beta users. You must be an Issuing customer to join the beta. To request access to the beta, log in to your Stripe account and refresh the page. [Contact Stripe](https://stripe.com/contact/sales) for more information. #### Push funding (Euro) A Funding Instruction contains bank account and routing information applicable to your local region. When that account receives funds, they’re immediately available to your Stripe Account balance using a top-up. You can create Funding Instructions with the API. For a given currency, the provided bank account information is unique and can receive funds any number of times. Although funds might be currency-converted by your bank sometimes, they always arrive in your Stripe balance under the specified currency. | Wilayah | Payment Scheme | Currency Supported | Speed | Maximum amount accepted | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------- | | US(Beta) | *Wire Transfer* (Also called a bank transfer or credit transfer, wire transfers are a method of electronic funds transfers that move money from a payer to a payee) from US banks only | USD | A few minutes to 1 business day | Varies by bank, usually many millions | | *ACH* (Automated Clearing House (ACH) is a US financial network used for electronic payments and money transfers that doesn’t rely on paper checks, credit card networks, wire transfers, or cash) Credit Transfer | USD | Several hours to several business days | Varies by bank, usually less than 25,000 USD | | EU | Transfer Kredit SEPA | EUR | About a day | 999,999,999.99 GBP | | GB | FPS | GBP | About 2 hours during a bank’s business hours, or at the start of the next banking day. | 1 million GBP | | BACS | GBP | 2-3 hari kerja | 20 million GBP | ### Create Funding Instructions with the API > This API is currently only available for users with an activated account in the Euro area or UK. To access account information for pushing funds, use the create Funding Instruction endpoint. This returns unique instructions for your merchant account or each Connect account to push funds to using a bank transfer. ```bash curl https://api.stripe.com/v1/issuing/funding_instructions \ -u <>: \ -H "Stripe-Account: {{CONNECTED_ACCOUNT_ID}}" \ -d "funding_type"="bank_transfer" \ -d "bank_transfer[type]"="eu_bank_transfer" \ -d "currency"="eur" ``` If the request succeeds, it returns a response similar to the following: ```json { "object": "funding_instructions", "bank_transfer": { "country": "DE", "financial_addresses": [ { "iban": { "account_holder_name": "Stripe Technology Europe Limited", "bic": "SXPYDEHH", "country": "DE", "iban": "DE00000000000000000001" }, "supported_networks": [ "sepa" ], "type": "iban" } ], "type": "eu_bank_transfer" }, "currency": "eur", "funding_type": "bank_transfer", "livemode": false } ``` ### Test pushing funds with the Funding Instructions API You can simulate a bank transfer to the Issuing balance in *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. Call the [Fund](https://docs.stripe.com/api/issuing/funding_instructions/fund.md) endpoint and specify the transfer amount. Set the `amount` parameter to a positive integer in the smallest currency unit. You must specify the currency that you want the simulated funds to arrive in. For example, to create a test transfer of 1 EUR, use `100` as the amount, and `eur` as the currency. After simulating a bank transfer, the specified amount is added to the test Issuing balance. View your updated balance from the [Dashboard](https://dashboard.stripe.com/balance/overview#issuing-summary) or the [retrieve balance](https://docs.stripe.com/api/balance/balance_retrieve.md) endpoint. Each call to the test endpoint simulates a new bank transfer. ```bash curl https://api.stripe.com/v1/test_helpers/issuing/fund_balance \ -u <>: \ -H "Stripe-Account: {{CONNECTED_ACCOUNT_ID}}" \ -d "amount"=100 \ -d "currency"="eur" ``` If the request succeeds, it returns a response similar to the following: ```json { "object": "funding_instructions", "bank_transfer": { "country": "DE", "financial_addresses": [ { "iban": { "account_holder_name": "Stripe Technology Europe Limited", "bic": "SXPYDEHH", "country": "DE", "iban": "DE00000000000000000001" }, "supported_networks": [ "sepa" ], "type": "iban" } ], "type": "eu_bank_transfer" }, "currency": "eur", "funding_type": "bank_transfer", "livemode": false } ``` #### Push funding (UK) A Funding Instruction contains bank account and routing information applicable to your local region. When that account receives funds, they’re immediately available to your Stripe Account balance using a top-up. You can create Funding Instructions with the API. For a given currency, the provided bank account information is unique and can receive funds any number of times. Although funds might be currency-converted by your bank sometimes, they always arrive in your Stripe balance under the specified currency. | Wilayah | Payment Scheme | Currency Supported | Speed | Maximum amount accepted | | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------------------- | -------------------------------------------------------------------------------------- | ------------------------------------- | | US(Beta) | *Wire Transfer* (Also called a bank transfer or credit transfer, wire transfers are a method of electronic funds transfers that move money from a payer to a payee) from US banks only | USD | A few minutes to 1 business day | Varies by bank, usually many millions | | *ACH* (Automated Clearing House (ACH) is a US financial network used for electronic payments and money transfers that doesn’t rely on paper checks, credit card networks, wire transfers, or cash) Credit Transfer | USD | Several hours to several business days | Varies by bank, usually less than 25,000 USD | | EU | Transfer Kredit SEPA | EUR | About a day | 999,999,999.99 GBP | | GB | FPS | GBP | About 2 hours during a bank’s business hours, or at the start of the next banking day. | 1 million GBP | | BACS | GBP | 2-3 hari kerja | 20 million GBP | ### Create Funding Instructions with the API > This API is currently only available for users with an activated account in the Euro area or UK. To access account information for pushing funds, use the create Funding Instruction endpoint. This returns unique instructions for your merchant account or each Connect Account to push funds to using a bank transfer. ```bash curl https://api.stripe.com/v1/issuing/funding_instructions \ -u <>: \ -H "Stripe-Account: {{CONNECTED_ACCOUNT_ID}}" \ -d "funding_type"="bank_transfer" \ -d "bank_transfer[type]"="gb_bank_transfer" \ -d "currency"="gbp" ``` ```json { "object": "funding_instructions", "bank_transfer": { "country": "GB", "financial_addresses": [ { "sort_code": { "account_holder_name": "Stripe Payments UK Limited", "sort_code": "000000", "account_number": "00000000" }, "supported_networks": [ "bacs", "fps" ], "type": "sort_code" } ], "type": "gb_bank_transfer" }, "currency": "gbp", "funding_type": "bank_transfer", "livemode": false } ``` ### Test pushing funds with the Funding Instructions API You can simulate a bank transfer to the Issuing balance in *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. Call the [Fund](https://docs.stripe.com/api/issuing/funding_instructions/fund.md) endpoint and specify the transfer amount. Set the `amount` parameter to a positive integer in the smallest currency unit. You must specify the currency that you want the simulated funds to arrive in. For example, to create a test transfer of 1 GBP, use `100` as the amount, and `gbp` as the currency. After simulating a bank transfer, the specified amount is added to the test Issuing balance. View your updated balance from the [Dashboard](https://dashboard.stripe.com/balance/overview#issuing-summary) or the [retrieve balance](https://docs.stripe.com/api/balance/balance_retrieve.md) endpoint. Each call to the test endpoint simulates a new bank transfer. ```bash curl https://api.stripe.com/v1/test_helpers/issuing/fund_balance \ -u <>: \ -H "Stripe-Account: {{CONNECTED_ACCOUNT_ID}}" \ -d "amount"=100 \ -d "currency"="gbp" ``` If the request succeeds, it returns a response similar to the following: ```json { "object": "funding_instructions", "bank_transfer": { "country": "GB", "financial_addresses": [ { "sort_code": { "account_holder_name": "Stripe Payments UK Limited", "sort_code": "000000", "account_number": "00000000" }, "supported_networks": [ "bacs", "fps" ], "type": "sort_code" } ], "type": "gb_bank_transfer" }, "currency": "gbp", "funding_type": "bank_transfer", "livemode": false } ``` ## Fund from a connected account’s Stripe balance You must [sign up for the Balance Transfer API private beta](https://docs.stripe.com/issuing/connect/funding.md#request-early-access) to transfer funds from your Stripe balance into your Issuing balance. #### curl ```bash curl https://api.stripe.com/v1/balance_transfers \ -u <>: \ -H "Stripe-Account: {{CONNECTED_STRIPE_ACCOUNT_ID}}" \ -d amount=1000 \ -d currency=usd \ -d "source_balance[type]"=payments \ -d "destination_balance[type]"=issuing ``` Transfers from your connected account’s Stripe balance are instant and available 24x7 in the US, or take 1 business day in the UK and euro area countries. This allows you to quickly and easily utilize earned funds from Stripe Payments for spend with Stripe Issuing. You can only move an amount up to the available Stripe balance. Funds won’t be available in the Issuing balance while the transfer is pending. Use the [retrieve balance](https://docs.stripe.com/api/balance/balance_retrieve.md) endpoint to get your available Stripe balance amounts broken down by [source_type](https://docs.stripe.com/api/balance/balance_object.md#balance_object-available-source_types). ### Request early access Access to the Balance Transfer API is currently limited to beta users. You must be an Issuing customer to join the beta. To request access to the beta, log in to your Stripe account and refresh the page. [Contact Stripe](https://stripe.com/contact/sales) for more information. ## Retrieve an Issuing balance To check the current Issuing balance of a connected account, call the [Balance API](https://docs.stripe.com/api/balance/balance_retrieve.md) GET endpoint and pass the connected account ID into the header. ```curl curl https://api.stripe.com/v1/balance \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" ``` The`balance` object is returned with a corresponding `issuing` object that includes the current available balance: ```json { "object": "balance", ... "issuing": { "available": [ { "amount": 100, "currency": "usd" } ] }, "livemode": false } ``` ## Pay out an Issuing balance to an external account The funds in an Issuing balance can also be paid out to a connected account’s [external bank account](https://docs.stripe.com/api/external_accounts.md) using the [Payouts API](https://docs.stripe.com/api/payouts/create.md) POST endpoint and specifying the `source_balance` of the payout as `issuing.` ```curl curl https://api.stripe.com/v1/payouts \ -u "<>:" \ -H "Stripe-Account: {{CONNECTEDACCOUNT_ID}}" \ -d source_balance=issuing \ -d amount=100 \ -d currency=usd ```