Skip to content
Sign in
An image of the Stripe logo
/
Create account
Sign in
Home
Payments
Finance automation
Banking as a service
Developer tools
No-code
All products
Home
Payments
Finance automation
Home
Payments
Finance automation
Banking as a service
Developer tools
Overview
Start an integration
Products
Issuing cards
    Overview
    Global Issuing
    Get started
    How Issuing works
    Choose your card offering
    Customize your program
    Add funds to your card program
    Manage fraud
    Cards
    Create cards
    Virtual cards
    Physical cards
    Manage cards
    Digital wallets
    Replacement cards
    Testing and support
    Testing physical cards
    Support
    Controls
    Spending controls
    Real-time authorizations
    SMS fraud alerts
    3D Secure
    PIN management
    Issuing Elements
    Token Management
    Funding
    Balance
    Purchases
    Authorizations
    Transactions
    Disputes
    Testing
    Merchant categories
    ATM Usage
    Issuing with Connect
    Set up an Issuing and Connect integration
    Connect funding
    Connected accounts cardholders and cards
    Additional information
    Choose a cardholder type
    Customer support for Issuing and Treasury
    Marketing guidance (Europe/UK)
    Product and marketing compliance guidance (US)
Treasury
Business financing
Issuing
·
HomeBanking as a serviceIssuing cards

Funding 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 associated with the card. An Issuing balance holds funds reserved for the card and is safely separated from earnings, payouts, 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).

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 with verification using microdeposits.

Collecting your users’ information

To debit the user’s bank account for funding, you will need to collect their bank account information and submit evidence of their authorization to debit their account. This is known as a 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:

  • Name
  • Routing number
  • Account number

As your customers submit the mandate, you should record:

  • IP address
  • User agent
  • Date

If instead you prefer to collect mandates from your users offline (such as via 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, and then use it to create a source. Create both the bank account token and source on the connected account you want to fund.

Caution

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.

Command Line
curl https://api.stripe.com/v1/tokens \ -u "
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:"
\ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_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:

Command Line
curl https://api.stripe.com/v1/sources \ -u "
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:"
\ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_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.

Command Line
curl https://api.stripe.com/v1/sources/{{SOURCE_ID}}/verify \ -u "
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:"
\ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_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.

Command Line
curl https://api.stripe.com/v1/topups \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:
\ -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}}"

Fund from a connected account's Stripe balance
Beta

You must sign up for the Balance Transfer API private beta to transfer funds from your Stripe balance into your Issuing balance.

Command Line
curl https://api.stripe.com/v1/balance_transfers \ -u
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:
\ -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 one 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 endpoint to get your available Stripe balance amounts broken down by source_type.

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 for more information.

Fund from your platform Issuing balance
Beta

You can transfer funds from your platform Issuing balance to the Issuing balance on each of your connected accounts. A transfer moves the funds from the platform’s Issuing balance to the connected account’s Issuing balance, reducing the platform’s Issuing balance.

Funds from these transfers are instantly available and help you better manage your connected accounts since you don’t need to individually top up each connected account from an external source.

You can only transfer funds up to the amount you have in your platform Issuing balance, which you can look up using the retrieve balance endpoint. Attempting to transfer more funds than is available triggers an error.

You must sign up for the Connect Transfer API private beta to transfer funds from your platform to your connected accounts.

Command Line
curl https://api.stripe.com/v1/transfers \ -u "
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:"
\ -d amount=100 \ -d currency=usd \ -d destination={{CONNECTED_STRIPE_ACCOUNT_ID}} \ -d "source_balance[type]"=issuing

Reversing transfers

You can reverse transfers made to connected accounts if, for example, you made an error in the original transfer, or if there is a refund and you want to pull funds back to the platform. Use the amount parameter to specify how much of the transfer to reverse.

Command Line
curl https://api.stripe.com/v1/transfers/{{TRANSFER_ID}}/reversals \ -u "
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:"
\ -d amount=500

Reverse transfers add the specified amount back to the platform’s Issuing balance, which reduces the connected account’s Issuing balance. A reverse transfer happens immediately and funds returned to the platform’s Issuing balance are instantly available. You can only reverse a transfer for up to the amount of funds in the connected account’s Issuing balance.

Request early access

Access to the Connect Transfers 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 for more information.

Retrieve an Issuing balance

To check the current Issuing balance of a connected account, call the Balance API GET endpoint and pass the connected account ID into the header.

Command Line
curl https://api.stripe.com/v1/balance \ -u "
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:"
\ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_ID}}
"

Thebalance object is returned with a corresponding issuing object that includes the current available balance:

{ "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 using the Payouts API POST endpoint and specifying the source_balance of the payout as issuing.

Command Line
curl https://api.stripe.com/v1/payouts \ -u "
sk_test_4eC39HqLyjWDarjtT1zdp7dc
:"
\ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_ID}}
"
\ -d source_balance=issuing \ -d amount=100 \ -d currency=usd
Was this page helpful?
Need help? Contact Support.
Watch our developer tutorials.
Check out our product changelog.
Questions? Contact Sales.
Powered by Markdoc
You can unsubscribe at any time. Read our privacy policy.
On this page
Fund from a bank account
Fund from a connected account's Stripe balance
Fund from your platform Issuing balance
Retrieve an Issuing balance
Pay out an Issuing balance to an external account
Products Used
Issuing
Connect
Stripe Shell
Test mode
Welcome to the Stripe Shell! Stripe Shell is a browser-based shell with the Stripe CLI pre-installed. Log in to your Stripe account and press Control + Backtick (`) on your keyboard to start managing your Stripe resources in test mode. - View supported Stripe commands: - Find webhook events: - Listen for webhook events: - Call Stripe APIs: stripe [api resource] [operation] (e.g., )
The Stripe Shell is best experienced on desktop.
$