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
| Region | Availability |
|---|---|
| United States | Generally available |
| United Kingdom | Generally available |
| European Economic Area (EEA) | Generally available |
| Latin America, Caribbean, Africa | Stablecoin-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 case | Description |
|---|---|
| Commercial card program | Create, manage, and distribute payment cards for your business (expense management, vendor payments) |
| Consumer card program | Bank-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
| Source | Description |
|---|---|
| Issuing balance | Funds 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 wallet | Bridge 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
- Contact Stripe sales to determine eligibility and complete the application
- Choose card types: virtual, physical, or both
- Customize your card program: network (Mastercard or Visa), card product type, branding
- Fund your Issuing balance (transfer from Stripe balance or external bank top-up)
- Implement fraud management controls
- Optionally configure spending controls (limits, blocked MCCs, blocked countries)
- 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 type | Description |
|---|---|
spending_limits | Amount limits per interval (daily, weekly, monthly, per-authorization, all-time) |
allowed_categories | Allowlist of merchant category codes (MCCs) |
blocked_categories | Blocklist of MCCs |
allowed_merchant_countries | Restrict to specific countries |
blocked_merchant_countries | Block 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_transferOr 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=virtualTesting
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_stationsKey webhook events
| Event | When it fires |
|---|---|
issuing_authorization.request | Real-time authorization — approve or decline |
issuing_authorization.created | Authorization created (approved) |
issuing_authorization.updated | Authorization updated |
issuing_card.created | New card issued |
issuing_cardholder.created | New cardholder created |
issuing_transaction.created | Transaction recorded |