A translated tag name labels storefront filters. Its translated slug adds localized search terms for products with that tag. Filters still use the original tag slug as their value, and tags have no landing pages.
Get tag translation
Fetch one tag translation.
Returns the stored name translation for one tag in the selected locale, with is_outdated. Tag slugs are not translatable: tags have no pages and filters match the source slug. 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 |
Tag ID. |
locale
required
|
string |
Enabled non-default store locale. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_TAG_IDTag 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_STORETag does not exist in this store.
Set tag translation
Set one tag translation.
Only name is translatable; a tag's slug stays the same in every language. Set name to an empty string to remove its translation.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Tag 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. The only allowed field is |
Errors
-
400STORE_API_INVALID_TAG_IDTag 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 tag row must contain a translated
name. -
400TRANSLATION_FIELD_NOT_TRANSLATABLEA field is not translatable for tags; only
nameis, so sendingslugreturns this error. -
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_RESOURCE_ID_NOT_IN_STORETag does not exist in this store.
-
409TAG_DUPLICATETranslated name conflicts with another tag in this locale.
-
409TRANSLATION_DUPLICATE_NAME_OR_SLUGTranslated name conflicted with another tag during the write.
Batch get tag translations
Fetch tag translations in batch.
Returns a resources entry keyed by tag:{id} for each requested tag. A tag 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 tag 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_RESOURCE_ID_REQUIREDAt least one tag ID is required.
-
400TRANSLATION_INVALID_RESOURCE_IDA tag ID is invalid.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREA tag does not exist in this store.
-
400TRANSLATION_TOO_MANY_RESOURCESThe request exceeds the translation batch resource limit.
Batch set tag translations
Set tag translations in batch.
Writes translations for multiple tags 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 tag translation row is required.
-
400TRANSLATION_INVALID_RESOURCE_IDA tag 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 tag row must contain a translated
name. -
400TRANSLATION_FIELD_NOT_TRANSLATABLEA field is not translatable for tags; only
nameis, so sendingslugreturns this error. -
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_RESOURCE_ID_NOT_IN_STORETag does not exist in this store.
-
409TAG_DUPLICATETranslated name conflicts with another tag in this locale.
-
409TRANSLATION_DUPLICATE_NAME_OR_SLUGTranslated name conflicted with another tag during the write.
Webhook events#
Subscribe to these events when your integration mirrors localized tags. Update and clear events identify the locale and changed fields. One write can emit both events when it sets some fields and clears others.
Tag translations updated
Fired when a tag's translations are added or updated for a locale. The payload contains only the fields that changed. A mixed write that updates some translated fields and clears others fires both translation events. Translation writes do not fire tags/update.
Payload fields
| Field | Type | Description |
|---|---|---|
tag.id |
integer |
Always present
The stable product tag ID. |
tag.name |
string |
Selectable in the Payload builder
The merchant-facing tag name. |
tag.slug |
string |
Selectable in the Payload builder
The tag's URL-safe identifier. |
tag.product_count |
integer |
Selectable in the Payload builder
The number of products currently assigned to the tag. |
tag.created_at |
string |
Selectable in the Payload builder
When the tag was created. |
tag.updated_at |
string |
Selectable in the Payload builder
When the tag's name or slug last changed. |
tag.translations_updated_at |
string |
Selectable in the Payload builder
When any translation for the tag last changed, or null when none exist. |
locale |
string |
Selectable in the Payload builder
The locale whose tag translation changed. |
translation.name |
string |
Selectable in the Payload builder
The updated translated tag name, when present. |
updated_at |
string |
Selectable in the Payload builder
When this locale's tag translation changed. |
Tag translations deleted
Fired when a tag's translations are cleared for one or more fields in a locale, including when the tag itself is deleted. A mixed write that updates some translated fields and clears others fires both translation events. Translation writes do not fire tags/update.
Payload fields
| Field | Type | Description |
|---|---|---|
tag.id |
integer |
Always present
The stable product tag ID. |
tag.name |
string |
Selectable in the Payload builder
The merchant-facing tag name. |
tag.slug |
string |
Selectable in the Payload builder
The tag's URL-safe identifier. |
tag.product_count |
integer |
Selectable in the Payload builder
The number of products currently assigned to the tag. |
tag.created_at |
string |
Selectable in the Payload builder
When the tag was created. |
tag.updated_at |
string |
Selectable in the Payload builder
When the tag's name or slug last changed. |
tag.translations_updated_at |
string |
Selectable in the Payload builder
When any translation for the tag last changed, or null when none exist. |
locale |
string |
Selectable in the Payload builder
The locale whose tag translation changed. |
translation.name |
string |
Selectable in the Payload builder
An empty string marks a cleared name translation. |
updated_at |
string |
Selectable in the Payload builder
When this locale's tag translation changed. |