Commerce Guide

ChatGPT Product Feed Requirements in 2026: The Fields That Decide Whether You Get Shown

OpenAI's feed specification is public and unusually precise. Most rejected rows come from a handful of rules: a closed availability list, a strict price format, variant identity, and a market default most sellers never notice.

Distk Editorial Oct 2026 12 min read

A ChatGPT product feed needs nine fields on every row: item_id, title, description, url, brand, seller_name, image_url, availability and price. Availability must be one of in_stock, out_of_stock, pre_order, backorder or unknown, and anything else rejects the row. Prices are written as amount plus a three-letter ISO 4217 code, such as 79.99 USD, with no thousands separators. Each variant is its own row sharing a group_id, and OpenAI forbids putting price in an offer ID. Search defaults to on, while Ads and checkout default to off, and the checkout flag alone does not enable checkout. Two gates matter before any of this: feed onboarding is currently limited to approved partners via chatgpt.com/merchants, and the standard upload currently targets the US, with the shared format representing only US, CA and MX until OpenAI confirms another market.

What Does a ChatGPT Product Feed Actually Require in 2026?

A ChatGPT product feed requires nine fields on every row before it is useful for discovery: item_id, title, description, url, brand, seller_name, image_url, availability and price. Everything else is optional for discovery, and Ads and checkout each carry their own separate requirements. OpenAI's specification says plainly that one row is submitted per purchasable item or variant.

Before any of this matters, one gate applies. OpenAI states that onboarding product feeds in ChatGPT is currently available to approved partners, with applications through chatgpt.com/merchants. The field specification is public, so you can prepare a feed today, but you cannot switch it on without acceptance. This guide is the spoke on field-level detail in our guide to the Agentic Commerce Protocol product feed.

The market limit Indian sellers need to read first in 2026

OpenAI's file-upload specification states that the standard OpenAI-format upload currently targets the US, and that row-level market columns do not change that default. The shared format currently represents US, CA and MX, and additional markets apply only after OpenAI confirms the integration and its allowed countries and currencies. A rupee price or an Indian product URL does not select India as a destination market.

What Are the Nine Required Fields in 2026?

The nine required fields are the minimum for a useful discovery feed, and OpenAI's specification is specific about each one. It also asks for a real brand and seller name rather than placeholders, and recommends keeping titles to at most 150 characters and descriptions to at most 5,000, in plain text.

FieldTypeWhat OpenAI requires in 2026
item_idStringStable ID, unique per item or variant within your feed. Never reuse it for a different item.
titleStringProduct name, including the selected variant when relevant.
descriptionStringFactual product description for this item.
urlString (URL)Product detail page, with the variant selected when possible. Keep it stable.
brandStringProduct brand as shown on the product page.
seller_nameStringName of the seller supplying this offer.
image_urlString (URL)Main product image showing this variant, as a direct image URL such as a JPEG or PNG.
availabilityStringin_stock, out_of_stock, pre_order, backorder or unknown. Omitted, empty or unrecognised values reject the row.
priceString (money)Regular item price in major currency units, written as amount CURRENCY.

OpenAI's minimal example is a single JSONL record. It notes that search defaults to enabled and checkout to disabled, and that Ads defaults to disabled unless your feed has an Ads default configured.

{"item_id":"MUG-350-BLUE","title":"Blue ceramic mug, 350 mL","description":"Dishwasher-safe glazed ceramic mug with a handle.","url":"https://example.com/products/mug-blue","brand":"Northline","seller_name":"Northline Home","image_url":"https://example.com/images/mug-blue.jpg","price":"18.00 USD","availability":"in_stock"}

Why Does the Availability Field Reject So Many Rows in 2026?

Because it is the one required field with a closed list and no silent default. The specification states that omitted, empty or unrecognised availability values reject the row, and that unknown must be used explicitly when stock status is unavailable. Many commerce platforms export stock as a number or as a phrase such as "In stock", and either will fail without a mapping step.

Two further rules matter. OpenAI notes that unknown does not assert that the item is in stock, so it is not a safe default for products you actually sell. And pre_order and backorder do not schedule a future stock change: you update availability yourself when the item becomes available or sells out.

How Should Prices Be Formatted in 2026?

Prices are written as a decimal amount in major units, a space, and an uppercase three-letter ISO 4217 code, for example 79.99 USD. The specification spells out that this means 79 dollars and 99 cents, not 7,999 dollars, and forbids thousands separators, exponent notation, and more fractional digits than the currency permits. It also warns against rounding a price into a different payable amount.

One format trap catches teams moving between the two delivery formats: the API product schema expresses money as an integer in ISO 4217 minor units with a separate currency field, while the file-upload format uses the amount CURRENCY string. Do not reuse a formatter across both without converting.

How Do Variants Work in a ChatGPT Feed in 2026?

Each purchasable selection gets its own row with a distinct item_id, the same group_id, listing_has_variations=true, and a variant_dict mapping option names to the selected values. The group ID must differ from every item ID, and each row carries its own price, availability, URL and images. OpenAI is blunt about one rule: never include price in an offer ID.

FieldRequirement in 2026Rule to follow
group_idConditionally required for variantsStable parent-listing ID shared by all variants. If omitted, item_id is used and no variant group exists.
listing_has_variationsConditionally required for variantsSet true on every variant row.
variant_dictConditionally required for variantsOption names to selected values. Ignored unless the two fields above are set correctly.
offer_idOptionalStable and unique within the feed. Never includes price.
gtinOptionalExactly 8, 12, 13 or 14 digits with a valid check digit. Preserve leading zeros. Omit if unassigned.
mpnOptionalSubmit with brand. Do not invent one to replace a missing GTIN.

OpenAI also asks that all three identifiers, item, group and offer, stay stable when price, stock, title or images change. Re-keying products on every export is the quickest way to lose whatever history the platform has built against your items.

Which Optional Fields Are Worth Supplying in 2026?

The optional fields that most change what a shopper sees are the ones describing returns, reviews, condition and dimensions. OpenAI's guidance on optional data is consistent: omit an unknown value rather than inventing one, and never use placeholder strings such as null, unknown or n/a except where unknown is explicitly listed.

FieldWhat it does in 2026Rule that trips people up
conditionnew, refurbished or usedOmitted may be treated as new. Always declare used or refurbished.
accepts_returnsBoolean return acceptanceA policy URL does not set or override it.
return_deadline_in_daysPositive whole number of daysOnly with accepts_returns=true. It is a duration, not a deadline date.
review_count and star_ratingReview aggregates, rating on a 0 to 5 scale to two decimalsSame review population for both. Exclude seller and store reviews.
shipping_priceShipping charge in the same currency as priceOmitted means unknown, not free shipping. Zero means no charge.
dimensionsStructured product dimensionsProduct dimensions, not package dimensions. Units are not inferred.
additional_image_urlsExtra product viewsUse an array in JSONL; never spaces or semicolons as separators.

Some optional fields only work if your integration is configured for them. The specification lists marketplace_seller, size_system, store review fields, accepts_exchanges and is_digital as requiring setup, and notes that adding these columns to a standard upload does not enable them. Confirm support during onboarding before relying on them.

How Are Ads and Checkout Fields Different in 2026?

They are separate layers on top of the discovery feed, each with its own flag, and neither is switched on by the flag alone. Search eligibility defaults to on. Ads defaults to off unless a feed-level default applies. Checkout defaults to off and requires a separately enabled integration.

FlagDefaultWhat OpenAI says about it in 2026
is_eligible_searchTrue when omittedfalse disables search and checkout. Eligibility does not guarantee display.
is_ads_eligibleDisabled unless a feed-level Ads default appliesIndependent of search eligibility. Pair with the ChatGPT Ads setup.
is_eligible_checkoutDisabledOpts in only when search is also true and checkout is enabled for the integration.
seller_privacy_policy, seller_tosNoneConditionally required for checkout. Supplying them does not establish checkout readiness.

For the full checkout implementation behind that flag, see our agentic checkout merchant guide.

Can You Upload a Google Merchant Center Style Feed in 2026?

Yes, but only after OpenAI confirms it for your registered feed, and only within a defined compatibility profile. The specification accepts UTF-8 tab-delimited .txt or .tsv, or comma-delimited .csv, including gzip-compressed versions, with one header row. JSON, spreadsheets, XML, RSS and Atom are not supported on this path, and g:-prefixed XML names must not be used.

The differences from the OpenAI format are small and easy to miss. Availability must use preorder, not pre_order, and unknown is not accepted. A registered merchant display name becomes the seller on every row, so an uploaded seller_name cannot override it. And accepted products on this path have search enabled and checkout disabled, so uploaded opt-out flags do not apply. If you need per-item search controls, OpenAI says to use a feed confirmed to follow the OpenAI format.

What Are the Common Mistakes With Feed Fields in 2026?

Key Takeaways for 2026

Distk helps D2C and e-commerce teams in India and internationally audit catalogue exports against specifications like this one, fix the mapping layer before it rejects rows, and decide whether AI shopping surfaces are worth building for yet. If you are preparing a feed for ChatGPT in 2026, that audit is where we start.

Sources

ChatGPT Product Feed Requirements: FAQs

What fields are required in a ChatGPT product feed in 2026?

Nine fields on every row: item_id, title, description, url, brand, seller_name, image_url, availability and price. Everything else is optional for discovery, while Ads and checkout carry their own separate requirements on top.

Can an Indian store sell to Indian shoppers through a ChatGPT feed?

Not by default. OpenAI's specification states the standard upload currently targets the US and the shared format represents US, CA and MX. Additional markets apply only after OpenAI confirms the integration and its allowed countries and currencies. A rupee price does not select India.

Why are rows in my feed being rejected?

The most common cause is availability. It must be in_stock, out_of_stock, pre_order, backorder or unknown, and omitted, empty or unrecognised values reject the row. Price formatting and missing required fields are the next most likely causes.

How should prices be formatted in a ChatGPT feed?

As a decimal amount in major units, a space, and an uppercase ISO 4217 code, for example 79.99 USD. No thousands separators, no exponent notation, and no more decimals than the currency allows. The API schema instead uses integer minor units with a separate currency field.

How do I list product variants?

One row per purchasable selection, each with a distinct item_id, the same group_id, listing_has_variations set to true, and a variant_dict of the selected options. The group ID must differ from every item ID, and OpenAI says never to put price in an offer ID.

Does setting is_eligible_checkout to true enable checkout?

No. OpenAI states checkout requires a separately enabled integration. The flag opts a product in only when search eligibility is also true and checkout is enabled for the integration.

Fix the mapping layer before it rejects your catalogue

Distk audits catalogue exports against AI shopping feed specifications, fixes the availability, price and variant mapping that causes rejected rows, and tells you honestly whether your market is supported yet.

Start the conversation →