Stripe | Financial Infrastructure to Grow Your Revenue

Stripe | Financial Infrastructure to Grow Your Revenue

4466 articles

Sell through agents


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:

  1. First, you need a Stripe account. Create an account .
  2. 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.
  1. 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.
  2. In the modal, populate your business details by creating a Stripe profile . Add your terms of service, privacy policy, and return policy.
  3. 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 typeFrequencyPurpose
Product dataOnce per dayTitles, descriptions, images, and categories
InventoryEvery 15 minutesPrevents agents from showing out-of-stock items
PricingEvery 15 minutesHelps keep the checkout price aligned with the quoted price
PromotionsAs neededOffers 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:

  1. Look for the status _ details. succeeded _ with _ errors. error _ file. download _ url. url field in the response.
  2. Download the CSV directly from that URL within 5 minutes, before it expires.
  3. 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:

  1. Go to the Agentic commerce page in the Dashboard.
  2. Find the agent you want to sell through and review its terms.
  3. 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:

  1. Go to the Agentic Commerce page, then click View feed .
  2. 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:

See also

Last verified 2026-09-24

Is this helpful?