Storefronts

Read the store's storefronts and manage their page titles, share image, status, password protection and languages, and clear the storefront cache, through the Store API.

A storefront is a shopper-facing site of the store with its own domains, mode and languages. urls lists its active, HTTPS-ready public domain names, primary first, including the permanent mytringify address on the primary storefront. The included address cannot be renamed. public_contact_email is the store’s explicitly public contact email, or empty when unset; it never substitutes private login, sender or reply-to data. Reads require read_storefront; changes require write_storefront. Each change runs the same checks as Store Admin and is recorded in the store's activity log.

The title pattern (title_template) formats generated page titles from the tokens in tokens. A title saved on a page, a translation or a country row is final and never formatted, and the home page's generated title is the store name. A non-empty pattern replaces the automatic store-name suffix: add_store_name_to_page_titles appends – and the store name only while no pattern is set. The same rule applies to every page type, content pages and policies included. The store-name suffix and the share image (the picture shown when a page is shared on social networks and in messaging apps, used when a page has no image of its own) apply to every storefront in the store. Assigning a share image also requires read_site_assets. Set a different pattern or share image for one language, or one language in one country, with SEO overrides; manage the home, shop and search pages' own SEO with Home, Shop and Search page SEO.

A storefront's status (mode) is live, maintenance or coming_soon, and you can change it here as in Store Admin. Taking a live storefront offline needs confirmation: the first request returns CONFIRMATION_REQUIRED with warnings and a single-use token for that storefront and status, and you repeat it with confirmed: true and the token after the merchant approves. Going live is refused until the store is ready; go_live in Get a storefront lists what blocks it. If someone else changed the status after you read it, the change returns STOREFRONT_MODE_CONFLICT.

A password-protected storefront asks every visitor for its password. A new password needs at least 8 characters (password_min_length in Storefront limits) and at most 72 UTF-8 bytes (password_max_bytes); a shorter one returns STOREFRONT_PASSWORD_TOO_SHORT, and a password set before this minimum keeps working until it is changed. Setting a password takes effect at once, with no confirmation, so a live storefront is hidden from shoppers immediately. Links that carry their own authorisation keep working without the password: the checkout return after a payment, /pay/ payment links, order confirmation and order status pages, newsletter confirmation and unsubscribe links, text opt-out and privacy requests. Connected product feeds stay public while a password is on. Development and transfer stores always stay protected; password_locked says so. Mode and password are independent.

Clearing the storefront cache rebuilds the pages of every storefront in the store on their next visit. It is allowed once every 12 hours per store, whoever cleared it last; cache in Get a storefront says when it can be cleared again, and an earlier attempt returns STOREFRONT_CACHE_CLEAR_TOO_SOON (HTTP 429).

A storefront publishes a set of the store's enabled languages, always including its primary language. Enable a language for the store first with Languages. The primary storefront's language always follows the store's default language. Country assignments determine which languages shoppers can select; without one, only the primary language is served. The country mapping, bulk/all-country and localization prompt endpoints below complete setup through this API. Unpublishing and default changes return a country-by-country impact for confirmation; unpublishing retains translations.

Endpoints#

Storefront limits

GET read_storefront

Get live storefront limits.

Returns the storefront limits Store Admin uses, including password_min_length (the shortest new storefront password, in characters) and password_max_bytes (the longest storefront password, in UTF-8 bytes) and the storefront modes. custom_pixels gives the custom pixel limits: at most max_per_storefront per storefront (disabled ones included), a name of 1 to name_max_length characters (at most 100) and code of at most code_max_length characters (at most 65536), both in Unicode code points, and the allowed consent_categories. Manage custom pixels with List custom pixels and Create a custom pixel.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

List storefronts

GET read_storefront

List the store's storefronts.

Returns every storefront with its mode, password protection, domains and primary_url (empty until a primary domain is active). Read a storefront's languages with Get storefront languages. urls is an array of active, HTTPS-ready public domain names, primary first, including the permanent mytringify address on the primary storefront. No schemes or paths are included. public_contact_email is the store’s explicitly public contact email, or empty when unset; it never falls back to a private login, sender or reply-to address. Both fields require read_storefront. Refresh urls on domains/create, domains/update and domains/delete; those events also include default_country, default_locale, retired_country, retired_locale, public_ready and address_revision. Read Country URLs for complete canonical addresses and diagnostics. The mytringify subdomain cannot be renamed.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

Get a storefront

GET read_storefront

Get one storefront and its page-title settings.

Adds the store's add_store_name_to_page_titles and share image to the storefront. Next to storefront (not inside it), data carries go_live: whether the store can go live (ready) and, if not, the blockers to fix first, each with its code, its message in the request language, the record to fix (target, a kind and id) and, for an incomplete primary-location address, missing_fields: each blank field as field (line1, city, postal_code or country) and its label in the request language (a location in India names its postal code "PIN code"); and cache: when the storefront cache was last cleared (last_cleared_at, null if never), when it can be cleared again (next_available_at, null if never cleared), whether it can be cleared now (can_clear, the server's verdict) and the wait between clears in hours (cooldown_hours); and mode_options: the three modes in order, each value with its label and description in the request language (English by default; live says so when a password protects the storefront), and for the offline modes offline_notice, what shoppers see once a live storefront is switched to it. Times are RFC 3339 in the store's timezone with its offset. urls is an array of active, HTTPS-ready public domain names, primary first, including the permanent mytringify address on the primary storefront. No schemes or paths are included. public_contact_email is the store’s explicitly public contact email, or empty when unset; it never falls back to a private login, sender or reply-to address. Both fields require read_storefront. Refresh urls on domains/create, domains/update and domains/delete; those events also include default_country, default_locale, retired_country, retired_locale, public_ready and address_revision. Read Country URLs for complete canonical addresses and diagnostics. The mytringify subdomain cannot be renamed.

Path parameters

Name Type Description
storefrontId required uuid

Storefront id from List storefronts.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

Change storefront status

PUT write_storefront

Set a storefront live, in maintenance or coming soon.

mode is live, maintenance or coming_soon; the current one is mode in Get a storefront. Maintenance and coming soon take the storefront offline at once: shoppers see the maintenance or coming-soon page instead of the store. Taking a live storefront offline needs confirmation. The first request returns HTTP 409 CONFIRMATION_REQUIRED with error.details: warnings (English), confirmation_token, action, current_mode and target_mode. Show the change to the merchant and, after approval, repeat the same mode with confirmed: true and that confirmation_token. The token is single use, valid for five minutes and good only for this storefront and this target mode; a request that fails does not use it up. Switching to live, or between maintenance and coming soon, needs no confirmation. Going live is refused with STOREFRONT_NOT_READY_TO_GO_LIVE until the store is ready: error.details.blockers lists what to fix, the same list as go_live in Get a storefront. Sending the current mode changes nothing. If the status changed after you read it, the request returns STOREFRONT_MODE_CONFLICT: read the storefront again and decide anew. Password protection is separate and stays as it is. The response has the same shape as Get a storefront (storefront, go_live, cache, mode_options). A change sends storefronts/update.

Path parameters

Name Type Description
storefrontId required uuid

Storefront id from List storefronts.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
mode required string

New status: live, maintenance or coming_soon.

Example: maintenance
confirmed boolean

Set true only when repeating the request after CONFIRMATION_REQUIRED.

Example: true
confirmation_token string

Single-use token from the CONFIRMATION_REQUIRED response. Omit it on the first request.

Example: CONFIRMATION_TOKEN_FROM_FIRST_RESPONSE

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

  • 400 STORE_API_INVALID_REQUEST_BODY

    The body has an unknown field, mode is missing, or a field has the wrong type.

  • 400 STOREFRONT_MODE_INVALID

    mode is not live, maintenance or coming_soon.

  • 409 CONFIRMATION_REQUIRED

    Taking a live storefront offline needs confirmation. error.details carries warnings, confirmation_token, action, current_mode and target_mode; after approval, repeat the same mode with confirmed: true and the token.

  • 400 STOREFRONT_CONFIRMATION_INVALID

    The confirmation token is missing, expired, already used, or was issued for another storefront or mode. Send the request again without it to get a new one.

  • 400 STOREFRONT_NOT_READY_TO_GO_LIVE

    The store is not ready to go live. error.details.blockers lists what to fix, the same blockers as go_live in Get a storefront: each with its code, message, target and, for an incomplete primary-location address, missing_fields (each blank field's field and label).

  • 404 LOCATION_NOT_FOUND

    Going live needs the store's primary location, and it was not found.

  • 409 STOREFRONT_MODE_CONFLICT

    The status was changed by someone else after it was read. Read the storefront again before deciding whether to change it.

  • 400 STORE_API_BODY_PROPERTY_UNKNOWN

    The body has a property this request does not accept. The message and error.details.properties list the allowed and required properties (nested for each object or list of objects).

  • 400 STORE_API_BODY_PROPERTY_INVALID

    A body property has the wrong type (error.details.expected_type). The message and error.details.properties list the allowed and required properties.

Update page titles and share image

PUT write_storefront

Set the page-title template, the store-name suffix and the share image.

These are the defaults for pages that have no title or image of their own. title_template is required: send the complete template, or an empty string for no pattern. It may use only the tokens returned in tokens ({{ page_title }} and {{ shop_name }}), every {{ needs its }}, and it is at most 200 characters (Unicode code points). The pattern formats generated titles only: a title saved on a page, translation or country row is final, and the home page's generated title is the store name. A non-empty pattern replaces the automatic store-name suffix, so add_store_name_to_page_titles has no effect while one is set; without a pattern, the store name is appended to generated titles when it is on. Omit add_store_name_to_page_titles or share_image_id to keep them. share_image_id takes a site asset image id; an empty string or null removes the image, and assigning an image also requires read_site_assets. The store-name suffix and share image apply to every storefront in the store. This pattern and share image are the base for every language and country; set a different pattern or image for one language, or one language in one country, with Set an SEO override. The response includes preview for the saved settings in the storefront primary language. Each preview.samples item has kind, page_name, title and description; description is the computed plain-text meta description, with HTML removed, entities decoded and whitespace collapsed before limiting it to 160 Unicode code points (including the closing ellipsis when shortened). The samples are a generated example product, Shop and Home.

Path parameters

Name Type Description
storefrontId required uuid

Storefront id from List storefronts.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
title_template required string

Pattern for generated page titles. An empty string sets no pattern.

Example: {{ page_title }} | {{ shop_name }}
add_store_name_to_page_titles boolean

Append the store name to generated page titles. Has no effect while a pattern is set.

Example: true
share_image_id string|null

Site asset image shown when a page is shared. Empty or null removes it.

Example: 5b0f8f43-2f47-4c34-9a0f-0b7d3a3f8f21

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call. Assigning a share image also requires read_site_assets.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID. share_image_id is not a site asset image.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

  • 400 STORE_API_INVALID_REQUEST_BODY

    The body has an unknown field, a field has the wrong type, or title_template is missing.

  • 400 SEO_TITLE_TEMPLATE_UNBALANCED

    title_template has an unmatched {{ or }}.

  • 400 SEO_TITLE_TEMPLATE_UNKNOWN_TOKEN

    title_template uses a placeholder other than page_title and shop_name.

  • 400 SEO_TITLE_TEMPLATE_TOO_LONG

    title_template is longer than 200 characters (Unicode code points).

  • 400 STORE_API_BODY_PROPERTY_UNKNOWN

    The body has a property this request does not accept. The message and error.details.properties list the allowed and required properties (nested for each object or list of objects).

  • 400 STORE_API_BODY_PROPERTY_INVALID

    A body property has the wrong type (error.details.expected_type). The message and error.details.properties list the allowed and required properties.

Set storefront password

PUT write_storefront

Turn password protection on, change the password, or turn it off.

Takes effect at once, with no confirmation step. Send a non-empty password to protect the storefront with it: from then on every visitor must enter it, so a live storefront is hidden from shoppers immediately, and visitors who unlocked it with an earlier password must enter the new one. Send an empty string or null to remove protection and make the storefront public again. Leading and trailing spaces are removed; a password made only of spaces is rejected with INVALID_INPUT. A new password needs at least password_min_length (8) characters, counted as Unicode characters after removing those spaces; a shorter one is rejected with STOREFRONT_PASSWORD_TOO_SHORT. A password set before this minimum keeps working until it is changed. Sending the password already set, or removing protection that is not on, changes nothing. Development and transfer stores always stay password protected (password_locked). Password protection and the storefront's mode are separate; change the mode with Change storefront status. The password is never returned. The response has the same shape as Get a storefront (storefront with password_protected, go_live, cache, mode_options). A change sends storefronts/update.

Path parameters

Name Type Description
storefrontId required uuid

Storefront id from List storefronts.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
password required string|null

New storefront password, at least 8 characters and at most 72 UTF-8 bytes, or an empty string or null to remove protection. Only spaces is rejected.

Example: open-sesame-2026

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID. The password is longer than password_max_bytes (details.max_bytes), or it is made only of spaces (details.field is password).

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

  • 400 STORE_API_INVALID_REQUEST_BODY

    The body has an unknown field, password is missing, or it is not a string or null.

  • 400 STOREFRONT_PASSWORD_TOO_SHORT

    The new password is shorter than password_min_length (8) characters. details.field is password and details.min_length is the minimum.

  • 403 STOREFRONT_PASSWORD_LOCKED_BY_STORE_TYPE

    Development and transfer stores cannot turn password protection off.

  • 400 STORE_API_BODY_PROPERTY_UNKNOWN

    The body has a property this request does not accept. The message and error.details.properties list the allowed and required properties (nested for each object or list of objects).

  • 400 STORE_API_BODY_PROPERTY_INVALID

    A body property has the wrong type (error.details.expected_type). The message and error.details.properties list the allowed and required properties.

Get storefront languages

GET read_storefront

Get the languages a storefront publishes.

Returns the storefront's primary_locale, the locales it publishes, the enabled store languages it can publish (available_locales) and its country language rules (country_locales). Adding a language to this set does not make it selectable by shoppers: use Set storefront country languages to assign it to active-market countries and choose each default. Without an explicit country assignment only storefront primary is served.

Path parameters

Name Type Description
storefrontId required uuid

Storefront id from List storefronts.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

Set storefront languages

PUT write_storefront

Replace the languages a storefront publishes.

Send the complete list. It must include the storefront's primary language, and every code must be a language enabled for the store (enable it first with Set languages). Codes are matched without regard to case; blanks and repeats are ignored. An unchanged list changes nothing. A change publishes storefront/locales/update. Adding a language to this set does not make it selectable by shoppers: use Set storefront country languages to assign it to active-market countries and choose each default. Without an explicit country assignment only storefront primary is served. Merchant connections also need the online_store.storefronts:write staff permission. Changes return HTTP 409 CONFIRMATION_REQUIRED before committing. Show error.details.warnings and impact, including every country's previous/resulting language codes, default_locale and inherits_primary. language_labels supplies localized display names once per storefront; retired_address_units counts removed country/language pairs and urls.translated_slugs counts affected translated resource slugs. Repeat the identical request only after merchant approval with confirmed=true and confirmation_token. The five-minute single-use token is bound to the reviewed outcome; changed state requires a fresh preview. Success code/message and country/language labels are backend-owned and English on the Store API and localized to the merchant interface language on Admin and MCP. Unpublishing retains translations. Removed-language links resolve the original resource before redirecting to its current exact-language slug in the same served country; invalid countries and deleted resources return 404. A translated slug later taken by another resource belongs to that resource. Query strings are preserved.

Path parameters

Name Type Description
storefrontId required uuid

Storefront id from List storefronts.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
locales required array<string>

Every language code the storefront publishes, including its primary language.

Example: ["en","de"]
confirmed boolean

True only after reviewing the returned impact and obtaining approval.

Example: true
confirmation_token string

Single-use token from the first request's error.details.

Example: CONFIRMATION_TOKEN

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

  • 400 STORE_API_INVALID_REQUEST_BODY

    The body has an unknown field or a field has the wrong type.

  • 400 STOREFRONT_LANGUAGE_REQUIRED

    The language list is empty.

  • 400 STORE_LANGUAGE_INVALID

    A code is not a supported language.

  • 400 STOREFRONT_LANGUAGE_NOT_ENABLED

    A language is not enabled for the store.

  • 400 STOREFRONT_PRIMARY_LANGUAGE_REQUIRED

    The list leaves out the storefront's primary language.

  • 409 STOREFRONT_LANGUAGES_CHANGED

    The store's languages changed during the save. Read them again and retry.

  • 400 STORE_API_BODY_PROPERTY_UNKNOWN

    The body has a property this request does not accept. The message and error.details.properties list the allowed and required properties (nested for each object or list of objects).

  • 400 STORE_API_BODY_PROPERTY_INVALID

    A body property has the wrong type (error.details.expected_type). The message and error.details.properties list the allowed and required properties.

Set storefront primary language

PUT write_storefront

Change a secondary storefront's primary language.

The primary storefront's language always follows the store's default language; change that with Set default language. The language must be enabled for the store. Selecting the current primary language changes nothing. Merchant connections also need the online_store.storefronts:write staff permission. Changes return HTTP 409 CONFIRMATION_REQUIRED before committing. Show error.details.warnings and impact, including every country's previous/resulting language codes, default_locale and inherits_primary. language_labels supplies localized display names once per storefront; retired_address_units counts removed country/language pairs and urls.translated_slugs counts affected translated resource slugs. Repeat the identical request only after merchant approval with confirmed=true and confirmation_token. The five-minute single-use token is bound to the reviewed outcome; changed state requires a fresh preview. Success code/message and country/language labels are backend-owned and English on the Store API and localized to the merchant interface language on Admin and MCP. Unpublishing retains translations. Removed-language links resolve the original resource before redirecting to its current exact-language slug in the same served country; invalid countries and deleted resources return 404. A translated slug later taken by another resource belongs to that resource. Query strings are preserved.

Path parameters

Name Type Description
storefrontId required uuid

Storefront id from List storefronts.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
locale required string

Language code enabled for the store.

Example: de
confirmed boolean

True only after reviewing the returned impact and obtaining approval.

Example: true
confirmation_token string

Single-use token from the first request's error.details.

Example: CONFIRMATION_TOKEN

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

  • 400 STORE_API_INVALID_REQUEST_BODY

    The body has an unknown field or a field has the wrong type.

  • 400 STOREFRONT_LANGUAGE_REQUIRED

    The language list is empty.

  • 400 STORE_LANGUAGE_INVALID

    A code is not a supported language.

  • 400 STOREFRONT_LANGUAGE_NOT_ENABLED

    A language is not enabled for the store.

  • 400 STOREFRONT_PRIMARY_LANGUAGE_REQUIRED

    The list leaves out the storefront's primary language.

  • 409 STOREFRONT_LANGUAGES_CHANGED

    The store's languages changed during the save. Read them again and retry.

  • 400 STOREFRONT_PRIMARY_LANGUAGE_LOCKED

    The storefront is the store's primary storefront.

  • 400 STORE_API_BODY_PROPERTY_UNKNOWN

    The body has a property this request does not accept. The message and error.details.properties list the allowed and required properties (nested for each object or list of objects).

  • 400 STORE_API_BODY_PROPERTY_INVALID

    A body property has the wrong type (error.details.expected_type). The message and error.details.properties list the allowed and required properties.

Clear storefront cache

POST write_storefront

Clear the cached pages of every storefront in the store.

Clears the cache of all the store's storefronts, not just one: each page is built again on its next visit, so the first visits after a clear are slower. Saved changes publish on their own; clear the cache only when shoppers still see outdated pages. The cache can be cleared once every 12 hours per store, whoever cleared it last (Store Admin, the mobile app, an app or this API). Read cache in Get a storefront to see whether it can be cleared now. A clear inside the 12 hours is refused with HTTP 429 STOREFRONT_CACHE_CLEAR_TOO_SOON, a Retry-After header and error.details: last_cleared_at, next_available_at and retry_after_seconds; do not retry before next_available_at. Send no body or an empty object. The response reports last_cleared_at, next_available_at, can_clear and cooldown_hours; times are RFC 3339 in the store's timezone with its offset.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 STORE_API_INVALID_REQUEST_BODY

    The body is not empty and not a JSON object, or it has a field.

  • 429 STOREFRONT_CACHE_CLEAR_TOO_SOON

    The cache was cleared less than 12 hours ago. error.details carries last_cleared_at and next_available_at (RFC 3339 in the store's timezone with its offset) and retry_after_seconds, and the Retry-After header gives the seconds to wait.

List country URLs

GET read_storefront

Read each covered country's public addresses and problems.

Read-only, under read_storefront; apps need no domain or email-settings scopes. Returns one row per country of the storefront's active markets: host (the public host its addresses use; empty when none is available), domain_id (only for a dedicated country domain), currency_code, default_language and default_language_label, language_source (country, or storefront_primary when no language selection is saved for the country), languages (localized labels), mode (shared or dedicated), status (ready or configuration_error), configuration_issues (stable codes), configuration_messages (backend wording for those codes), decisions (backend wording for the row's automatic choices) and addresses (locale, locale_name, url, is_default). A row with configuration issues returns no addresses; a dedicated country whose domain is not connected stays dedicated and is never given shared addresses. address_policy is one backend sentence on what a domain or default-language change does to a country's addresses. address_revision increases whenever any address of the storefront changes: if it changes between page reads, restart at page 1; refresh after storefronts/update and domains/* events. Counts reflect the search; total reflects the selected filter. No DNS records, tokens or connection secrets are returned. Use the returned URLs as they are; do not build addresses in an integration. Address grammar: on the shared host the store's primary country in the storefront's primary language is at the root, another language of that country is /{locale}, and every other country-language pair is /{locale}-{country}; a regional language always names the country, for example /pt-BR-us is Brazilian Portuguese in the US and /pt-br is Portuguese in Brazil. A dedicated country domain serves the country's default language at its root and other languages under /{locale}; changing the country's default language changes the language at that root. An address always selects its own country, whatever the shopper's session or location. Addresses for countries or country-language pairs never served return 404; an address in a language later removed from a country that is still served redirects (301) to the same resource in the language that country now uses, and returns 404 when the resource was deleted or when retained links match more than one resource. Links on a previous country domain that is still connected and assigned redirect to the country's current addresses, keeping the language (when still offered there), path and query.

Path parameters

Name Type Description
storefrontId required uuid

Storefront id.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Query parameters

Name Type Description
page integer

One-based country page; default 1.

per_page integer

Country rows per page; default 25, capped by the live domain list limit.

search string

Country or language code, localized/English/native language name, currency or assigned hostname.

filter string

all, shared, dedicated or errors.

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID, or page/per_page is not a positive integer.

  • 400 DOMAIN_STOREFRONT_INVALID

    No storefront with this id belongs to the store.

  • 400 DOMAIN_COUNTRY_URL_FILTER_INVALID

    filter is not all, shared, dedicated or errors.

  • 400 DOMAIN_SEARCH_TOO_LONG

    The search exceeds the live maximum.

List storefront country languages

GET read_storefront

Read shopper language publication by country.

Active Markets supply countries; each storefront owns its allowed languages and one default. A country without an explicit assignment serves only the storefront primary language. Enabling a store language and adding it to the storefront are prerequisites, not complete shopper publication. address_policy is one backend sentence on what a country default-language (or domain) change does to its addresses; show it before such a change.

Path parameters

Name Type Description
storefrontId required uuid

Storefront to configure.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Query parameters

Name Type Description
page integer

Page number starting at 1.

Example: 1
per_page integer

Page size, bounded by backend limits.

Example: 25
search string

Country search.

Example: France
filter string

all, assigned or unassigned.

Example: all

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

Set storefront country languages

PUT write_storefront

Replace selected countries' allowed languages and defaults.

mappings maps uppercase country codes to {locales:[...],default_locale:...}. Send null for a country to remove its override and serve only storefront primary. Countries omitted from mappings are unchanged. Languages must already belong to this storefront. Writes are set-wise and atomic; a change publishes storefront/locales/update. Changes return HTTP 409 CONFIRMATION_REQUIRED before committing. Show error.details.warnings and impact, including every country's previous/resulting language codes, default_locale and inherits_primary. language_labels supplies localized display names once per storefront; retired_address_units counts removed country/language pairs and urls.translated_slugs counts affected translated resource slugs. Repeat the identical request only after merchant approval with confirmed=true and confirmation_token. The five-minute single-use token is bound to the reviewed outcome; changed state requires a fresh preview. Success code/message and country/language labels are backend-owned and English on the Store API and localized to the merchant interface language on Admin and MCP. Unpublishing retains translations. Removed-language links resolve the original resource before redirecting to its current exact-language slug in the same served country; invalid countries and deleted resources return 404. A translated slug later taken by another resource belongs to that resource. Query strings are preserved. Merchant connections also need the online_store.storefronts:write staff permission.

Path parameters

Name Type Description
storefrontId required uuid

Storefront to configure.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
mappings required object

Country code to language set with one explicit default; null removes the assignment.

Example: {"FR":{"locales":["en","fr"],"default_locale":"fr"}}
confirmed boolean

True only after reviewing the returned impact and obtaining approval.

Example: true
confirmation_token string

Single-use token from the first request's error.details.

Example: CONFIRMATION_TOKEN

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

  • 400 STORE_API_INVALID_REQUEST_BODY

    The body has an unknown field or a field has the wrong type.

  • 400 STOREFRONT_LANGUAGE_REQUIRED

    The language list is empty.

  • 400 STORE_LANGUAGE_INVALID

    A code is not a supported language.

  • 400 STOREFRONT_LANGUAGE_NOT_ENABLED

    A language is not enabled for the store.

  • 400 STOREFRONT_PRIMARY_LANGUAGE_REQUIRED

    The list leaves out the storefront's primary language.

  • 409 STOREFRONT_LANGUAGES_CHANGED

    The store's languages changed during the save. Read them again and retry.

  • 409 CONFIRMATION_REQUIRED

    Review error.details.impact and warnings before repeating with the token.

  • 400 STORE_LANGUAGE_CONFIRMATION_INVALID

    Preview expired or changed. Request a fresh preview.

  • 400 STOREFRONT_COUNTRY_NOT_SERVED

    Country is not in an active Market.

  • 400 STOREFRONT_COUNTRY_MAPPINGS_INVALID

    Each country needs a nonempty served-language set with exactly one selected default, or null to inherit primary.

  • 400 STOREFRONT_LANGUAGE_NOT_SERVED

    Add the language to the storefront first.

  • 400 STORE_API_BODY_PROPERTY_UNKNOWN

    The body has a property this request does not accept. The message and error.details.properties list the allowed and required properties (nested for each object or list of objects).

  • 400 STORE_API_BODY_PROPERTY_INVALID

    A body property has the wrong type (error.details.expected_type). The message and error.details.properties list the allowed and required properties.

Assign country default language

POST write_storefront

Add a served language and make it default in selected countries.

Other allowed languages remain available; country_codes must belong to active Markets. Returns updated country count. Publishes storefront/locales/update. Changes return HTTP 409 CONFIRMATION_REQUIRED before committing. Show error.details.warnings and impact, including every country's previous/resulting language codes, default_locale and inherits_primary. language_labels supplies localized display names once per storefront; retired_address_units counts removed country/language pairs and urls.translated_slugs counts affected translated resource slugs. Repeat the identical request only after merchant approval with confirmed=true and confirmation_token. The five-minute single-use token is bound to the reviewed outcome; changed state requires a fresh preview. Success code/message and country/language labels are backend-owned and English on the Store API and localized to the merchant interface language on Admin and MCP. Unpublishing retains translations. Removed-language links resolve the original resource before redirecting to its current exact-language slug in the same served country; invalid countries and deleted resources return 404. A translated slug later taken by another resource belongs to that resource. Query strings are preserved. Merchant connections also need the online_store.storefronts:write staff permission.

Path parameters

Name Type Description
storefrontId required uuid

Storefront to configure.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
country_codes required array<string>

Countries to change.

Example: ["FR","BE"]
locale required string

Served language to add and make default.

Example: fr
confirmed boolean

True only after reviewing the returned impact and obtaining approval.

Example: true
confirmation_token string

Single-use token from the first request's error.details.

Example: CONFIRMATION_TOKEN

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

  • 400 STORE_API_INVALID_REQUEST_BODY

    The body has an unknown field or a field has the wrong type.

  • 400 STOREFRONT_LANGUAGE_REQUIRED

    The language list is empty.

  • 400 STORE_LANGUAGE_INVALID

    A code is not a supported language.

  • 400 STOREFRONT_LANGUAGE_NOT_ENABLED

    A language is not enabled for the store.

  • 400 STOREFRONT_PRIMARY_LANGUAGE_REQUIRED

    The list leaves out the storefront's primary language.

  • 409 STOREFRONT_LANGUAGES_CHANGED

    The store's languages changed during the save. Read them again and retry.

  • 409 CONFIRMATION_REQUIRED

    Review error.details.impact and warnings before repeating with the token.

  • 400 STORE_LANGUAGE_CONFIRMATION_INVALID

    Preview expired or changed. Request a fresh preview.

  • 400 STOREFRONT_COUNTRY_NOT_SERVED

    Country is not in an active Market.

  • 400 STOREFRONT_COUNTRY_MAPPINGS_INVALID

    Each country needs a nonempty served-language set with exactly one selected default, or null to inherit primary.

  • 400 STOREFRONT_LANGUAGE_NOT_SERVED

    Add the language to the storefront first.

  • 400 STORE_API_BODY_PROPERTY_UNKNOWN

    The body has a property this request does not accept. The message and error.details.properties list the allowed and required properties (nested for each object or list of objects).

  • 400 STORE_API_BODY_PROPERTY_INVALID

    A body property has the wrong type (error.details.expected_type). The message and error.details.properties list the allowed and required properties.

Assign all country default languages

POST write_storefront

Add a served language and make it default in every active-market country.

The backend resolves current coverage and shows it for approval. Other allowed languages remain available. Returns updated country count. Publishes storefront/locales/update. Changes return HTTP 409 CONFIRMATION_REQUIRED before committing. Show error.details.warnings and impact, including every country's previous/resulting language codes, default_locale and inherits_primary. language_labels supplies localized display names once per storefront; retired_address_units counts removed country/language pairs and urls.translated_slugs counts affected translated resource slugs. Repeat the identical request only after merchant approval with confirmed=true and confirmation_token. The five-minute single-use token is bound to the reviewed outcome; changed state requires a fresh preview. Success code/message and country/language labels are backend-owned and English on the Store API and localized to the merchant interface language on Admin and MCP. Unpublishing retains translations. Removed-language links resolve the original resource before redirecting to its current exact-language slug in the same served country; invalid countries and deleted resources return 404. A translated slug later taken by another resource belongs to that resource. Query strings are preserved. Merchant connections also need the online_store.storefronts:write staff permission.

Path parameters

Name Type Description
storefrontId required uuid

Storefront to configure.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
locale required string

Served language to add and make default everywhere.

Example: fr
confirmed boolean

True only after reviewing the returned impact and obtaining approval.

Example: true
confirmation_token string

Single-use token from the first request's error.details.

Example: CONFIRMATION_TOKEN

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

  • 400 STORE_API_INVALID_REQUEST_BODY

    The body has an unknown field or a field has the wrong type.

  • 400 STOREFRONT_LANGUAGE_REQUIRED

    The language list is empty.

  • 400 STORE_LANGUAGE_INVALID

    A code is not a supported language.

  • 400 STOREFRONT_LANGUAGE_NOT_ENABLED

    A language is not enabled for the store.

  • 400 STOREFRONT_PRIMARY_LANGUAGE_REQUIRED

    The list leaves out the storefront's primary language.

  • 409 STOREFRONT_LANGUAGES_CHANGED

    The store's languages changed during the save. Read them again and retry.

  • 409 CONFIRMATION_REQUIRED

    Review error.details.impact and warnings before repeating with the token.

  • 400 STORE_LANGUAGE_CONFIRMATION_INVALID

    Preview expired or changed. Request a fresh preview.

  • 400 STOREFRONT_COUNTRY_NOT_SERVED

    Country is not in an active Market.

  • 400 STOREFRONT_COUNTRY_MAPPINGS_INVALID

    Each country needs a nonempty served-language set with exactly one selected default, or null to inherit primary.

  • 400 STOREFRONT_LANGUAGE_NOT_SERVED

    Add the language to the storefront first.

  • 400 STORE_API_BODY_PROPERTY_UNKNOWN

    The body has a property this request does not accept. The message and error.details.properties list the allowed and required properties (nested for each object or list of objects).

  • 400 STORE_API_BODY_PROPERTY_INVALID

    A body property has the wrong type (error.details.expected_type). The message and error.details.properties list the allowed and required properties.

Get localization prompt

GET read_storefront

Read country and language suggestion settings.

Suggestions do not override an explicit country/language URL. Manual switching uses currently served country languages.

Path parameters

Name Type Description
storefrontId required uuid

Storefront to configure.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

Set localization prompt

PUT write_storefront

Choose country suggestions, manual selector only, or off.

Send the complete settings. mode is off, suggest_country or manual_selector_only; dismissal_days must be within limits.dismissal_days_min and limits.dismissal_days_max from the read. This does not enable languages, assign countries or redirect shoppers automatically. Returns localized backend success wording. Merchant connections also need the online_store.storefronts:write staff permission.

Path parameters

Name Type Description
storefrontId required uuid

Storefront to configure.

Example: 0b7c2f0e-6a43-4f7e-9d1c-3f2a8e5b9c41

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
mode required string

off, suggest_country, manual_selector_only.

Example: suggest_country
dismissal_days required integer

Days to remember a dismissed suggestion, within the returned limits.

Example: 30

Errors

  • 401 UNAUTHORIZED

    Authorization header missing, malformed, or token invalid/expired.

  • 402 SUBSCRIPTION_REQUIRED

    The store does not have an active or trialing subscription.

  • 403 STORE_API_SCOPE_REQUIRED

    Token is valid but lacks the required scope for this call.

  • 429 RATE_LIMITED

    The token's request allowance is exhausted. Retry after the Retry-After header.

  • 400 INVALID_INPUT

    The storefront id is not a UUID. Invalid mode.

  • 404 STOREFRONT_NOT_FOUND

    No storefront with this id belongs to the store.

  • 400 STOREFRONT_PROMPT_DISMISSAL_DAYS_INVALID

    dismissal_days is outside the returned limits.

  • 400 STORE_API_BODY_PROPERTY_UNKNOWN

    The body has a property this request does not accept. The message and error.details.properties list the allowed and required properties (nested for each object or list of objects).

  • 400 STORE_API_BODY_PROPERTY_INVALID

    A body property has the wrong type (error.details.expected_type). The message and error.details.properties list the allowed and required properties.

Webhook events#

Subscribe to storefronts/update when an integration mirrors storefront settings: page titles, the share image, status (mode) and password protection send it, as do domain and market changes made elsewhere. Clearing the storefront cache sends no event. Subscribe to storefront/locales/update for the languages a storefront publishes; it carries the complete language set and every country's language choice. Both are sent after the change commits.

Storefront updated

EVENT storefronts/update App scope: read_storefront Staff permission: online_store.preferences:write

Fired when storefront configuration changes, including catalog assignment, market assignment, domain assignment, primary-domain changes, domain locale or country pins, mode, password protection, maintenance settings, or coming-soon settings.

Payload fields

Field Type Description
storefront.address_revision integer Selectable in the Payload builder
storefront.id string Always present
storefront.name string Selectable in the Payload builder
storefront.type string Selectable in the Payload builder
storefront.is_primary boolean Selectable in the Payload builder
storefront.mode string Selectable in the Payload builder
storefront.password_protected boolean Selectable in the Payload builder
storefront.created_at string Selectable in the Payload builder
storefront.updated_at string Selectable in the Payload builder
storefront.markets[*].market_id string Selectable in the Payload builder
storefront.markets[*].market_name string Selectable in the Payload builder
storefront.domains[*].domain_id string Selectable in the Payload builder
storefront.domains[*].domain string Selectable in the Payload builder
storefront.domains[*].is_primary boolean Selectable in the Payload builder
storefront.domains[*].status string Selectable in the Payload builder

Storefront languages updated

EVENT storefront/locales/update App scope: read_storefront Staff permission: online_store.preferences:read

Fired when the languages a storefront serves change, or the languages a country is served in. The payload carries the storefront's complete language set and every country's language choice.

Payload fields

Field Type Description
storefront_id string Always present

The storefront whose languages changed.

locales array Always present

Every language the storefront serves after the change, as BCP 47 locale codes.

default_locale string Always present

The storefront's default language, served where a country has no language choice of its own.

countries[*].country_code string Always present
countries[*].locales array Always present
countries[*].default_locale string Always present
updated_at string Always present

When the languages changed, in the store's time zone with its offset (RFC 3339).

Themes render the coming_soon, password and maintenance surfaces described in Gate pages. The 26 Oct rollout raises the minimum for newly set or changed storefront passwords to 8 characters, retaining the 72-byte maximum; that minimum is pending the companion password-setting change. Unlocking an existing storefront password remains a separate operation. See Gate actions for the storefront HTML routes and their outcomes.

Changes to storefront access settings invalidate the versions checked before stored pages are reused by shoppers and search crawlers. AI crawler copies use eventual version propagation. Saving settings does not publish draft theme content.