Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Developer tools
Get started
Payments
Finance automation
Get started
Payments
Finance automation
Platforms and marketplaces
Money management
Overview
Start an integration
Products
Global Payouts
Capital
Issuing cards
    Overview
    How Issuing works
    Global availability
    Manage fraud
    Cards
    Choose your card type
    Virtual cards
    Issue virtual cards
    Physical cards
    Manage cards
    Digital wallets
    Replacement cards
    Card programs
    Program management
    Customize your card program
    Add funds to your card program
    Credit Consumer Issuing
    Controls
    Spending controls
    Advanced fraud tools
    3DS
    Fraud challenges
    Real-time authorizations
    PIN management
    Issuing Elements
    Token Management
    Funding
    Balance
    Postfund your integration with Stripe
    Postfund your integration with Dynamic Reserves
    Purchases
    Authorizations
    Transactions
    Disputes
    Testing
    Merchant categories
    ATM Usage
    Issuing with Connect
    Set up an Issuing and Connect integration
    Update terms of service acceptance
    Connect funding
    Connected accounts, cardholders, and cards
    Embed card management UI
    Credit
    Overview
    Set up connected accounts
    Manage credit terms
    Report other credit decisions and manage AANs
    Report required regulatory data for credit decisions
    Manage account obligations
    Test credit integration
    Additional information
    Choose a cardholder type
    Customer support for Issuing and Treasury
    Issuing watchlist
    Marketing guidance (Europe/UK)
    Product and marketing compliance guidance (US)
Treasury
Manage money
HomeMoney managementIssuing cards

Funding Issuing balances with Connect

Learn how to fund connected accounts for Issuing.

Copy page

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
curl https://api.stripe.com/v1/tokens \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -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
curl https://api.stripe.com/v1/sources \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -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
curl https://api.stripe.com/v1/sources/{{SOURCE_ID}}/verify \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -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
curl https://api.stripe.com/v1/topups \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -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

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
curl https://api.stripe.com/v1/balance_transfers \ -u
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:
\ -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 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.

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
curl https://api.stripe.com/v1/balance \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -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
curl https://api.stripe.com/v1/payouts \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_ID}}
"
\ -d source_balance=issuing \ -d amount=100 \ -d currency=usd
Was this page helpful?
YesNo
Need help? Contact Support.
Join our early access program.
Check out our changelog.
Questions? Contact Sales.
LLM? Read llms.txt.
Powered by Markdoc