Frontier
Sell through agents Frontier
Sell your products through AI agents using Agentic Commerce Suite.
Use Agentic Commerce Suite (ACS) to start selling through agents with a single integration. ACS helps you make your products discoverable and accept agentic payments across multiple commerce protocols. It lets you share product, price, and availability information with agents while minimizing changes to your existing commerce systems. ACS is available in the US, Canada, and select European countries.
View all supported countries
If you operate a platform, see the guide for platforms.
Set up your Stripe account
To get set up for agentic commerce:
- First, you need a Stripe account. Create an account .
- After you create an account:
- Verify your email.
- Activate payments by providing business and personal information.
- Connect a bank account for payouts.
- Set up two-factor authentication.
- Go to the Agentic commerce page in the Dashboard and select Get started on Agentic commerce for retail , then choose to onboard as a seller.
- In the modal, populate your business details by creating a Stripe profile . Add your terms of service, privacy policy, and return policy.
- Configure tax. Stripe calculates tax at checkout using the values in your catalog feed, and incomplete configuration can cause checkouts to fail. Configure a tax code for each taxable product. Stripe Tax is optional: set stripe _ product _ tax _ code if you use Stripe Tax for automatic tax calculation (follow the tax setup guide to configure it), or set third _ party _ tax _ code if you use Anrok instead. See the price and promotions field reference for details on these fields.
Create a catalog feed
Create a catalog feed to share your product and inventory data with agents. Format your feed as a CSV where each row is a product or variant and each column maps to a field in the product feed field reference.
After you set up your catalog feed, follow these suggested best practices to prevent issues with outdated inventory or pricing. For example, agents might continue to report that a product isn’t available (even if it’s back in stock) until they receive an explicit signal that the inventory has been updated.
To troubleshoot continued issues, see how to prevent out-of-stock and price failures.
Keep your catalog feed current
To prevent purchase failures during agentic checkout, refresh your product catalog feed frequently. How frequently depends on how fast your inventory moves, but in most cases, uploading inventory and pricing data every 15 minutes is enough.
Between full uploads, send targeted changes with the incremental inventory and incremental price feeds instead of re-uploading your entire catalog.
Cleanly remove old products
When you remove a product from your inventory, send a clean deletion. In upsert mode, omitting a product from your feed leaves it unchanged in Stripe’s catalog. To explicitly remove it, set delete=true. Otherwise, the product remains visible to shoppers and agents.
Only use replace mode for complete inventory refreshes
Feed uploads support two processing modes: upsert and replace. In replace mode, any product not included in the uploaded file is permanently deleted from Stripe’s catalog. Use upsert for all incremental updates and reserve replace mode for intentional full-catalog refreshes. See Feed processing mode.
| Feed type | Frequency | Purpose |
|---|---|---|
| Product data | Once per day | Titles, descriptions, images, and categories |
| Inventory | Every 15 minutes | Prevents agents from showing out-of-stock items |
| Pricing | Every 15 minutes | Helps keep the checkout price aligned with the quoted price |
| Promotions | As needed | Offers discount codes, deals, and free shipping to drive conversion |
Note
Feed uploads are processed as independent, asynchronous tasks. We don’t guarantee uploads are processed or completed in the order you submit them. If you upload multiple files in quick succession, a later upload can finish before an earlier one.
Use Stripe APIs to upload your product data CSV. We recommend using the sandbox to validate parsing, field mappings, and data quality before enabling live updates.
Common mistake
If you use a restricted API key, it must have Product Catalog Imports write permission. Without this permission, API requests return a 403 error.
Create an import
Create a ProductCatalogImport object using the Product Catalog Import API. Send the following request:
Command Line
Select a language
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
A successful request returns the ProductCatalogImport object in the awaiting_upload state. Use the presigned URL in the response’s status_details.awaiting_upload.upload_url.url field to upload your file:
Upload your CSV
Common mistake
The presigned upload URL expires after 5 minutes. Upload your CSV before the URL expires. If it expires, create a new ProductCatalogImport to get a new upload URL.
Upload your CSV to the presigned URL. The maximum file size is 4 GB.
Command Line
After Stripe receives the file, the import transitions from awaiting_upload to processing. Stripe validates the file and ingests the items.
Monitor feed status and resolve errors
Stripe processes your product data, validates and cleans it, then indexes it in a format you can send to AI agents. We recommend listening for webhook events so you’re notified as soon as indexing completes, instead of polling for status. You can monitor indexing progress in two ways:
Stripe sends terminal webhook events after product data indexing completes. Set up an endpoint to listen for v2.commerce.product_catalog.imports.succeeded, v2.commerce.product_catalog.imports.succeeded_with_errors, and v2.commerce.product_catalog.imports.failed events. Each event includes the v2.commerce.product_catalog_import object. See the webhooks guide for step-by-step instructions.
Here’s an example of the v2.commerce.product_catalog.imports.succeeded webhook payload:
The webhook doesn’t include the full import object. Use the related_object.url to retrieve it:
Command Line
Select a language
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
If your import status is succeeded_with_errors, you can download the error file:
- Look for the status _ details. succeeded _ with _ errors. error _ file. download _ url. url field in the response.
- Download the CSV directly from that URL within 5 minutes, before it expires.
- The CSV contains only the rows that failed, with a leading stripe _ error _ message column describing each error.
Note
Error file URLs expire after 5 minutes. To get a new URL, call the retrieve endpoint again.
Send incremental inventory updates
Keeping inventory current is required to prevent checkout failures. Send incremental inventory updates through the Imports API. Use the same upload process as product data uploads, but set feed_type to inventory. Inventory feeds support only upsert mode. See the inventory feed specification for the required fields.
Command Line
Select a language
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
Send incremental price updates
Keeping prices current is required to prevent checkout failures. Send incremental price updates through the Imports API. Use the same upload process as product data uploads and set feed_type to pricing. Price feeds support only upsert mode. See the price feed specification for the required fields.
Command Line
Select a language
cURL
Stripe CLI
Ruby
Python
PHP
Java
Node.js
Go
.NET
No results
Price mismatches, where the price shown to a shopper doesn’t match the price we charge, cause checkouts to fail. To keep the checkout price aligned with the quoted price:
- Upload pricing feeds as soon as prices change, not on a scheduled delay.
- sale _ price _ effective _ date is required when you set a sale _ price . Stripe uses the end date to stop applying the sale price automatically, with no feed update needed.
- If the product price and availability hook returns a different price or sale _ price than your feed, the hook value takes precedence.
Enable sales on an AI chat agent
When you’re ready to sell through an AI interface:
- Go to the Agentic commerce page in the Dashboard.
- Find the agent you want to sell through and review its terms.
- Click the overflow menu ( ), then select Request connection .
We send the agent an approval request that the agent must accept. When the connection succeeds, the agent’s Status column shows Enabled. To pause or stop selling on an AI chat agent, disable it on the same page.
Respond to purchases and fulfill orders
Monitor orders placed through AI chat agents in three ways.
Stripe sends checkout.session.completed after the agent completes an order. Each order generates a unique checkout.session.completed event. The webhook includes the CheckoutSession object. Set up an endpoint to listen for checkout.session.completed events. See the webhooks guide for step-by-step instructions.
const stripe = require('stripe')(process.env.STRIPE_SECRET_KEY);
// Use the secret provided by Stripe CLI for local testing
// or your webhook endpoint's secret
const endpointSecret = 'whsec_...';
app.post('/webhook', (request, response) => {
const sig = request.headers['stripe-signature'];
let event;
try {
event = stripe.webhooks.constructEvent(request.body, sig, endpointSecret);
} catch (err) {
response.status(400).send(`Webhook Error: ${err.message}`);
return;
}
if (event.type === 'checkout.session.completed') {
const session = event.data.object;
// Fulfill the order using the session data
fulfillCheckout(session.id);
}
response.status(200).send();
});
Here’s an example of the checkout.session.completed webhook payload:
{
"id": "evt_1SUz6YRhxngcl2jFHhAi1Wiu",
"object": "event",
"api_version": "2025-10-29.clover",
"created": 1763511518,
"data": {
"object": {
"id": "cs_test_a1exHOZ77Pg40P1hPtcWe2oT2xI8G9ruoQohXq6jkKldIPQaGsNSPQmOGZ",
"object": "checkout.session",
...
"total_details": {
"amount_discount": 0,
"amount_shipping": 0,
"amount_tax": 0
}
}
},
"livemode": false,
...
"type": "checkout.session.completed"
}
After you receive the webhook, retrieve all required fields with a single API call. To avoid multiple requests, expand sub-resources using the expand request parameter with the preview header Stripe-Version: 2025-12-15.preview.
Command Line
See fields in the expanded CheckoutSession, such as amount_total, quantity, and SKU ID.
Checkout session field reference
Test your integration
You can test your integration directly from the Dashboard in a sandbox:
- Go to the Agentic Commerce page, then click View feed .
- Hover over the product you want to test, then click Test .
Optional configuration
After your core integration is live, use these optional guides to refine your setup:
- Manage your agentic commerce integration : Export your catalog feed, configure checkout hooks, prevent inventory and price failures, offer promotions, capture payments manually, and manage refunds and disputes.
- Prepare your services for agents : Learn how services businesses can start engaging with AI agents.
