Skip to content

Stripe Issuing Fresh

Create, manage, and scale a payment card program for your users. Issue virtual or physical cards, control spending, and approve or decline transactions in real time.

Availability

RegionAvailability
United StatesGenerally available
United KingdomGenerally available
European Economic Area (EEA)Generally available
Latin America, Caribbean, AfricaStablecoin-backed cards (select countries)

In the US, cards can be provided to individuals who live in the same country as the business. In the EU/UK, cards can be provided to individuals in EEA countries and the UK.

Issuing requires application and approval — contact Stripe sales to get started.

Use cases

Use caseDescription
Commercial card programCreate, manage, and distribute payment cards for your business (expense management, vendor payments)
Consumer card programBank-sponsored credit programs for your customers (private preview)

Key concepts

Cardholders and cards

  • Cardholder — the person or business entity authorized to use a card
  • Card — virtual or physical, attached to a cardholder and funded by an Issuing balance or financial account
  • Authorization — real-time transaction approval request; you can approve or decline via webhook

Funding sources

SourceDescription
Issuing balanceFunds transferred from your Stripe balance or topped up from an external bank account
Financial account (Treasury)Full embedded finance solution — cards draw from a financial account balance
Stablecoin walletBridge custodial wallet, Privy wallet, or third-party non-custodial wallet (private preview)

Connected accounts

Issuing requires Custom connected accounts — accounts where your platform controls the dashboard and is responsible for requirements collection and loss liability. Standard or Express connected accounts are not supported.

Setup steps

  1. Contact Stripe sales to determine eligibility and complete the application
  2. Choose card types: virtual, physical, or both
  3. Customize your card program: network (Mastercard or Visa), card product type, branding
  4. Fund your Issuing balance (transfer from Stripe balance or external bank top-up)
  5. Implement fraud management controls
  6. Optionally configure spending controls (limits, blocked MCCs, blocked countries)
  7. Test in sandbox using simulated purchases

Creating cardholders and cards

bash
# Create a cardholder
curl https://api.stripe.com/v1/issuing/cardholders \
  -u "sk_test_YOUR_KEY:" \
  -d type=individual \
  -d name="Jane Doe" \
  -d email="jane@example.com" \
  -d "billing[address][line1]=123 Main St" \
  -d "billing[address][city]=San Francisco" \
  -d "billing[address][state]=CA" \
  -d "billing[address][postal_code]=94111" \
  -d "billing[address][country]=US"

# Create a virtual card
curl https://api.stripe.com/v1/issuing/cards \
  -u "sk_test_YOUR_KEY:" \
  -d cardholder={{CARDHOLDER_ID}} \
  -d currency=usd \
  -d type=virtual

# Create a physical card
curl https://api.stripe.com/v1/issuing/cards \
  -u "sk_test_YOUR_KEY:" \
  -d cardholder={{CARDHOLDER_ID}} \
  -d currency=usd \
  -d type=physical \
  -d "shipping[name]=Jane Doe" \
  -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"

Spending controls

Limit where and how cards can be used:

bash
curl https://api.stripe.com/v1/issuing/cards/{{CARD_ID}} \
  -u "sk_test_YOUR_KEY:" \
  -d "spending_controls[spending_limits][0][amount]=5000" \
  -d "spending_controls[spending_limits][0][interval]=daily" \
  -d "spending_controls[blocked_categories][0]=gambling"

Spending controls can be set at the cardholder level (apply to all their cards) or at the individual card level (override cardholder defaults).

Control typeDescription
spending_limitsAmount limits per interval (daily, weekly, monthly, per-authorization, all-time)
allowed_categoriesAllowlist of merchant category codes (MCCs)
blocked_categoriesBlocklist of MCCs
allowed_merchant_countriesRestrict to specific countries
blocked_merchant_countriesBlock specific countries

Real-time authorizations

Respond to authorization requests before they complete. Set up a webhook endpoint to receive issuing_authorization.request events:

javascript
app.post('/webhook', express.raw({ type: 'application/json' }), async (req, res) => {
  const event = stripe.webhooks.constructEvent(req.body, req.headers['stripe-signature'], process.env.WEBHOOK_SECRET);

  if (event.type === 'issuing_authorization.request') {
    const auth = event.data.object;

    // Approve or decline based on your logic
    if (auth.amount > 100000) {
      await stripe.issuing.authorizations.decline(auth.id);
    } else {
      await stripe.issuing.authorizations.approve(auth.id);
    }
  }

  res.json({ received: true });
});

You have approximately 2 seconds to respond. If you don't respond in time, Stripe falls back to spending controls.

Fund the Issuing balance

bash
# Transfer from Stripe balance to Issuing balance
curl https://api.stripe.com/v1/issuing/funding_instructions \
  -u "sk_test_YOUR_KEY:" \
  -d currency=usd \
  -d funding_type=ach_credit_transfer

Or use top-ups from an external bank account via Dashboard → Issuing → Funding.

Connect integration

To issue cards to connected accounts (not your own employees), use Issuing with Connect. Make API calls using the Stripe-Account header:

bash
curl https://api.stripe.com/v1/issuing/cards \
  -u "sk_test_YOUR_KEY:" \
  -H "Stripe-Account: {{CONNECTED_ACCOUNT_ID}}" \
  -d cardholder={{CARDHOLDER_ID}} \
  -d currency=usd \
  -d type=virtual

Testing

Use simulated transactions in sandbox:

bash
# Create a test authorization
curl https://api.stripe.com/v1/test_helpers/issuing/authorizations/create \
  -u "sk_test_YOUR_KEY:" \
  -d card={{CARD_ID}} \
  -d amount=1000 \
  -d currency=usd \
  -d merchant_data[category]=gas_stations

Key webhook events

EventWhen it fires
issuing_authorization.requestReal-time authorization — approve or decline
issuing_authorization.createdAuthorization created (approved)
issuing_authorization.updatedAuthorization updated
issuing_card.createdNew card issued
issuing_cardholder.createdNew cardholder created
issuing_transaction.createdTransaction recorded

Stripe API Reference - Self-contained docs reference, refreshed 2026-05-18