Brand translations

Translate brand names, slugs, descriptions, and SEO fields through the Store API.

Translate a brand's name, slug, description, seo_title, and seo_description for an enabled non-default locale. GET returns stored translations and omits untranslated fields; hosted brand pages show the base-language value for each omitted field. PUT changes only supplied fields, and an empty string clears a translation. The source field must contain text before it can be translated. is_outdated marks a translation whose source changed, but the stored translation remains in use until updated or cleared. Translated names and slugs must be unique within the locale; a translated slug changes the localized page path.

Get brand translation

GET read_products + read_translations

Fetch one brand translation.

Returns stored translations for one brand and locale. Each returned field includes is_outdated. Fields without a translation in this locale are omitted from the response. An omitted field is not empty: shoppers see the store's base-language value, which the resource's own GET endpoint returns.

Path parameters

Name Type Description
id required integer

Brand id.

Example: 7
locale required string

Enabled non-default store locale.

Example: fr

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 STORE_API_INVALID_BRAND_ID

    Brand ID is invalid.

  • 400 TRANSLATION_LOCALE_NOT_ENABLED

    Locale is not enabled for this store.

  • 400 TRANSLATION_DEFAULT_LOCALE_FORBIDDEN

    Translations cannot target the store's default locale.

  • 400 TRANSLATION_RESOURCE_ID_NOT_IN_STORE

    Brand does not exist in this store.

Set brand translation

PUT write_products + write_translations

Set one brand translation.

Only supplied fields change. Send an empty string to clear a field's translation. Fetch the translation to read saved values and metadata.

Path parameters

Name Type Description
id required integer

Brand ID.

Example: 7
locale required string

Enabled non-default store locale.

Example: fr

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Idempotency-Key string

Optional key for this translation write. Reuse it only with the same payload when repeating the request.

Body parameters

Name Type Description
translations required object

Translated name, slug, description, seo_title, or seo_description values.

Example: {"name": "Acme France", "description": "Acme fabrique du matériel de plein air durable."}

Errors

  • 400 STORE_API_INVALID_BRAND_ID

    Brand id is invalid.

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.

  • 400 TRANSLATION_LOCALE_NOT_ENABLED

    Locale is not enabled for this store.

  • 400 TRANSLATION_DEFAULT_LOCALE_FORBIDDEN

    Translations cannot target the store's default locale.

  • 400 TRANSLATION_FIELDS_REQUIRED

    Each brand must include at least one translated field.

  • 400 TRANSLATION_FIELD_NOT_TRANSLATABLE

    Use only name, slug, description, seo_title, or seo_description.

  • 400 TRANSLATION_TOO_MANY_FIELDS

    The request exceeds the translation field limit.

  • 400 TRANSLATION_STAGING_INVALID_CONTROL_CHARS

    A translated value contains unsupported control characters.

  • 400 TRANSLATION_FIELD_VALUE_TOO_LONG

    A translated value exceeds the overall translation value limit.

  • 400 TRANSLATION_FIELD_EXCEEDS_BYTE_LIMIT

    A translated value exceeds the field's length limit.

  • 400 TRANSLATION_NO_SOURCE_TEXT

    The source field is empty; add source text before translating it.

  • 400 TRANSLATION_RESOURCE_ID_NOT_IN_STORE

    Brand does not exist in this store.

  • 404 TRANSLATION_RESOURCE_NOT_FOUND

    Brand no longer exists in this store.

  • 409 BRAND_DUPLICATE

    Translated name or slug already belongs to another brand.

  • 409 TRANSLATION_DUPLICATE_NAME_OR_SLUG

    Translated name or slug conflicted with another brand during the write.

  • 503 CATALOG_NAMESPACE_BUSY

    Another write is claiming the same names or slugs (for example a large CSV import or a translation save). Nothing was changed; retry after a short delay.

  • 400 BRAND_NAME_INVALID_CHARS

    Translated name contains unsupported control characters.

  • 400 BRAND_NAME_TOO_LONG

    Translated name exceeds the maximum length.

  • 400 BRAND_DESCRIPTION_INVALID_CHARS

    Translated description contains unsupported control characters.

  • 400 BRAND_DESCRIPTION_TOO_LONG

    Translated description exceeds the maximum length.

  • 400 BRAND_SEO_TITLE_INVALID_CHARS

    Translated SEO title contains unsupported control characters.

  • 400 BRAND_SEO_TITLE_TOO_LONG

    Translated SEO title exceeds the maximum length.

  • 400 BRAND_SEO_DESCRIPTION_INVALID_CHARS

    Translated SEO description contains unsupported control characters.

  • 400 BRAND_SEO_DESCRIPTION_TOO_LONG

    Translated SEO description exceeds the maximum length.

  • 400 BRAND_SLUG_INVALID_FORMAT

    Translated slug is not valid for Brand URLs.

  • 400 BRAND_SLUG_TOO_LONG

    Translated slug exceeds the maximum length.

Batch get brand translations

GET read_products + read_translations

Fetch brand translations in batch.

Returns one resources entry per requested brand ID. A brand without stored translations has an empty object. Fields without a translation in this locale are omitted from the response. An omitted field is not empty: shoppers see the store's base-language value, which the resource's own GET endpoint returns.

Path parameters

Name Type Description
locale required string

Enabled non-default store locale.

Example: fr

Query parameters

Name Type Description
ids required string

Comma-separated brand IDs.

Example: 7,11

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 TRANSLATION_LOCALE_NOT_ENABLED

    Locale is not enabled for this store.

  • 400 TRANSLATION_DEFAULT_LOCALE_FORBIDDEN

    Translations cannot target the store's default locale.

  • 400 TRANSLATION_INVALID_RESOURCE_ID

    A brand ID is invalid.

  • 400 TRANSLATION_RESOURCE_ID_NOT_IN_STORE

    A brand does not exist in this store.

  • 400 TRANSLATION_TOO_MANY_RESOURCES

    The request exceeds the translation batch resource limit.

Batch set brand translations

PUT write_products + write_translations

Set brand translations in batch.

Sets translations for multiple brands in one locale. The whole request succeeds or fails together; if any row is invalid, none are saved.

Path parameters

Name Type Description
locale required string

Enabled non-default store locale.

Example: fr

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Idempotency-Key string

Optional key for this translation write. Reuse it only with the same payload when repeating the request.

Body parameters

Name Type Description
translations required array<object>

Rows with id and fields; allowed fields are name, slug, description, seo_title, and seo_description.

Example: [{"id": 7, "fields": {"name": "Acme France"}}]

Errors

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.

  • 400 TRANSLATION_NO_WRITES_PROVIDED

    At least one brand translation row is required.

  • 400 TRANSLATION_INVALID_RESOURCE_ID

    A brand ID is invalid.

  • 400 TRANSLATION_LOCALE_NOT_ENABLED

    Locale is not enabled for this store.

  • 400 TRANSLATION_DEFAULT_LOCALE_FORBIDDEN

    Translations cannot target the store's default locale.

  • 400 TRANSLATION_FIELDS_REQUIRED

    Each brand must include at least one translated field.

  • 400 TRANSLATION_FIELD_NOT_TRANSLATABLE

    Use only name, slug, description, seo_title, or seo_description.

  • 400 TRANSLATION_TOO_MANY_FIELDS

    The request exceeds the translation field limit.

  • 400 TRANSLATION_STAGING_INVALID_CONTROL_CHARS

    A translated value contains unsupported control characters.

  • 400 TRANSLATION_FIELD_VALUE_TOO_LONG

    A translated value exceeds the overall translation value limit.

  • 400 TRANSLATION_FIELD_EXCEEDS_BYTE_LIMIT

    A translated value exceeds the field's length limit.

  • 400 TRANSLATION_NO_SOURCE_TEXT

    The source field is empty; add source text before translating it.

  • 400 TRANSLATION_RESOURCE_ID_NOT_IN_STORE

    Brand does not exist in this store.

  • 404 TRANSLATION_RESOURCE_NOT_FOUND

    Brand no longer exists in this store.

  • 409 BRAND_DUPLICATE

    Translated name or slug already belongs to another brand.

  • 409 TRANSLATION_DUPLICATE_NAME_OR_SLUG

    Translated name or slug conflicted with another brand during the write.

  • 503 CATALOG_NAMESPACE_BUSY

    Another write is claiming the same names or slugs (for example a large CSV import or a translation save). Nothing was changed; retry after a short delay.

  • 400 BRAND_NAME_INVALID_CHARS

    Translated name contains unsupported control characters.

  • 400 BRAND_NAME_TOO_LONG

    Translated name exceeds the maximum length.

  • 400 BRAND_DESCRIPTION_INVALID_CHARS

    Translated description contains unsupported control characters.

  • 400 BRAND_DESCRIPTION_TOO_LONG

    Translated description exceeds the maximum length.

  • 400 BRAND_SEO_TITLE_INVALID_CHARS

    Translated SEO title contains unsupported control characters.

  • 400 BRAND_SEO_TITLE_TOO_LONG

    Translated SEO title exceeds the maximum length.

  • 400 BRAND_SEO_DESCRIPTION_INVALID_CHARS

    Translated SEO description contains unsupported control characters.

  • 400 BRAND_SEO_DESCRIPTION_TOO_LONG

    Translated SEO description exceeds the maximum length.

  • 400 BRAND_SLUG_INVALID_FORMAT

    Translated slug is not valid for Brand URLs.

  • 400 BRAND_SLUG_TOO_LONG

    Translated slug exceeds the maximum length.

Get a brand metafield translation

GET read_products + read_translations

Get one brand metafield translation.

Returns the stored translation for a translatable metafield the token can read, in an enabled non-default language. Fields without a translation in this locale are omitted from the response. An omitted field is not empty: shoppers see the store's base-language value, which the resource's own GET endpoint returns.

Path parameters

Name Type Description
id required integer

Brand id.

Example: 7
namespace required string

Metafield definition namespace.

Example: details
key required string

Metafield definition key.

Example: origin
locale required string

Enabled non-default store locale.

Example: fr

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 STORE_API_INVALID_BRAND_ID

    Brand id is not a positive integer.

  • 400 TRANSLATION_FIELD_NOT_TRANSLATABLE

    The definition is not translatable or its value type cannot be translated.

  • 400 TRANSLATION_LOCALE_REQUIRED

    Locale is missing.

  • 400 TRANSLATION_LOCALE_NOT_ENABLED

    Locale is not enabled for this store.

  • 400 TRANSLATION_DEFAULT_LOCALE_FORBIDDEN

    The default language stores source values and cannot be used as a translation locale.

  • 404 METAFIELD_DEFINITION_NOT_FOUND

    The namespace and key do not identify an accessible Brand definition.

  • 404 BRAND_NOT_FOUND

    Brand does not exist in this store.

Set a brand metafield translation

PUT write_products + write_translations

Set or clear one brand metafield translation.

Sets this metafield's translation in an enabled non-default locale without changing the source value. value is required. Send an empty string to clear it. For list.string, send a JSON-encoded string array with one item per source item, in the same order.

Path parameters

Name Type Description
id required integer

Brand id.

Example: 7
namespace required string

Metafield definition namespace.

Example: details
key required string

Metafield definition key.

Example: origin
locale required string

Enabled non-default store locale.

Example: fr

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Idempotency-Key string

Optional key for this translation write. Reuse it only with the same payload when repeating the request.

Body parameters

Name Type Description
value required string

Translated value. Send an empty string to delete the stored translation for this locale.

Example: Séoul

Errors

  • 400 STORE_API_INVALID_BRAND_ID

    Brand id is not a positive integer.

  • 400 TRANSLATION_FIELD_NOT_TRANSLATABLE

    The definition is not translatable or its value type cannot be translated.

  • 400 TRANSLATION_LOCALE_REQUIRED

    Locale is missing.

  • 400 TRANSLATION_LOCALE_NOT_ENABLED

    Locale is not enabled for this store.

  • 400 TRANSLATION_DEFAULT_LOCALE_FORBIDDEN

    The default language stores source values and cannot be used as a translation locale.

  • 404 METAFIELD_DEFINITION_NOT_FOUND

    The namespace and key do not identify an accessible Brand definition.

  • 404 BRAND_NOT_FOUND

    Brand does not exist in this store.

  • 400 TRANSLATION_LIST_LENGTH_MISMATCH

    The translated list must have the same number of items as the source list.

Webhook events#

Subscribe to these events when your integration mirrors localized brands. Update and clear events identify the locale and changed fields. One write can emit both events when it sets some fields and clears others.

Brand translations updated

EVENT brands/translations/update App scope: read_products Staff permission: products:write

Fired when a brand's translations are added or updated for a locale. Payload carries only the fields that changed. Translation writes do not fire brands/update.

Payload fields

Field Type Description
brand.id integer Always present

The stable Brand id.

brand.name string Selectable in the Payload builder

The merchant-facing Brand name.

brand.slug string Selectable in the Payload builder

The Brand's URL-safe identifier.

brand.description string Selectable in the Payload builder

The Brand description in the store's default locale.

brand.seo_title string Selectable in the Payload builder

The Brand page's SEO title in the store's default locale.

brand.seo_description string Selectable in the Payload builder

The Brand page's SEO description in the store's default locale.

brand.image_id string Selectable in the Payload builder

The assigned Media-library image id, or null when no image is assigned.

brand.image_url string Selectable in the Payload builder

The original URL recorded for the assigned image, or an empty string.

brand.image_cdn_url string Selectable in the Payload builder

The delivery URL for the assigned image, or an empty string.

brand.product_count integer Selectable in the Payload builder

The number of products currently assigned to the Brand.

brand.template_handle string Selectable in the Payload builder

The storefront template handle assigned to the Brand.

brand.created_at string Selectable in the Payload builder

When the Brand was created.

brand.updated_at string Selectable in the Payload builder

When the Brand last changed.

brand.translations_updated_at string Selectable in the Payload builder

When any Brand translation last changed, or null when none exist.

locale string Selectable in the Payload builder

The locale whose Brand translation changed.

translation.name string Selectable in the Payload builder

The translated Brand name; an empty string on a delete event means it was removed.

translation.slug string Selectable in the Payload builder

The translated Brand slug; an empty string on a delete event means it was removed.

translation.description string Selectable in the Payload builder

The translated Brand description; an empty string on a delete event means it was removed.

translation.seo_title string Selectable in the Payload builder

The translated SEO title; an empty string on a delete event means it was removed.

translation.seo_description string Selectable in the Payload builder

The translated SEO description; an empty string on a delete event means it was removed.

updated_at string Selectable in the Payload builder

When this locale's Brand translation changed.

Brand translations deleted

EVENT brands/translations/delete App scope: read_products Staff permission: products:write

Fired when translated fields are cleared for a locale, including when the brand itself is deleted. A write that sets some translated fields and clears others can fire both translation events. Translation writes do not fire brands/update.

Payload fields

Field Type Description
brand.id integer Always present

The stable Brand id.

brand.name string Selectable in the Payload builder

The merchant-facing Brand name.

brand.slug string Selectable in the Payload builder

The Brand's URL-safe identifier.

brand.description string Selectable in the Payload builder

The Brand description in the store's default locale.

brand.seo_title string Selectable in the Payload builder

The Brand page's SEO title in the store's default locale.

brand.seo_description string Selectable in the Payload builder

The Brand page's SEO description in the store's default locale.

brand.image_id string Selectable in the Payload builder

The assigned Media-library image id, or null when no image is assigned.

brand.image_url string Selectable in the Payload builder

The original URL recorded for the assigned image, or an empty string.

brand.image_cdn_url string Selectable in the Payload builder

The delivery URL for the assigned image, or an empty string.

brand.product_count integer Selectable in the Payload builder

The number of products currently assigned to the Brand.

brand.template_handle string Selectable in the Payload builder

The storefront template handle assigned to the Brand.

brand.created_at string Selectable in the Payload builder

When the Brand was created.

brand.updated_at string Selectable in the Payload builder

When the Brand last changed.

brand.translations_updated_at string Selectable in the Payload builder

When any Brand translation last changed, or null when none exist.

locale string Selectable in the Payload builder

The locale whose Brand translation changed.

translation.name string Selectable in the Payload builder

The translated Brand name; an empty string on a delete event means it was removed.

translation.slug string Selectable in the Payload builder

The translated Brand slug; an empty string on a delete event means it was removed.

translation.description string Selectable in the Payload builder

The translated Brand description; an empty string on a delete event means it was removed.

translation.seo_title string Selectable in the Payload builder

The translated SEO title; an empty string on a delete event means it was removed.

translation.seo_description string Selectable in the Payload builder

The translated SEO description; an empty string on a delete event means it was removed.

updated_at string Selectable in the Payload builder

When this locale's Brand translation changed.

Brand metafield translations updated

EVENT brand_metafields/translations/update App scope: read_products Staff permission: products:write

Fired when a brand metafield's translation is added or updated for a locale.

Payload fields

Field Type Description
metafield.brand_id integer Always present

The brand that holds the translated value.

metafield.brand_name string Selectable in the Payload builder

The brand name when the event was created.

metafield.brand_slug string Selectable in the Payload builder

The brand slug when the event was created.

metafield.definition_id string Always present

The metafield definition ID.

metafield.namespace string Selectable in the Payload builder

The definition namespace.

metafield.key string Selectable in the Payload builder

The definition key within its namespace.

metafield.name string Selectable in the Payload builder

The definition name.

metafield.type string Selectable in the Payload builder

The metafield value type.

metafield.app_id string Selectable in the Payload builder

The owning app ID, or null for a merchant-owned definition.

metafield.app_access string Selectable in the Payload builder

Whether other apps can read the definition: private or shared.

metafield.merchant_access string Selectable in the Payload builder

How a merchant token can access an app-owned definition: hidden, read, or read_write.

locale string Selectable in the Payload builder

The locale whose translation changed.

translation.value string Selectable in the Payload builder

The translated value; an empty string on a delete event means it was removed.

updated_at string Selectable in the Payload builder

When this locale's translation changed.

Brand metafield translations deleted

EVENT brand_metafields/translations/delete App scope: read_products Staff permission: products:write

Fired when a brand metafield's translation is cleared for a locale.

Payload fields

Field Type Description
metafield.brand_id integer Always present

The brand that holds the translated value.

metafield.brand_name string Selectable in the Payload builder

The brand name when the event was created.

metafield.brand_slug string Selectable in the Payload builder

The brand slug when the event was created.

metafield.definition_id string Always present

The metafield definition ID.

metafield.namespace string Selectable in the Payload builder

The definition namespace.

metafield.key string Selectable in the Payload builder

The definition key within its namespace.

metafield.name string Selectable in the Payload builder

The definition name.

metafield.type string Selectable in the Payload builder

The metafield value type.

metafield.app_id string Selectable in the Payload builder

The owning app ID, or null for a merchant-owned definition.

metafield.app_access string Selectable in the Payload builder

Whether other apps can read the definition: private or shared.

metafield.merchant_access string Selectable in the Payload builder

How a merchant token can access an app-owned definition: hidden, read, or read_write.

locale string Selectable in the Payload builder

The locale whose translation changed.

translation.value string Selectable in the Payload builder

The translated value; an empty string on a delete event means it was removed.

updated_at string Selectable in the Payload builder

When this locale's translation changed.