# Share your catalog with agents

Export your catalog feed, keep prices and availability accurate, and offer promotions.

Stripe shares your catalog feed with agents and checks inventory and prices against it. To create and upload your feed, see [Create a catalog feed](https://docs.stripe.com/agentic-commerce/sellers/use-cases/retail/checkout.md#upload-feed). After your feed is live, use this page to export it, keep prices and availability accurate, and offer promotions.

## Export your catalog feed

Use the [Commerce report](https://docs.stripe.com/reports/report-types/commerce.md) to export a snapshot of the catalog feed you imported into Stripe. Use the export to perform bulk edits and re-import your catalog, or to verify your import matches Stripe records and perform programmatic reconciliation.

> Catalog imports can take up to 15 minutes to appear in the export.

#### Dashboard

1. Go to the [Feed history](https://dashboard.stripe.com/agentic-commerce/catalog) page in the Dashboard.
2. Click the overflow menu (⋯) > **Export product feed**.

#### API

### Check data freshness

Retrieve the `catalog_feed.product.1` report type to see when your catalog data was last updated. `catalog_feed.product.1` is the report type ID for agentic commerce product feeds—use it exactly as shown.

```curl
curl https://api.stripe.com/v1/reporting/report_types/catalog_feed.product.1 \
  -u "<<YOUR_SECRET_KEY>>:"
```

The `data_available_end` field in the response indicates the timestamp of the most recently available data:

```json
{
  "id": "catalog_feed.product.1",
  "object": "reporting.report_type",
  "data_available_start": 1687305600,
  "data_available_end": 1695081600
}
```

### Create a report run

Create a report run to export your catalog feed:

```curl
curl https://api.stripe.com/v1/reporting/report_runs \
  -u "<<YOUR_SECRET_KEY>>:" \
  -d "report_type=catalog_feed.product.1"
```

### Poll for completed runs

The run starts with `status: "pending"`. Poll the report run until the `status` is either `succeeded` or `failed`:

```curl
curl https://api.stripe.com/v1/reporting/report_runs/frr_1MrQwrLkdIwHu7ixUov4x2b3 \
  -u "<<YOUR_SECRET_KEY>>:"
```

When the run succeeds, download the CSV using the URL in `result.url`. Because file contents download from a separate host, use curl with your secret key:

```curl
curl https://files.stripe.com/v1/files/{{FILE_ID}}/contents \
  -u <<YOUR_SECRET_KEY>>:
```

## Prevent out-of-stock and price failures 

Keep the rate of checkout attempts that fail because an item is unavailable below 5%. The right approach depends on how quickly your inventory changes, and you can combine approaches.

**More frequent feed refreshes**: For most sellers with relatively stable inventory, keeping your feed current on the [recommended cadence](https://docs.stripe.com/agentic-commerce/sellers/use-cases/retail/checkout.md#upload-feed) is enough to stay within the threshold. Between full uploads, send [incremental inventory](https://docs.stripe.com/agentic-commerce/sellers/use-cases/retail/checkout.md#inventory-updates) and [incremental price](https://docs.stripe.com/agentic-commerce/sellers/use-cases/retail/checkout.md#price-updates) updates.

**Real-time availability check**: Set up the [product price and availability hook](https://docs.stripe.com/agentic-commerce/sellers/use-cases/retail/checkout/hooks.md#product-price-availability). Stripe calls this endpoint immediately before checkout completes to return the current price and confirm that the item is still in stock. It operates independently of your feed refresh frequency and is particularly valuable if:

- Your inventory changes quickly, such as during flash sales or limited drops where items sell out in minutes.
- You sell on multiple channels and a single item can be purchased elsewhere between feed refreshes.

When you enable the hook, Stripe:

- Calls your endpoint on behalf of agents to query product availability.
- Manages request rates so your systems aren’t overwhelmed.
- Proactively calls the hook for items with low inventory so availability data stays current between feed refreshes.

> Your product price and availability hook must respond within 4 seconds. If the hook times out, Stripe falls back to your feed data and continues checkout. This differs from the approval hook behavior, where a timeout causes Stripe to decline the checkout.

## Offer promotions 

Use the promotion feed to upload discount codes, percentage-off deals, fixed-amount discounts, and free shipping offers. You can target promotions to specific products or your entire catalog, set automatic application at checkout, or require a redemption code. The promotion feed references products by `id` or `item_group_id` from your catalog. Stripe ignores promotions that don’t match active product IDs.

To get started, see the [promotion feed specification](https://docs.stripe.com/agentic-commerce/concepts/catalog-feed.md#promotion-feed-spec).
