Stripe Integration Guide
This guide covers integrating ACP with Stripe, from uploading your product catalog to processing payments with Shared Payment Tokens.
Private Preview: Agentic commerce is currently in private preview. Join the waitlist or apply for Instant Checkout .
Overview
In an agentic checkout flow:
| Component | Traditional Checkout | Agentic Checkout |
|---|---|---|
| UI/Interface | Seller provides | AI agent provides |
| Data model | Seller manages | Seller manages |
| Payment processing | Seller handles | Seller handles |
| Payment credentials | Customer enters on seller site | Agent issues Shared Payment Token |
The AI agent presents the checkout interface and collects payment credentials. You keep your existing data model and payment processing.
Key Concepts
Sellers
Sellers are businesses or platforms that provide e-commerce goods, subscriptions, digital content, or API functions. You use the AI agent as a sales channel for your products.
AI Agents
Agents are LLM-powered applications that discover and recommend products for purchase. When a customer prompts the agent, it can display products through its interface.
The AI agent creates a Customer object for each customer and stores their payment information for reuse.
Shared Payment Tokens (SPTs)
SPTs are scoped grants of a payment method. Key properties:
| Property | Description |
|---|---|
| Seller-bound | Uniquely granted to your account |
| Amount-limited | Capped at the transaction amount |
| Time-limited | Expires after a set window |
| Single-use | Can only be used once |
| Credential-free | Never contains real PANs or raw credentials |
You use SPTs directly in PaymentIntents flows.
Transaction Flow
┌─────────────┐ ┌─────────────┐ ┌─────────────┐ ┌─────────────┐
│ Customer │ │ AI Agent │ │ Seller │ │ Stripe │
└──────┬──────┘ └──────┬──────┘ └──────┬──────┘ └──────┬──────┘
│ │ │ │
│ Payment method │ │ │
│──────────────────>│ │ │
│ │ │ │
│ │ Request SPT │ │
│ │───────────────────────────────────────>
│ │ │ │
│ │ SPT issued │ │
│ │<───────────────────────────────────────
│ │ │ │
│ │ Send SPT + amount │ │
│ │──────────────────>│ │
│ │ │ │
│ │ │ Create PaymentIntent
│ │ │──────────────────>│
│ │ │ │
│ │ │ Payment processed │
│ │ │<──────────────────│
│ │ │ │- Customer provides payment method to the agent
- Agent requests SPT from Stripe (specifies seller, amount, payment method)
- Agent sends SPT and transaction amount to seller
- Seller creates
PaymentIntentusing the SPT - Stripe processes the transaction
Set Up Your Stripe Account
Create and activate your account
If you don’t have a Stripe account, create one . Then:
- Verify your email
- Activate payments (provide business/personal info)
- Link a bank account for payouts
- Set up two-step authentication
Create your public profile
Set up a Stripe profile in the Dashboard. This is what customers see.
Configure taxes
Use Stripe Tax to manage taxes. Follow the tax setup guide .
In your product catalog CSV, set the stripe_product_tax_code column to associate products with tax treatments.
Third-party tax providers supported: Anrok, Avalara, Sphere
Upload Your Product Catalog
You can upload via the Dashboard or API.
API
Step 1: Upload your CSV
Use the Files API. Specify data_management_manual_upload as the purpose.
curl https://files.stripe.com/v1/files \
-u sk_test_YOUR_KEY: \
-F purpose=data_management_manual_upload \
-F file="@/path/to/your/file.csv;type=text/csv"Requirements:
- MIME type must match file format (CSV or TSV)
- Each row = one product or variant
- Maximum file size: 200 MB
- Returns a
Fileobject withid
Step 2: Create an ImportSet
curl https://api.stripe.com/v1/data_management/import_sets \
-H "Stripe-Version: 2025-09-30.clover;udap_beta=v1" \
-u sk_test_YOUR_KEY: \
-d file={{FILE_ID}} \
--data-urlencode standard_data_format="product_catalog_feed"This starts catalog processing and makes data available in the Dashboard.
Step 3: Monitor status
Check the status field on the ImportSet:
curl https://api.stripe.com/v1/data_management/import_sets/{{IMPORT_SET_ID}} \
-u sk_test_YOUR_KEY:Possible statuses:
pending— Processingsucceeded— Complete, no errorssucceeded_with_errors— Complete, some rows failedfailed— Processing failedpending_archive/archived— Archived
Handle errors
If status is succeeded_with_errors:
- Find
result.errors.filein the response - Download the error file:
curl https://files.stripe.com/v1/files/{{ERROR_FILE_ID}}/contents \
-u sk_test_YOUR_KEY:The CSV contains failed rows with a stripe_error_message column.
Tip: Use sandbox mode to validate parsing, field mappings, and data quality before enabling live updates. You can send updates every 15 minutes.
Working with Shared Payment Tokens
Create a test SPT
Use test helpers to simulate receiving an SPT:
curl https://api.stripe.com/v1/test_helpers/shared_payment/granted_tokens \
-u sk_test_YOUR_KEY: \
-d payment_method=pm_card_visa \
-d "usage_limits[currency]"=usd \
-d "usage_limits[max_amount]"=10000 \
-d "usage_limits[expires_at]"={{TIME_IN_FUTURE}} \
-d "seller_details[network_id]"=internal \
-d "seller_details[external_id]"={{ANY_STRING}}Parameters:
| Parameter | Description |
|---|---|
usage_limits | Max amount and expiration. Agent sets max to match transaction total. |
seller_details.network_id | Your Network ID |
seller_details.external_id | Optional identifier (cart ID, connected account, etc.) |
payment_method | The customer’s selected payment method |
Use an SPT to complete payment
Create a PaymentIntent with the granted token:
curl https://api.stripe.com/v1/payment_intents \
-u sk_test_YOUR_KEY: \
-d amount=10000 \
-d currency=usd \
-d shared_payment_granted_token=spt_123 \
-d confirm=trueWhen confirmed, Stripe sets payment_method to a new PaymentMethod cloned from the customer’s original. Subsequent events (refunds, reporting) behave as if you provided the PaymentMethod directly.
Retrieve SPT details
curl https://api.stripe.com/v1/shared_payment/granted_tokens/{id} \
-u sk_test_YOUR_KEY:Response includes:
- Limited info about the underlying payment method (card brand, last four)
- Usage limits
{
"id": "spt_1RgaZcFPC5QUO6ZCDVZuVA8q",
"object": "shared_payment.granted_token",
"created": 1751500820,
"usage_limits": {
"currency": "usd",
"expires_at": 1751587220,
"max_amount": 1000
}
}SPT Webhook Events
| Event | Received By | Description |
|---|---|---|
shared_payment.granted_token.used | Seller | SPT has been used |
shared_payment.granted_token.deactivated | Seller | SPT revoked or expired |
shared_payment.issued_token.used | Agent | Seller used the SPT |
shared_payment.issued_token.deactivated | Agent | SPT no longer valid |
ACP Protocol Integration
The Agentic Commerce Protocol is a RESTful interface (or MCP server) with four endpoints.
Checkout Lifecycle
- Customer expresses intent → Agent sends
CreateCheckoutRequest - Seller generates cart → Responds with checkout state
- Agent renders UI → Shows total, options to customer
- Customer makes selections → Agent/seller exchange
UpdateCheckoutRequest - Customer confirms → Agent provisions SPT, sends
CompleteCheckoutRequest - Seller creates
PaymentIntent→ Sends confirmation to agent
Required Endpoints
| Endpoint | Description |
|---|---|
| Create Checkout | Generate cart from SKU. Return payment methods, fulfillment options, etc. |
| Update Checkout | Handle quantity changes, fulfillment method, customer details |
| Complete Checkout | Receive SPT, process payment, return order details |
| Cancel Checkout | Release inventory, set status to canceled |
Every response includes the current checkout state as a reference for the agent.
Events (Webhooks)
After checkout completes, notify the agent about order updates:
- Order created
- Order shipped
- Refund processed
- etc.
This enables the agent to communicate status changes to the customer.
Security Requirements
- All requests require HTTPS with
Authorization: Bearer {token} - Sign all webhook events with HMAC signature in request header
- The agent provides authorization and signing keys during onboarding
Enable Selling on AI Agents
When ready to go live:
- Review agent terms in the Stripe Dashboard
- Enable the agent
- Stripe sends approval request to the agent
- Agent accepts → You’re live
Pause or stop selling
Disable the agent in the Dashboard, or via API:
curl -X POST https://api.stripe.com/v2/agentic_commerce/agreements/{{AGREEMENT_ID}}/terminate \
-u sk_test_YOUR_KEY:Agreement webhooks
agentic_commerce_agreement.confirmed— Agreement activeagentic_commerce_agreement.terminated— Agreement ended
Optional Configuration
Manual capture
By default, payments capture immediately. To use manual capture:
- Open Agentic Settings in Dashboard
- Set capture mode to manual
- Call capture when ready:
curl -X POST https://api.stripe.com/v1/payment_intents/pi_xxx/capture \
-u sk_test_YOUR_KEY: \
-H "Stripe-Version: 2025-09-30.preview"Pre-confirmation approval hook
Add control over whether to complete a purchase. Before checkout completes, Stripe sends an approval request to your endpoint.
Setup:
- Specify your endpoint in the Dashboard
- Implement your logic
Request format:
{
"type": "String",
"id": "String",
"data": {
"amount_total": 10000,
"currency": "usd",
"line_items_details": [...],
"payment_method_details": {...},
"fulfillment_details": {...}
}
}Response format:
{
"manual_approval_details": {
"type": "approved" | "declined",
"declined": {
"reason": "Out of stock"
}
}
}ChatGPT App Monetization
Two options for accepting payments in ChatGPT apps:
| Feature | Redirect | Instant Checkout |
|---|---|---|
| Integration effort | Low | High |
| Customer experience | Opens new tab | Stays in chat |
| Best for | Standard use cases | Complex flows |
| Availability | Public | Private beta |
| Payment methods | 40+ methods | Cards, Apple Pay, Google Pay, Link |
| Subscriptions | Built-in | Requires API work |
| Promo codes | Built-in | Requires API work |
| Tax | Built-in | Requires API work |
Redirect: Use Stripe’s prebuilt checkout page. Customers open a new tab to pay.
Instant Checkout: Build a custom integration. Customers complete checkout without leaving ChatGPT.
Next Steps
- Going Live Checklist — Production requirements
- API Reference — Full API documentation
- Agentic Commerce Suite — Stripe’s managed solution