Translate an attribute's name, slug, and description, or translate an option's label and value, for an enabled non-default locale. Reads return stored translations only; an existing resource with no translations returns an empty fields object. Batch reads return a resources entry for each requested ID, and batch writes commit all rows or none.
These translations do not change attribute or option IDs. Product option selectors and product-option URL tokens currently use the source labels, slug, and values; storefront filter labels may use translated option labels. Use the Attributes endpoints to read source values. Translation reads require read_products and read_translations; writes require write_products and write_translations.
Get attribute translation
Fetch one attribute translation.
Returns stored translated attribute fields for one locale, including whether the translation is out of date. Attribute translations cover name, slug, and description; option labels/values use the Attribute Option translation endpoints. 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 |
Attribute id. |
locale
required
|
string |
Enabled non-default store locale. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_ATTRIBUTE_IDAttribute id must be an integer.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe store's default locale cannot be queried as a translation.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe attribute id does not exist in this store.
Set attribute translation
Set one attribute translation.
Writes translated attribute fields for one locale. Empty values clear the matching field translation.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Attribute 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 |
Field-keyed translation values. Allowed fields: name, slug, description. |
Errors
-
400STORE_API_INVALID_ATTRIBUTE_IDAttribute id must be an integer.
-
400STORE_API_INVALID_REQUEST_BODYRequest body is not valid JSON or does not match the expected shape.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe store's default locale cannot be queried as a translation.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe attribute id does not exist in this store.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEThe supplied field is not translatable for this resource.
-
400TRANSLATION_FIELDS_REQUIREDA translation row contains no fields.
-
400TRANSLATION_FIELD_VALUE_TOO_LONGA translated value exceeds the configured length limit.
-
400TRANSLATION_FIELD_EXCEEDS_BYTE_LIMITA translated value exceeds its field-specific length limit.
-
400TRANSLATION_STAGING_INVALID_CONTROL_CHARSA translated value contains a forbidden control character.
-
409TRANSLATION_DUPLICATE_NAME_OR_SLUGA localized unique value conflicts with another resource.
-
400ATTRIBUTE_SLUG_INVALID_FORMATTranslated slug is not a valid URL token.
-
400ATTRIBUTE_SLUG_RESERVEDTranslated slug is reserved.
-
409ATTRIBUTE_DUPLICATETranslated attribute name or slug conflicts with another attribute.
Batch get attribute translations
Fetch attribute translations in batch.
Returns one resources entry per requested attribute id. An existing attribute without stored translations has an empty field map; an unknown id fails the request. 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 attribute 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_FORBIDDENThe store's default locale cannot be queried as a translation.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe attribute id does not exist in this store.
-
400TRANSLATION_INVALID_RESOURCE_IDAn id is not an integer, or no ids were supplied.
-
400TRANSLATION_TOO_MANY_RESOURCESThe request exceeds the translation batch resource cap.
Batch set attribute translations
Set attribute translations in batch.
Writes translated attribute fields for multiple attribute ids in one locale. Either every row is written or, if any row is invalid, none are.
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 is not valid JSON or does not match the expected shape.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe store's default locale cannot be queried as a translation.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe attribute id does not exist in this store.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEThe supplied field is not translatable for this resource.
-
400TRANSLATION_FIELDS_REQUIREDA translation row contains no fields.
-
400TRANSLATION_FIELD_VALUE_TOO_LONGA translated value exceeds the configured length limit.
-
400TRANSLATION_FIELD_EXCEEDS_BYTE_LIMITA translated value exceeds its field-specific length limit.
-
400TRANSLATION_STAGING_INVALID_CONTROL_CHARSA translated value contains a forbidden control character.
-
409TRANSLATION_DUPLICATE_NAME_OR_SLUGA localized unique value conflicts with another resource.
-
400ATTRIBUTE_SLUG_INVALID_FORMATTranslated slug is not a valid URL token.
-
400ATTRIBUTE_SLUG_RESERVEDTranslated slug is reserved.
-
409ATTRIBUTE_DUPLICATETranslated attribute name or slug conflicts with another attribute.
-
400TRANSLATION_NO_WRITES_PROVIDEDThe translations array is empty.
-
400TRANSLATION_TOO_MANY_FIELDSThe request exceeds the translation write field cap.
Get attribute option translation
Fetch one attribute option translation.
Returns stored translated option fields for one locale, including whether the translation is out of date. Attribute option translations cover label and value. 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 |
Attribute option id. |
locale
required
|
string |
Enabled non-default store locale. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_ATTRIBUTE_IDAttribute option id must be an integer.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe store's default locale cannot be queried as a translation.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe attribute option id does not exist in this store.
Set attribute option translation
Set one attribute option translation.
Writes translated option fields for one locale. Empty values clear the matching field translation.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Attribute option 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 |
Field-keyed translation values. Allowed fields: label, value. |
Errors
-
400STORE_API_INVALID_ATTRIBUTE_IDAttribute option id must be an integer.
-
400STORE_API_INVALID_REQUEST_BODYRequest body is not valid JSON or does not match the expected shape.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe store's default locale cannot be queried as a translation.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe attribute option id does not exist in this store.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEThe supplied field is not translatable for this resource.
-
400TRANSLATION_FIELDS_REQUIREDA translation row contains no fields.
-
400TRANSLATION_FIELD_VALUE_TOO_LONGA translated value exceeds the configured length limit.
-
400TRANSLATION_FIELD_EXCEEDS_BYTE_LIMITA translated value exceeds its field-specific length limit.
-
400TRANSLATION_STAGING_INVALID_CONTROL_CHARSA translated value contains a forbidden control character.
-
409TRANSLATION_DUPLICATE_NAME_OR_SLUGA localized unique value conflicts with another resource.
-
400ATTRIBUTE_OPTION_LABEL_TOO_LONGTranslated option label exceeds its limit.
-
400ATTRIBUTE_OPTION_VALUE_INVALID_FORMATTranslated option value is not a valid URL token.
-
400ATTRIBUTE_OPTION_VALUE_TOO_LONGTranslated option value exceeds its limit.
-
400ATTRIBUTE_OPTION_LABEL_DUPLICATETranslated option label duplicates another option on the same attribute.
Batch get attribute option translations
Fetch attribute option translations in batch.
Returns one resources entry per requested option id. An existing option without stored translations has an empty field map; an unknown id fails the request. 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 attribute option 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_FORBIDDENThe store's default locale cannot be queried as a translation.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe attribute option id does not exist in this store.
-
400TRANSLATION_INVALID_RESOURCE_IDAn id is not an integer, or no ids were supplied.
-
400TRANSLATION_TOO_MANY_RESOURCESThe request exceeds the translation batch resource cap.
Batch set attribute option translations
Set attribute option translations in batch.
Writes translated option fields for multiple option ids in one locale. Either every row is written or, if any row is invalid, none are.
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 is not valid JSON or does not match the expected shape.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe store's default locale cannot be queried as a translation.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe attribute option id does not exist in this store.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEThe supplied field is not translatable for this resource.
-
400TRANSLATION_FIELDS_REQUIREDA translation row contains no fields.
-
400TRANSLATION_FIELD_VALUE_TOO_LONGA translated value exceeds the configured length limit.
-
400TRANSLATION_FIELD_EXCEEDS_BYTE_LIMITA translated value exceeds its field-specific length limit.
-
400TRANSLATION_STAGING_INVALID_CONTROL_CHARSA translated value contains a forbidden control character.
-
409TRANSLATION_DUPLICATE_NAME_OR_SLUGA localized unique value conflicts with another resource.
-
400ATTRIBUTE_OPTION_LABEL_TOO_LONGTranslated option label exceeds its limit.
-
400ATTRIBUTE_OPTION_VALUE_INVALID_FORMATTranslated option value is not a valid URL token.
-
400ATTRIBUTE_OPTION_VALUE_TOO_LONGTranslated option value exceeds its limit.
-
400ATTRIBUTE_OPTION_LABEL_DUPLICATETranslated option label duplicates another option on the same attribute.
-
400TRANSLATION_NO_WRITES_PROVIDEDThe translations array is empty.
-
400TRANSLATION_TOO_MANY_FIELDSThe request exceeds the translation write field cap.
Webhook events#
Subscribe to these events when your integration mirrors localized attributes. Update and clear events identify the locale and changed fields. One write can emit both events when it sets some fields and clears others.
Attribute translations updated
Fired when an attribute's translations are added or updated for a locale. Payload carries only the fields that changed.
Payload fields
| Field | Type | Description |
|---|---|---|
attribute.id |
integer |
Always present |
attribute.store_seq_id |
integer |
Selectable in the Payload builder |
attribute.name |
string |
Selectable in the Payload builder |
attribute.slug |
string |
Selectable in the Payload builder |
attribute.description |
string |
Selectable in the Payload builder |
attribute.sub_type |
string |
Selectable in the Payload builder |
attribute.sort_order |
integer |
Selectable in the Payload builder |
attribute.in_use |
boolean |
Selectable in the Payload builder |
attribute.variant_usage_count |
integer |
Selectable in the Payload builder |
attribute.created_at |
string |
Selectable in the Payload builder |
attribute.updated_at |
string |
Selectable in the Payload builder |
attribute.options[*].id |
integer |
Always present |
attribute.options[*].store_seq_id |
integer |
Selectable in the Payload builder |
attribute.options[*].attribute_id |
integer |
Selectable in the Payload builder |
attribute.options[*].label |
string |
Selectable in the Payload builder |
attribute.options[*].value |
string |
Selectable in the Payload builder |
attribute.options[*].color |
string |
Selectable in the Payload builder |
attribute.options[*].file_id |
string |
Selectable in the Payload builder |
attribute.options[*].file_url |
string |
Selectable in the Payload builder |
attribute.options[*].file_cdn_url |
string |
Selectable in the Payload builder |
attribute.options[*].sort_order |
integer |
Selectable in the Payload builder |
attribute.options[*].created_at |
string |
Selectable in the Payload builder |
locale |
string |
Selectable in the Payload builder |
translation.name |
string |
Selectable in the Payload builder |
translation.slug |
string |
Selectable in the Payload builder |
translation.description |
string |
Selectable in the Payload builder |
updated_at |
string |
Selectable in the Payload builder |
Attribute translations deleted
Fired when an attribute's translations are cleared for one or more fields in a locale.
Payload fields
| Field | Type | Description |
|---|---|---|
attribute.id |
integer |
Always present |
attribute.store_seq_id |
integer |
Selectable in the Payload builder |
attribute.name |
string |
Selectable in the Payload builder |
attribute.slug |
string |
Selectable in the Payload builder |
attribute.description |
string |
Selectable in the Payload builder |
attribute.sub_type |
string |
Selectable in the Payload builder |
attribute.sort_order |
integer |
Selectable in the Payload builder |
attribute.in_use |
boolean |
Selectable in the Payload builder |
attribute.variant_usage_count |
integer |
Selectable in the Payload builder |
attribute.created_at |
string |
Selectable in the Payload builder |
attribute.updated_at |
string |
Selectable in the Payload builder |
attribute.options[*].id |
integer |
Always present |
attribute.options[*].store_seq_id |
integer |
Selectable in the Payload builder |
attribute.options[*].attribute_id |
integer |
Selectable in the Payload builder |
attribute.options[*].label |
string |
Selectable in the Payload builder |
attribute.options[*].value |
string |
Selectable in the Payload builder |
attribute.options[*].color |
string |
Selectable in the Payload builder |
attribute.options[*].file_id |
string |
Selectable in the Payload builder |
attribute.options[*].file_url |
string |
Selectable in the Payload builder |
attribute.options[*].file_cdn_url |
string |
Selectable in the Payload builder |
attribute.options[*].sort_order |
integer |
Selectable in the Payload builder |
attribute.options[*].created_at |
string |
Selectable in the Payload builder |
locale |
string |
Selectable in the Payload builder |
translation.name |
string |
Selectable in the Payload builder |
translation.slug |
string |
Selectable in the Payload builder |
translation.description |
string |
Selectable in the Payload builder |
updated_at |
string |
Selectable in the Payload builder |
Attribute option translations updated
Fired when an attribute option's translations are added or updated for a locale. Payload carries only the fields that changed.
Payload fields
| Field | Type | Description |
|---|---|---|
option.id |
integer |
Always present |
option.store_seq_id |
integer |
Selectable in the Payload builder |
option.attribute_id |
integer |
Selectable in the Payload builder |
option.label |
string |
Selectable in the Payload builder |
option.value |
string |
Selectable in the Payload builder |
option.color |
string |
Selectable in the Payload builder |
option.file_id |
string |
Selectable in the Payload builder |
option.file_url |
string |
Selectable in the Payload builder |
option.file_cdn_url |
string |
Selectable in the Payload builder |
option.sort_order |
integer |
Selectable in the Payload builder |
option.created_at |
string |
Selectable in the Payload builder |
locale |
string |
Selectable in the Payload builder |
translation.label |
string |
Selectable in the Payload builder |
translation.value |
string |
Selectable in the Payload builder |
updated_at |
string |
Selectable in the Payload builder |
Attribute option translations deleted
Fired when an attribute option's translations are cleared for one or more fields in a locale.
Payload fields
| Field | Type | Description |
|---|---|---|
option.id |
integer |
Always present |
option.store_seq_id |
integer |
Selectable in the Payload builder |
option.attribute_id |
integer |
Selectable in the Payload builder |
option.label |
string |
Selectable in the Payload builder |
option.value |
string |
Selectable in the Payload builder |
option.color |
string |
Selectable in the Payload builder |
option.file_id |
string |
Selectable in the Payload builder |
option.file_url |
string |
Selectable in the Payload builder |
option.file_cdn_url |
string |
Selectable in the Payload builder |
option.sort_order |
integer |
Selectable in the Payload builder |
option.created_at |
string |
Selectable in the Payload builder |
locale |
string |
Selectable in the Payload builder |
translation.label |
string |
Selectable in the Payload builder |
translation.value |
string |
Selectable in the Payload builder |
updated_at |
string |
Selectable in the Payload builder |