Skip to content
Create account
or
Sign in
The Stripe Docs logo
/
Ask AI
Create account
Sign in
Get started
Payments
Revenue
Platforms and marketplaces
Money management
Developer resources
Overview
Start an integration
Funding and treasury
Capital
Treasury
Payment management
Global Payouts
Issuing cards
    Overview
    How Issuing works
    Global availability
    Manage fraud
    Cards
    Choose your card type
    Virtual cards
    Physical cards
    Manage cards
    Digital wallets
    Replacement cards
    Card programs
    Program management
    Processor-only Issuing
      Integrate processor-only Issuing
    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
    Enriched merchant data
    Issuing with Connect
    Set up an Issuing and Connect integration
    Update terms of service acceptance
    Connect funding
    Connected accounts, cardholders, and cards
    Inactive connected accounts offboarding
    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)
Manage money
HomeMoney managementIssuing cardsProcessor-only Issuing

Integrate processor-only Issuing

Set up a processor-only Issuing integration.

Before you can move forward with the processor-only model, you must conduct Know Your Customer (KYC) on cardholders. In this model, a Cardholder object represents every end customer.

Create a Cardholder object

Create a Cardholder object to represent the business entity or individual that’s authorized to use the card. The response includes a unique id for the cardholder.

Command Line
cURL
curl https://api.stripe.com/v1/issuing/cardholders \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d name="Jenny Rosen" \ --data-urlencode email="jenny.rosen@example.com" \ --data-urlencode phone_number="+18008675309" \ -d status=active \ -d type=individual \ -d "billing[address][line1]"="123 Main Street" \ -d "billing[address][city]"="San Francisco" \ -d "billing[address][state]"=CA \ -d "billing[address][postal_code]"=94111 \ -d "billing[address][country]"=US

Issue a card

Issue the card to the Cardholder by passing in the id from the previous step. You must also include the currency and type of card (physical or virtual). In the following example, we also include the cardholder’s shipping information.

Command Line
cURL
curl https://api.stripe.com/v1/issuing/cards \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -d currency=usd \ -d type=physical \ -d cardholder=ich_123 \ -d "shipping[name]"="Jenny Rosen" \ -d "shipping[address][line1]"="123 Main St" \ -d "shipping[address][city]"="San Francisco" \ -d "shipping[address][state]"=CA \ -d "shipping[address][postal_code]"=94111 \ -d "shipping[address][country]"=US

Track the card

To track the card’s shipping status, use the tracking_url or tracking_number attributes. You can also listen to the issuing_card.updated webhook for updates to shipping.status. For you to receive updates, the shipping carrier must support tracking.

Activate the card

When you receive a webhook indicating that shipping.status equals delivered, activate the card by updating its status. (You can also use this API to temporarily deactivate the card.) By default, cards are inactive when you create them.

Command Line
cURL
curl https://api.stripe.com/v1/issuing/cards/ic_123 \ -u "
sk_test_BQokikJOvBiI2HlWgH4olfQ2
:"
\ -H "Stripe-Account:
{{CONNECTED_ACCOUNT_ID}}
"
\ -d status=active

Set up authorization notifications

Set up the issuing_authorization.request webhook to immediately notify you when someone makes an authorization request on an issued card. This lets you approve or decline the authorization instantly, giving you control over whether to allow or block a transaction before it completes. To learn more, see Issuing real-time authorizations.

Subscribe to authorization updates

Subscribe to issuing_authorization.create webhook events. This webhook notifies you when someone creates a new authorization for an issued card. It provides details about the authorization outcome, including whether it was approved or declined. This lets you track authorizations, handle edge cases (such as network declines after approval), and place a hold on the cardholder’s balance when an authorization completes.

Subscribe to transaction updates

Subscribe to issuing_transaction.create webhook events. This webhook notifies you when a new transaction is created for an issued card, which occurs when Stripe receives the clearing record for an authorization. You can’t decline the clearing record, but you can dispute the transaction if needed. Use this webhook to track finalized spending, and update cardholder balances accordingly.

A transaction doesn’t necessarily need to be associated with an authorization (in the case of a force capture). Additionally, the transaction amount doesn’t need to match the amount from a linked authorization (in the case of a partial_capture or over_capture).

Determine your daily settlement

To determine your daily settlement amount with the card network, subscribe to the issuing_settlement webhook. You can use this webhook to also verify that the amount matches the day’s transactions.

The issuing_settlement.created event indicates how much you need to settle with the card network on a given day. You can reconcile this with the amount pulled from your bank account. Stripe associates issuing transactions and disputes with the Settlement object. When we find all the transactions, we mark the settlement status as completed. To learn more, see the Settlement API.

Sum up transaction and dispute settlement detail

To understand and track the balance impact for a specific cardholder, sum up the transaction and Dispute Settlement Detail objects associated with the settlement.

See also

  • Reporting
  • Disputes
  • Tokenization
  • 3D Secure (3DS)
  • Program management
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