Skip to content
Create account or Sign in
The Stripe Docs logo
Search/Ask AI
Create accountSign in
  • Get started
  • Payments
  • Revenue
  • Risk
  • Data
  • Money management
  • Stablecoins
  • Embedded finance
  • Developer resources
More
APIs & SDKsHelp
Overview
Stripe Connect
How Connect works
Get started with Connect
Design your integration
Integration fundamentals
Capabilities and information requirements
Configure account Dashboards
Onboard connected accounts
Manage your Connect platform
Payment processing
Accept payments
Pay out to accounts
Embedded financial products
Treasury for platforms
Issuing
    How Issuing works
    Global availability
    Product and marketing compliance guidance (US)
    Consumer Issuing compliance guidance (US)
    Marketing guidance (Europe/UK)
    Manage fraud
    Get started with Issuing
    Onboarding overview
    Choose a cardholder type
    Choose your card type
    Virtual cards
    Physical cards
    Fund your Issuing balance
    Testing
    Integrate Issuing
    Integration guides
      Embedded Finance
      B2B payments
      Fleet
      Create a PaymentMethod from an Issuing card
      Issuing for agents
        Manage Issuing cards with AI agents
        Pay with a Shared Payment Token
      Issuing for your business
    Sample app
    Manage cards
    Digital wallets
    Replacement cards
    Card programs
    Program management
    Processor-only Issuing
    Customize your card program
    Add funds to your card program
    Consumer Credit Issuing
    Consumer prepaid debit cards
    Stablecoin-backed cards
    Controls
    Spending controls
    Lifecycle controls
    Radar
    3DS
    Alerts for updated phone numbers
    Fraud challenges
    Real-time authentications
    Real-time authorizations
    Issuer-app authentications
    PIN management
    Issuing Elements
    Token management
    Postfunding
    Postfund your integration with Stripe
    Postfund your integration with Dynamic Reserves
    Purchases
    Authorizations
    Transactions
    Disputes
    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
    Issuing with Connect and Accounts V2 APIs
    Set up an Issuing and Connect integration
    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
    Customer support for Issuing and Treasury for platforms
    Issuing watchlist
Capital for platforms
Managed support
United States
English (United States)
  1. Home/
  2. Embedded finance/
  3. Issuing/
  4. Integration guides
Private preview

Issuing for agentsPrivate preview

Learn how to issue cards for agents.

Issuing for agents lets you issue cards and credentials that agents can use to make purchases autonomously, with spend controls, real-time authorization decisioning, and full transaction visibility. Before your agent makes a purchase, you can decide what it can spend, where, and how much. Cards are issued using Stripe Issuing APIs.

To get started, apply or contact us directly.

How agents can pay

Agents can pay with Stripe Issuing cards through these supported paths:

  • Programmatic checkout: For flows such as MPP or UCP, use programmatic checkout to create a scoped Shared Payment Token (SPT) using your Stripe Issuing card.
  • Browser checkout: Retrieve the virtual card’s credentials and use the card directly, using lifecycle controls to create a single-use Stripe Issuing card.

Create cards with Stripe MCP

If your account has access to Issuing create methods through Stripe MCP, you can ask an agent to create cardholders and physical or virtual cards. See Manage Issuing cards with AI agents for setup, permissions, and supported methods.

Credentials agents can use

Use Stripe Issuing to give agents controlled payment credentials.

Every agent payment starts with a Stripe Issuing card. Depending on the checkout flow, the agent can:

  • Use Issuing card details from a single-use card.
  • Use a Shared Payment Token (SPT) created from the Issuing card.
  • Use an agentic network token created from the Issuing card by Visa or Mastercard.

Use cases supported

You can use Issuing for agents with the following Issuing products:

ProductDescriptionRequest access
Cards for your own businessUse Issuing to give each agent its own virtual card with per-agent spend limits, merchant category controls, and custom authorization rules. Common use cases include buying inventory to resell, covering operational expenses, and making purchases to fulfill a service.Apply in the Stripe Dashboard
Cards for your platformIf you’re a platform, such as a fintech, vertical SaaS, or marketplace, you can use Issuing to let agents spend on behalf of the businesses or consumers on your platform. Issue commercial cards for business customers managing expenses, or consumer cards for individuals making personal purchases. Your cardholders configure their own spend limits, merchant category restrictions, and authorization rules. You retain transaction-level visibility across all cards that your platform issues.Contact Stripe

Capabilities

CapabilityDescription
Single-use cardsIssue virtual cards scoped to a single task or session. Cards are automatically invalidated after use.
Real-time authorizationsApprove or decline every transaction using webhooks. Make authorization decisions based on a business’s details and the card’s metadata. You own the authorization integration.
Spend controlsSet limits on how much and how often consumers can spend, and which merchant categories are allowed. You can set controls at the card or cardholder level.
Full transaction visibilityTrack every transaction including captures, refunds, partial captures, over-captures, and force captures, and reconcile them back to the originating card and purchase using metadata.
Advanced fraud signalsGet machine learning-generated risk scores on every authorization, including fraud risk, merchant dispute risk, and card testing detections. Opt in within the Stripe Dashboard.

Pay in agentic payment flows

Agents can pay with Issuing through these supported paths:

  • Browser checkout: Retrieve the virtual card’s credentials and use the card directly. For one-off purchases, use Issuing lifecycle controls to create a single-use card.
  • Stripe-backed programmatic payments: For flows such as MPP or UCP, see Pay with a Shared Payment Token from an Issuing card. That guide walks through funding the purchase with an Issuing card and issuing a scoped Shared Payment Token (SPT) for the seller.

Spend controls

Before an agent ever makes a purchase, you can define what it’s allowed to spend, where, and how often. These controls are set at card creation and can be updated at any time. You can tighten them when a task changes scope, loosen them when more budget is approved, or remove them for trusted agents with broad mandates.

Merchant category controls restrict the card to specific types of businesses. For example, a travel booking agent should only be able to charge airlines and hotels, and not restaurants or retail stores:

Command Line
curl https://api.stripe.com/v1/issuing/cards \ -u "{{SECRET_KEY}}:" \ -d "cardholder"="ich_123" \ -d "currency"="usd" \ -d "type"="virtual" \ -d "status"="active" \ -d "spending_controls[allowed_categories][]"="airlines_air_carriers" \ -d "spending_controls[allowed_categories][]"="hotels_motels_and_resorts"

Spend limits set how much the card can be charged, either per transaction or over a rolling period:

Command Line
curl https://api.stripe.com/v1/issuing/cards/ic_123 \ -u "{{SECRET_KEY}}:" \ -d "spending_controls[spending_limits][0][amount]"=100000 \ -d "spending_controls[spending_limits][0][interval]"="monthly" \ -d "spending_controls[spending_limits][1][amount]"=10000 \ -d "spending_controls[spending_limits][1][interval]"="per_authorization"

Real-time authorization

After you pass a card to an agent, every purchase attempt triggers a real-time authorization request before the charge goes through. This lets you approve or decline the transaction based on your spending rules, fraud signals, merchant category restrictions, or context about what the agent is told to do.

First, listen for issuing_authorization.request events. Each event contains the business, amount, and any metadata you attached to the card when you issued it. There is a 2 second default timeout to respond before Stripe falls back to the card’s default rules:

{ "type": "issuing_authorization.request", "data": { "object": { "id": "iauth_123", "amount": 9900, "merchant_data": { "name": "Acme Supplies", "category_code": "5045", "city": "San Francisco", "country": "US" }, "card": { "metadata": { "agent_id": "agent_fulfillment_01", "customer_order_id": "order_8821", "allowed_merchant": "supplier_acme" } } } } }

Next, use the authorization payload to run any checks your business requires before approving. Common patterns include:

  • Business match: Verify the business name or category matches the agent’s task
  • Amount confirmation: Confirm the charge is within the expected budget for the order or task
  • Velocity check: Flag if the agent has attempted an unusual number of transactions in a short window
  • Fraud signals: Cross-reference the business’s country, IP, or category against known fraud patterns

If the transaction looks legitimate, approve it. If anything looks off, decline it and flag with the agent or a human reviewer.

You can use Stripe advanced fraud tools in your decision making process. Stripe evaluates every authorization for fraud signals and produces a risk score you can factor into your approval logic:

{ "type": "issuing_authorization.request", "data": { "object": { "id": "iauth_123", "amount": 9900, "fraud_challenges": [], "network_risk_score": 23, "merchant_data": { "name": "Acme Supplies", "category_code": "5045" }, "verification_data": { "address_line1_check": "match", "postal_code_check": "match", "cvc_check": "match" } } } }

A low risk score alongside passing address and CVC checks is a signal to approve. A high risk score, especially combined with a mismatched address or an unfamiliar business country, is a signal to decline and investigate before letting the agent proceed.

Monitor the agent’s transactions

Every transaction your agent makes is traceable. Use Stripe webhooks and transaction data to track spend, catch anomalies, reconcile purchases, and dispute overcharges automatically, without manual oversight.

Detect unusual spending

Agents can continuously scan transaction history to detect unusual purchases, such as charges from unfamiliar businesses, transactions that exceed typical amounts, or activity outside expected hours. When an agent detects a suspicious transaction, it can automatically freeze the card or flag it for review.

First, pull recent transactions for a cardholder to give your agent a window of activity to review:

Command Line
curl -G https://api.stripe.com/v1/issuing/transactions \ -u "{{SECRET_KEY}}:" \ -d "cardholder"="ich_123" \ -d "limit"=100

Next, pass the transaction list to your agent. Flag any transaction where the merchant category falls outside what’s expected, or where the amount is significantly higher than the cardholder’s historical average:

{ "transactions": [ { "amount": 42000, "merchant_data": { "category_code": "5999", "name": "Unknown Merchant" }, "card": { "metadata": { "agent_id": "agent_finance_01", "cost_center": "engineering" } } } ] }

If the agent flags a transaction, freeze the card immediately while the issue is investigated:

Command Line
curl https://api.stripe.com/v1/issuing/cards/ic_123 \ -u "{{SECRET_KEY}}:" \ -d "status"="inactive"

Track spending against budgets

Every card can carry a spend limit, a monthly maximum, a per-transaction maximum, or both. Agents can monitor how much of that budget has been used in real time and take action before a limit is reached by alerting the cardholder, requesting a budget increase, or blocking new purchases until the next period resets.

First, subscribe to issuing_authorization.created to capture each purchase as it’s approved:

{ "type": "issuing_authorization.created", "data": { "object": { "amount": 15000, "card": { "spending_controls": { "spending_limits": [{ "amount": 50000, "interval": "monthly" }] }, "metadata": { "agent_id": "agent_finance_01" } } } } }

As authorizations come in, add them up against the card’s monthly limit. When spend crosses a threshold (for example, 80%), notify the cardholder or adjust the limit:

Command Line
curl https://api.stripe.com/v1/issuing/cards/ic_123 \ -u "{{SECRET_KEY}}:" \ -d "spending_controls[spending_limits][0][amount]"=40000 \ -d "spending_controls[spending_limits][0][interval]"="monthly"

Reconcile purchases automatically

After a purchase settles, usually within 1-2 days of the original authorization, Stripe creates a transaction record with the final amount and business details. Agents can use this to automatically match charges to the tasks or orders that triggered them, flag discrepancies where the settled amount differs from what was authorized, and keep your books up to date without manual intervention.

First, subscribe to issuing_transaction.created to receive a notification each time a charge fully settles:

{ "type": "issuing_transaction.created", "data": { "object": { "amount": 7500, "merchant_data": { "name": "Logistics Co", "category_code": "4215" }, "card": { "metadata": { "customer_order_id": "order_8821", "agent_id": "agent_fulfillment_01" } } } } }

Use the metadata on the transaction to match it back to the originating order or task in your system. If the settled amount differs from what was originally authorized, flag it for review:

Command Line
curl https://api.stripe.com/v1/issuing/transactions \ -u "{{SECRET_KEY}}:" \ -d "cardholder"="ich_123" \ -d "created[gte]"=1672531200

Catch and dispute overcharges

When a card is used, Stripe first creates an authorization for the expected amount. When the charge fully settles, Stripe creates a transaction, and the two amounts don’t always match. A restaurant might add a tip, a supplier might ship a partial order but charge in full, or a business might process the wrong amount. Agents can automatically compare what was authorized against what was charged, and file a dispute on your behalf if there is a mismatch.

When a transaction settles, retrieve the original authorization to compare amounts:

Command Line
curl https://api.stripe.com/v1/issuing/authorizations/iauth_123 \ -u "{{SECRET_KEY}}:"

Your agent compares the authorized amount against the settled transaction amount. If the difference exceeds a threshold you define, it flags the transaction and initiates a dispute:

{ "authorization_amount": 7500, "transaction_amount": 9200, "delta": 1700, "card": { "metadata": { "customer_order_id": "order_8821", "agent_id": "agent_fulfillment_01" } } }

You can also file a dispute directly against the transaction:

Command Line
curl https://api.stripe.com/v1/issuing/disputes \ -u "{{SECRET_KEY}}:" \ -d "transaction"="ipi_123" \ -d "evidence[reason]"="canceled" \ -d "evidence[incorrect_amount][dispute_amount]"=7500 \ -d "evidence[incorrect_amount][original_transaction]"="ipi_123"

Next, subscribe to issuing_dispute.updated to track the status of open disputes and notify the cardholder when a dispute is resolved and funds are recovered:

{ "type": "issuing_dispute.updated", "data": { "object": { "status": "won", "amount": 1700, "transaction": "ipi_123" } } }

See also

  • Pay with a Shared Payment Token from an Issuing card
  • Issuing for your business
  • Issuing for your platform
  • Agentic spending for personal expenses
Was this page helpful?
YesNo
  • Need help? Contact Support.
  • Chat with Stripe developers on Discord.
  • Check out our changelog.
  • Questions? Contact Sales.
  • LLM? Read llms.txt.
  • Powered by Markdoc
On this page
Advertisement
Advertisement