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
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. |
locale
required
|
string |
Enabled non-default store locale. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_BRAND_IDBrand ID is invalid.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENTranslations cannot target the store's default locale.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREBrand does not exist in this store.
Set brand translation
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. |
locale
required
|
string |
Enabled non-default store locale. |
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 |
Errors
-
400STORE_API_INVALID_BRAND_IDBrand id is invalid.
-
400STORE_API_INVALID_REQUEST_BODYRequest body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENTranslations cannot target the store's default locale.
-
400TRANSLATION_FIELDS_REQUIREDEach brand must include at least one translated field.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEUse only
name,slug,description,seo_title, orseo_description. -
400TRANSLATION_TOO_MANY_FIELDSThe request exceeds the translation field limit.
-
400TRANSLATION_STAGING_INVALID_CONTROL_CHARSA translated value contains unsupported control characters.
-
400TRANSLATION_FIELD_VALUE_TOO_LONGA translated value exceeds the overall translation value limit.
-
400TRANSLATION_FIELD_EXCEEDS_BYTE_LIMITA translated value exceeds the field's length limit.
-
400TRANSLATION_NO_SOURCE_TEXTThe source field is empty; add source text before translating it.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREBrand does not exist in this store.
-
404TRANSLATION_RESOURCE_NOT_FOUNDBrand no longer exists in this store.
-
409BRAND_DUPLICATETranslated name or slug already belongs to another brand.
-
409TRANSLATION_DUPLICATE_NAME_OR_SLUGTranslated name or slug conflicted with another brand during the write.
-
503CATALOG_NAMESPACE_BUSYAnother 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.
-
400BRAND_NAME_INVALID_CHARSTranslated name contains unsupported control characters.
-
400BRAND_NAME_TOO_LONGTranslated name exceeds the maximum length.
-
400BRAND_DESCRIPTION_INVALID_CHARSTranslated description contains unsupported control characters.
-
400BRAND_DESCRIPTION_TOO_LONGTranslated description exceeds the maximum length.
-
400BRAND_SEO_TITLE_INVALID_CHARSTranslated SEO title contains unsupported control characters.
-
400BRAND_SEO_TITLE_TOO_LONGTranslated SEO title exceeds the maximum length.
-
400BRAND_SEO_DESCRIPTION_INVALID_CHARSTranslated SEO description contains unsupported control characters.
-
400BRAND_SEO_DESCRIPTION_TOO_LONGTranslated SEO description exceeds the maximum length.
-
400BRAND_SLUG_INVALID_FORMATTranslated slug is not valid for Brand URLs.
-
400BRAND_SLUG_TOO_LONGTranslated slug exceeds the maximum length.
Batch get brand 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. |
Query parameters
| Name | Type | Description |
|---|---|---|
ids
required
|
string |
Comma-separated brand IDs. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENTranslations cannot target the store's default locale.
-
400TRANSLATION_INVALID_RESOURCE_IDA brand ID is invalid.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREA brand does not exist in this store.
-
400TRANSLATION_TOO_MANY_RESOURCESThe request exceeds the translation batch resource limit.
Batch set brand 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. |
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 |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body must be a JSON object containing only documented fields; error.details.field identifies an unknown field.
-
400TRANSLATION_NO_WRITES_PROVIDEDAt least one brand translation row is required.
-
400TRANSLATION_INVALID_RESOURCE_IDA brand ID is invalid.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENTranslations cannot target the store's default locale.
-
400TRANSLATION_FIELDS_REQUIREDEach brand must include at least one translated field.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEUse only
name,slug,description,seo_title, orseo_description. -
400TRANSLATION_TOO_MANY_FIELDSThe request exceeds the translation field limit.
-
400TRANSLATION_STAGING_INVALID_CONTROL_CHARSA translated value contains unsupported control characters.
-
400TRANSLATION_FIELD_VALUE_TOO_LONGA translated value exceeds the overall translation value limit.
-
400TRANSLATION_FIELD_EXCEEDS_BYTE_LIMITA translated value exceeds the field's length limit.
-
400TRANSLATION_NO_SOURCE_TEXTThe source field is empty; add source text before translating it.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREBrand does not exist in this store.
-
404TRANSLATION_RESOURCE_NOT_FOUNDBrand no longer exists in this store.
-
409BRAND_DUPLICATETranslated name or slug already belongs to another brand.
-
409TRANSLATION_DUPLICATE_NAME_OR_SLUGTranslated name or slug conflicted with another brand during the write.
-
503CATALOG_NAMESPACE_BUSYAnother 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.
-
400BRAND_NAME_INVALID_CHARSTranslated name contains unsupported control characters.
-
400BRAND_NAME_TOO_LONGTranslated name exceeds the maximum length.
-
400BRAND_DESCRIPTION_INVALID_CHARSTranslated description contains unsupported control characters.
-
400BRAND_DESCRIPTION_TOO_LONGTranslated description exceeds the maximum length.
-
400BRAND_SEO_TITLE_INVALID_CHARSTranslated SEO title contains unsupported control characters.
-
400BRAND_SEO_TITLE_TOO_LONGTranslated SEO title exceeds the maximum length.
-
400BRAND_SEO_DESCRIPTION_INVALID_CHARSTranslated SEO description contains unsupported control characters.
-
400BRAND_SEO_DESCRIPTION_TOO_LONGTranslated SEO description exceeds the maximum length.
-
400BRAND_SLUG_INVALID_FORMATTranslated slug is not valid for Brand URLs.
-
400BRAND_SLUG_TOO_LONGTranslated slug exceeds the maximum length.
Get a brand metafield translation
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. |
namespace
required
|
string |
Metafield definition namespace. |
key
required
|
string |
Metafield definition key. |
locale
required
|
string |
Enabled non-default store locale. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_BRAND_IDBrand id is not a positive integer.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEThe definition is not translatable or its value type cannot be translated.
-
400TRANSLATION_LOCALE_REQUIREDLocale is missing.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe default language stores source values and cannot be used as a translation locale.
-
404METAFIELD_DEFINITION_NOT_FOUNDThe namespace and key do not identify an accessible Brand definition.
-
404BRAND_NOT_FOUNDBrand does not exist in this store.
Set a brand metafield translation
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. |
namespace
required
|
string |
Metafield definition namespace. |
key
required
|
string |
Metafield definition key. |
locale
required
|
string |
Enabled non-default store locale. |
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. |
Errors
-
400STORE_API_INVALID_BRAND_IDBrand id is not a positive integer.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEThe definition is not translatable or its value type cannot be translated.
-
400TRANSLATION_LOCALE_REQUIREDLocale is missing.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe default language stores source values and cannot be used as a translation locale.
-
404METAFIELD_DEFINITION_NOT_FOUNDThe namespace and key do not identify an accessible Brand definition.
-
404BRAND_NOT_FOUNDBrand does not exist in this store.
-
400TRANSLATION_LIST_LENGTH_MISMATCHThe 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
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
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
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: |
metafield.merchant_access |
string |
Selectable in the Payload builder
How a merchant token can access an app-owned definition: |
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
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: |
metafield.merchant_access |
string |
Selectable in the Payload builder
How a merchant token can access an app-owned definition: |
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. |