Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

B2B payments integration guide


B2B payments integration guide

Build a B2B payments integration with Issuing.

Build a US B2B payments integration by using Stripe Issuing to create cards for your business, employees, or contractors to make purchases on your behalf.

By the end of this guide, you’ll know how to:

  • Fund your Issuing Balance
  • Create virtual cards for your own business
  • Use these cards to spend funds from your Issuing Balance

Before you begin

  1. Sign up for a Stripe account .
  2. Activate Issuing in a sandbox environment from the Dashboard.

Add funds

To spend money using cards, add funds to the Issuing balance on your account. This balance represents funds reserved for Issuing and is safely separated from your earnings, payouts, and funds from other Stripe products.

You can add funds from your Dashboard.

Create cardholders and cards

Create a cardholder

The Cardholder is the company or business entity that’s authorized to use card funding by the Issuing balance. The Cardholder object includes relevant details, such as a name to display on cards and a billing address, which is usually the business address.

The following API call creates a new Cardholder:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Stripe returns a Cardholder object that contains the information you provided and sends the issuing_cardholder.created webhook event.

Create a card

Create a card and attach it to the Cardholder that you want to make the authorized user of the card.

In the following examples, we show you how to create a virtual card. You can, however, create physical cards and ship them to cardholders in live mode.

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

Stripe returns a Card object on creation, and sends the issuing_card.created webhook event:

{
 "id": "ic_1NvPjF2SSJdH5vn2OVbE7r0b",
 "object": "issuing.card",
 "brand": "Visa",
 ...
 "status": "inactive",
 "type": "virtual"
}

You need to activate the card before a user can use it. While you can activate virtual cards in the same API call you used to create it, you must activate physical cards separately. When ready, activate the card by marking the status as active:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

At this point, there’s now an active card attached to a cardholder. See the Issuing page to view the card and cardholder information.

{
 "id": "ic_1NvPjF2SSJdH5vn2OVbE7r0b",
 "object": "issuing.card",
 "brand": "Visa",
 ...
 "status": "active",
 "type": "virtual"
}

To learn more, see:

Use the card

Create an authorization

To observe the impact of card activity on the associated balance, generate a test authorization. You can do this in the Issuing page of the Dashboard, or with the following call to the Authorization API:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

After approval, Stripe creates an Authorization in a pending state while it waits for capture. Note the authorization id that you’ll use to capture the funds:

{
 "id": "iauth_1NvPyY2SSJdH5vn2xZQE8C7k",
 "object": "issuing.authorization",
 "amount": 1000,
 ...
 "status": "pending",
 "transactions": []
}

Capture the funds

Capture the funds using the following code:

Command Line

Select a language

cURL

Stripe CLI

Ruby

Python

PHP

Java

Node.js

Go

.NET

No results

After the authorization is captured, Stripe creates an Issuing Transaction, the status of the authorization is set to closed.

See also

Last verified 2026-09-24

Is this helpful?