Product feeds

Configure, generate, host, and diagnose app-owned product feed units.

Product feed endpoints are available only to an installed sales-channel app token whose release declares a product feed. Start from GET /channel-feed/targets: each target is one country, language and currency the store really sells in, with English names, the country's own currency and whether the store charges it, and the feed unit already serving it. Create one unit per target you need, choose its schedule, and generate it; the platform serves the latest generation at the unit's public_url, https://{store domain}/feeds/{unit id}.xml, which channels fetch and revalidate by ETag. Field mappings let merchants choose where each feed field comes from within the release's reviewed sources. Generation jobs report how many items were sent or left out, and diagnostics explain each omission. To keep a channel current between generations, push products as they change: render them with GET /channel-feed/units/{unitId}/items, which returns exactly what the feed holds, when product, stock or publication webhooks arrive. Converted prices also move with exchange rates: after currencies/rates_updated or currencies/update, ask GET /channel-feed/units/{unitId}/price-changes which products changed since the rate and rounding rule you last priced with, then render those.

Endpoints#

Get channel feed contract

GET read_products

Read the installed release's product-feed mappings.

Returns the immutable field schema and defaults, the installation's sparse merchant overrides, and the resulting effective mappings. A field without merchant_mapping is managed by the reviewed app release and cannot be overridden. Product inclusion is controlled only by sales-channel publication.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

Set channel feed mappings

PUT write_products

Replace this installation's merchant mapping overrides.

The body is a complete sparse override document. Omit a field to use its reviewed default. Unknown fields, release-managed fields, disallowed sources, invalid registry references, and metafields outside the current store or owner type are rejected. The mutation and one aggregate audit entry commit atomically.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
mapping_overrides required object

Complete sparse map of editable feed field names to reviewed source mappings. Send an empty object to restore every default.

Example: {"title":{"source":"metafield","config":{"definition_id":"e687a8f3-2c66-4999-b954-32fc9879eb40","owner_type":"product"}}}

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

  • 400 INVALID_INPUT

    The override document, selected metafield, or source configuration is invalid.

  • 400 APP_FEED_SPEC_DEFAULT_MAPPING_FIELD_INVALID

    An override targets an unknown or release-managed field.

  • 400 APP_FEED_SPEC_DEFAULT_MAPPING_SOURCE_INVALID

    The selected source or source configuration is not allowed for that field.

  • 400 CHANNEL_FEED_TARGET_INVALID

    The selected country, language, and currency are not an active storefront target.

  • 400 CHANNEL_FEED_UNIT_INVALID

    The feed format, schedule, catalog context, or unit id is invalid.

  • 404 CHANNEL_FEED_UNIT_MISSING

    The feed data source does not exist for this installation.

  • 409 CHANNEL_FEED_UNIT_EXISTS

    The exact feed data source already exists.

  • 409 CHANNEL_FEED_GENERATION_ACTIVE

    A generation is already queued or running for the feed data source.

List channel feed targets

GET read_products

List exact country, language, currency, domain, and URL tuples this installation may use.

Targets use the storefront's canonical market precedence, resolved country currency, country-specific language coverage, and domain assignment. A country-pinned domain wins for that country; otherwise the primary domain is canonical. Unpinned aliases do not create duplicate targets. Apps must use these tuples exactly and must not construct localized storefront paths. country_name, language_name and currency_name are English display names; show them instead of naming codes yourself. local_currency_code is the country's own currency from Unicode CLDR, and currency_is_local is false when the store's market charges that country in another currency; ad channels such as Google commonly reject those prices, so warn the merchant and link them to Markets. Countries without a legal tender, such as Antarctica, are never targets. home_country marks the store's own country and primary_market the store's main market. Targets are ordered for people: the home country first, then targets in their local currency, then the rest, each by country and language name. unit_id names the feed unit already serving a target; creating a second one is rejected.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

List channel feed units

GET read_products

List this installation's configured feed units.

Each unit has an immutable address tuple. Change a country, language, currency, catalog context, or format by replacing the unit. public_url is https://{domain}/feeds/{unit id}.{format} on the store's own domain; it always serves the unit's latest successful generation (revalidate with its ETag) and returns 404 while the unit is disabled or before it first generates.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

Create channel feed unit

POST write_products

Create one feed generation unit from an eligible target.

The country, locale, and currency must exactly match one current target; the platform stores that target's canonical domain. The format must belong to the reviewed release. Duplicate addresses are rejected, including units without a catalog context.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
country_code required string

Exact target country code.

Example: US
locale required string

Exact target locale.

Example: en
currency_code required string

Exact target currency.

Example: USD
format required string

Product feeds use XML.

Example: xml
schedule required string

manual, hourly, or daily.

Example: daily
catalog_context_id uuid

Optional installed channel catalog context.

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

  • 400 INVALID_INPUT

    The override document, selected metafield, or source configuration is invalid.

  • 400 APP_FEED_SPEC_DEFAULT_MAPPING_FIELD_INVALID

    An override targets an unknown or release-managed field.

  • 400 APP_FEED_SPEC_DEFAULT_MAPPING_SOURCE_INVALID

    The selected source or source configuration is not allowed for that field.

  • 400 CHANNEL_FEED_TARGET_INVALID

    The selected country, language, and currency are not an active storefront target.

  • 400 CHANNEL_FEED_UNIT_INVALID

    The feed format, schedule, catalog context, or unit id is invalid.

  • 404 CHANNEL_FEED_UNIT_MISSING

    The feed data source does not exist for this installation.

  • 409 CHANNEL_FEED_UNIT_EXISTS

    The exact feed data source already exists.

  • 409 CHANNEL_FEED_GENERATION_ACTIVE

    A generation is already queued or running for the feed data source.

Update channel feed unit

PUT write_products

Enable, disable, or reschedule a feed unit.

Address fields are immutable and are not accepted by this endpoint. Disabling a unit removes its public feed file; after it is enabled again, the next generation publishes it.

Path parameters

Name Type Description
unitId required uuid

Feed unit id.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
is_enabled required boolean

Whether generation is enabled.

Example: true
schedule required string

manual, hourly, or daily.

Example: daily

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

  • 400 INVALID_INPUT

    The override document, selected metafield, or source configuration is invalid.

  • 400 APP_FEED_SPEC_DEFAULT_MAPPING_FIELD_INVALID

    An override targets an unknown or release-managed field.

  • 400 APP_FEED_SPEC_DEFAULT_MAPPING_SOURCE_INVALID

    The selected source or source configuration is not allowed for that field.

  • 400 CHANNEL_FEED_TARGET_INVALID

    The selected country, language, and currency are not an active storefront target.

  • 400 CHANNEL_FEED_UNIT_INVALID

    The feed format, schedule, catalog context, or unit id is invalid.

  • 404 CHANNEL_FEED_UNIT_MISSING

    The feed data source does not exist for this installation.

  • 409 CHANNEL_FEED_UNIT_EXISTS

    The exact feed data source already exists.

  • 409 CHANNEL_FEED_GENERATION_ACTIVE

    A generation is already queued or running for the feed data source.

Delete channel feed unit

DELETE write_products

Delete a feed unit and its generation history.

Deletion is installation-scoped, removes the public feed file, and cascades jobs, diagnostics, and artifact records.

Path parameters

Name Type Description
unitId required uuid

Feed unit id.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

  • 400 INVALID_INPUT

    The override document, selected metafield, or source configuration is invalid.

  • 400 APP_FEED_SPEC_DEFAULT_MAPPING_FIELD_INVALID

    An override targets an unknown or release-managed field.

  • 400 APP_FEED_SPEC_DEFAULT_MAPPING_SOURCE_INVALID

    The selected source or source configuration is not allowed for that field.

  • 400 CHANNEL_FEED_TARGET_INVALID

    The selected country, language, and currency are not an active storefront target.

  • 400 CHANNEL_FEED_UNIT_INVALID

    The feed format, schedule, catalog context, or unit id is invalid.

  • 404 CHANNEL_FEED_UNIT_MISSING

    The feed data source does not exist for this installation.

  • 409 CHANNEL_FEED_UNIT_EXISTS

    The exact feed data source already exists.

  • 409 CHANNEL_FEED_GENERATION_ACTIVE

    A generation is already queued or running for the feed data source.

Generate channel feed

POST write_products

Queue one durable generation for an enabled unit.

Only one queued or generating job may exist per unit. Generation uses the exact reviewed mapping, publication version, locale, currency, identity, availability, and canonical URL contracts.

Path parameters

Name Type Description
unitId required uuid

Feed unit id.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

  • 400 INVALID_INPUT

    The override document, selected metafield, or source configuration is invalid.

  • 400 APP_FEED_SPEC_DEFAULT_MAPPING_FIELD_INVALID

    An override targets an unknown or release-managed field.

  • 400 APP_FEED_SPEC_DEFAULT_MAPPING_SOURCE_INVALID

    The selected source or source configuration is not allowed for that field.

  • 400 CHANNEL_FEED_TARGET_INVALID

    The selected country, language, and currency are not an active storefront target.

  • 400 CHANNEL_FEED_UNIT_INVALID

    The feed format, schedule, catalog context, or unit id is invalid.

  • 404 CHANNEL_FEED_UNIT_MISSING

    The feed data source does not exist for this installation.

  • 409 CHANNEL_FEED_UNIT_EXISTS

    The exact feed data source already exists.

  • 409 CHANNEL_FEED_GENERATION_ACTIVE

    A generation is already queued or running for the feed data source.

List channel feed items

GET read_products

Render chosen products for one feed unit, exactly as the unit's feed holds them.

Renders up to 50 products with the same code that generates the unit's feed: the effective mappings, publication version, locale, identity, availability, canonical URL and prices. Prices are what the cart charges for one unit in the unit's currency: the price set in that currency, or the base price converted at the store's current rate and rounded by the currency's rule, with active sales and quantity pricing applied. Use it to send products to a channel one by one as they change instead of fetching the whole feed. items holds one entry per offer, keyed by your release's feed field names. omitted lists offers left out with the same stable codes as generation diagnostics. unpublished_product_ids lists requested products that are not currently published to your channel; remove them from the channel. conversion_rate and rounding_mode are what the prices used; keep them and pass them to the price-changes read later. Nothing is generated or recorded.

Path parameters

Name Type Description
unitId required uuid

Feed unit id.

Query parameters

Name Type Description
product_ids required string

Comma-separated product ids, 1 to 50.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

  • 400 INVALID_INPUT

    The product ids, rate, rounding rule, cursor or limit are invalid.

  • 400 CHANNEL_FEED_UNIT_INVALID

    The unit id is invalid.

  • 404 CHANNEL_FEED_UNIT_MISSING

    The feed unit does not exist for this installation or is disabled.

  • 400 CHANNEL_FEED_TARGET_INVALID

    The unit's country, language and currency are no longer a storefront target.

  • 503 CURRENCY_EXCHANGE_RATE_UNAVAILABLE

    Automatic rates are on and no current market rate exists, so prices in this currency cannot be computed.

List channel feed price changes

GET read_products

List products whose price in a unit changed since a given rate and rounding rule.

Compares, for every product published to your channel, the converted one-unit price at since_rate and since_rounding_mode with the price at the store's current rate and rounding rule, and returns the products where the regular or current price differs. Prices set explicitly in the unit's currency never change with rates and are never listed; a unit in the base currency lists nothing. Pass the conversion_rate and rounding_mode an earlier items or price-changes read returned, then render the listed products with the items read. Call it after currencies/rates_updated or currencies/update. Pages are ordered by product id; pass next_after as after until it is null. The response's conversion_rate and rounding_mode are the current values to keep.

Path parameters

Name Type Description
unitId required uuid

Feed unit id.

Query parameters

Name Type Description
since_rate required string

The rate the channel's prices were last computed at, as a positive decimal.

since_rounding_mode required string

The rounding rule they used: none, up, down, nearest_1, nearest_50, nearest_95 or nearest_99.

after integer

Exclusive product id cursor.

limit integer

1 to 500; default 200.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

  • 400 INVALID_INPUT

    The product ids, rate, rounding rule, cursor or limit are invalid.

  • 400 CHANNEL_FEED_UNIT_INVALID

    The unit id is invalid.

  • 404 CHANNEL_FEED_UNIT_MISSING

    The feed unit does not exist for this installation or is disabled.

  • 400 CHANNEL_FEED_TARGET_INVALID

    The unit's country, language and currency are no longer a storefront target.

  • 503 CURRENCY_EXCHANGE_RATE_UNAVAILABLE

    Automatic rates are on and no current market rate exists, so prices in this currency cannot be computed.

List channel feed jobs

GET read_products

List generation history newest first.

Platform generation state is distinct from provider-side ingestion state.

Query parameters

Name Type Description
limit integer

1 to 200; default 20.

before datetime

Exclusive RFC3339 created-at cursor.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

List channel feed diagnostics

GET read_products

List product-level generation diagnostics for one job.

Diagnostics are stable-code, actionable omissions. Missing required values are never filled from another locale, currency, identity, or field.

Path parameters

Name Type Description
jobId required uuid

Generation job id.

Query parameters

Name Type Description
limit integer

1 to 200; default 50.

after integer

Exclusive diagnostic id cursor.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.

Get channel feed artifact

GET read_products

Get immutable artifact metadata.

A failed generation never replaces a unit's current artifact. ETag and SHA-256 identify exact content. Fetch the current feed through the unit's stable public_url; artifact ids are generation internals and are not public feed addresses.

Path parameters

Name Type Description
artifactId required uuid

Artifact id.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Missing or invalid token.

  • 401 CHANNEL_FEED_APP_TOKEN_REQUIRED

    The caller is not an installed app token.

  • 404 CHANNEL_FEED_INSTALLATION_MISSING

    The app has no ready product-feed sales-channel installation in this store.