Get product translation
Fetch one product translation.
Returns stored translated Product fields for one locale, including whether the translation is out of date. Allowed fields come from contract.translation.fields. 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 |
Product id. |
locale
required
|
string |
Enabled non-default store locale. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400TRANSLATION_INVALID_LOCALEThe locale is not enabled for the store.
-
400TRANSLATION_FIELD_NOT_ALLOWEDA field key is not in contract.translation.fields.
-
401UNAUTHORIZEDMissing or invalid token.
-
403STORE_API_SCOPE_REQUIREDThe token lacks a required product or translation scope.
-
404NOT_FOUNDProduct, variant, or locale not found.
Set product translation
Set one product translation.
Writes translated Product fields for one locale. Empty values clear the matching field translation. Validation (rune-count limits per field) is the same the admin translation editor runs.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Product 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 come from |
Errors
-
400TRANSLATION_INVALID_LOCALEThe locale is not enabled for the store.
-
400TRANSLATION_FIELD_NOT_ALLOWEDA field key is not in contract.translation.fields.
-
401UNAUTHORIZEDMissing or invalid token.
-
403STORE_API_SCOPE_REQUIREDThe token lacks a required product or translation scope.
-
404NOT_FOUNDProduct, variant, or locale not found.
Batch get product translations
Fetch product translations in batch.
Returns translated Product fields for multiple product ids in one locale. 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 product ids. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400TRANSLATION_INVALID_LOCALEThe locale is not enabled for the store.
-
400TRANSLATION_FIELD_NOT_ALLOWEDA field key is not in contract.translation.fields.
-
401UNAUTHORIZEDMissing or invalid token.
-
403STORE_API_SCOPE_REQUIREDThe token lacks a required product or translation scope.
-
404NOT_FOUNDProduct, variant, or locale not found.
Batch set product translations
Set product translations in batch.
Writes translated Product fields for multiple product 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
-
400TRANSLATION_INVALID_LOCALEThe locale is not enabled for the store.
-
400TRANSLATION_FIELD_NOT_ALLOWEDA field key is not in contract.translation.fields.
-
401UNAUTHORIZEDMissing or invalid token.
-
403STORE_API_SCOPE_REQUIREDThe token lacks a required product or translation scope.
-
404NOT_FOUNDProduct, variant, or locale not found.
Get variant translation
Fetch one variant translation.
Returns the stored translated variant title for one locale. 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 |
Product ID. |
variantId
required
|
integer |
Variant ID. |
locale
required
|
string |
BCP-47 locale code, e.g. fr or pt-BR. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400TRANSLATION_INVALID_LOCALEThe locale is not enabled for the store.
-
400TRANSLATION_FIELD_NOT_ALLOWEDA field key is not in contract.translation.fields.
-
401UNAUTHORIZEDMissing or invalid token.
-
403STORE_API_SCOPE_REQUIREDThe token lacks a required product or translation scope.
-
404NOT_FOUNDProduct, variant, or locale not found.
Set variant translation
Set one variant translation.
Writes the translated variant title for one locale. An empty value clears it.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Product ID. |
variantId
required
|
integer |
Variant ID. |
locale
required
|
string |
BCP-47 locale code, e.g. fr or pt-BR. |
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; variants translate |
Errors
-
400TRANSLATION_INVALID_LOCALEThe locale is not enabled for the store.
-
400TRANSLATION_FIELD_NOT_ALLOWEDA field key is not in contract.translation.fields.
-
401UNAUTHORIZEDMissing or invalid token.
-
403STORE_API_SCOPE_REQUIREDThe token lacks a required product or translation scope.
-
404NOT_FOUNDProduct, variant, or locale not found.
Get product metafield translation
Fetch one translated product metafield value.
Resolves the definition by namespace and key through the calling app's access boundary, then returns its stored value translation for one locale. The definition must be translatable and visible to the calling app. 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 |
Product 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
-
400TRANSLATION_INVALID_LOCALEThe locale is not enabled for the store.
-
400TRANSLATION_FIELD_NOT_ALLOWEDA field key is not in contract.translation.fields.
-
401UNAUTHORIZEDMissing or invalid token.
-
403STORE_API_SCOPE_REQUIREDThe token lacks a required product or translation scope.
-
404NOT_FOUNDProduct, variant, or locale not found.
Set product metafield translation
Set one translated product metafield value.
Writes or clears the value translation after rechecking definition ownership, app access, translatability, value type, and the Product owner in this store. Send an explicit string in value; omit neither the field nor its value, and do not send null. An empty string clears the translation. For list.string, send a JSON-encoded string array with one translated item for each source item, in the same order.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Product 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 metafield value. An empty value clears the stored translation. |
Errors
-
400TRANSLATION_INVALID_LOCALEThe locale is not enabled for the store.
-
400TRANSLATION_FIELD_NOT_ALLOWEDA field key is not in contract.translation.fields.
-
401UNAUTHORIZEDMissing or invalid token.
-
403STORE_API_SCOPE_REQUIREDThe token lacks a required product or translation scope.
-
404NOT_FOUNDProduct, variant, or locale not found.
-
400TRANSLATION_LIST_LENGTH_MISMATCHThe translated list must have the same number of items as the source list.
Get variant metafield translation
Fetch one translated variant metafield value.
Validates that the variant belongs to the Product in the path, resolves the definition through the calling app's access boundary, and returns its stored value translation for one locale. 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 |
Product ID. |
variantId
required
|
integer |
Variant 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
-
400TRANSLATION_INVALID_LOCALEThe locale is not enabled for the store.
-
400TRANSLATION_FIELD_NOT_ALLOWEDA field key is not in contract.translation.fields.
-
401UNAUTHORIZEDMissing or invalid token.
-
403STORE_API_SCOPE_REQUIREDThe token lacks a required product or translation scope.
-
404NOT_FOUNDProduct, variant, or locale not found.
Set variant metafield translation
Set one translated variant metafield value.
Writes or clears the value translation after validating the Product/Variant pair, definition ownership, app access, translatability, and value type. Send an explicit string in value; omit neither the field nor its value, and do not send null. An empty string clears the translation. For list.string, send a JSON-encoded string array with one translated item for each source item, in the same order.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
integer |
Product ID. |
variantId
required
|
integer |
Variant 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 metafield value. An empty value clears the stored translation. |
Errors
-
400TRANSLATION_INVALID_LOCALEThe locale is not enabled for the store.
-
400TRANSLATION_FIELD_NOT_ALLOWEDA field key is not in contract.translation.fields.
-
401UNAUTHORIZEDMissing or invalid token.
-
403STORE_API_SCOPE_REQUIREDThe token lacks a required product or translation scope.
-
404NOT_FOUNDProduct, variant, or locale not found.
-
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 products. Update and clear events identify the locale and changed fields. One write can emit both events when it sets some fields and clears others.
Product translations updated
Fired when a product's translations are added or updated for a locale. Payload carries only the fields that changed.
Payload fields
| Field | Type | Description |
|---|---|---|
product.id |
integer |
Always present |
product.title |
string |
Selectable in the Payload builder |
product.slug |
string |
Selectable in the Payload builder |
locale |
string |
Selectable in the Payload builder |
translation.title |
string |
Selectable in the Payload builder |
translation.slug |
string |
Selectable in the Payload builder |
translation.description |
string |
Selectable in the Payload builder |
translation.short_description |
string |
Selectable in the Payload builder |
translation.seo_title |
string |
Selectable in the Payload builder |
translation.seo_description |
string |
Selectable in the Payload builder |
updated_at |
string |
Selectable in the Payload builder |
Product translations deleted
Fired when a product's translations are cleared for one or more fields in a locale.
Payload fields
| Field | Type | Description |
|---|---|---|
product.id |
integer |
Always present |
product.title |
string |
Selectable in the Payload builder |
product.slug |
string |
Selectable in the Payload builder |
locale |
string |
Selectable in the Payload builder |
translation.title |
string |
Selectable in the Payload builder |
translation.slug |
string |
Selectable in the Payload builder |
translation.description |
string |
Selectable in the Payload builder |
translation.short_description |
string |
Selectable in the Payload builder |
translation.seo_title |
string |
Selectable in the Payload builder |
translation.seo_description |
string |
Selectable in the Payload builder |
updated_at |
string |
Selectable in the Payload builder |
Variant translations updated
Fired when a variant's translations are added or updated for a locale. Payload carries only the fields that changed.
Payload fields
| Field | Type | Description |
|---|---|---|
variant.id |
integer |
Always present |
variant.product_id |
integer |
Always present |
variant.title |
string |
Selectable in the Payload builder |
variant.sku |
string |
Selectable in the Payload builder |
locale |
string |
Selectable in the Payload builder |
translation.title |
string |
Selectable in the Payload builder |
updated_at |
string |
Selectable in the Payload builder |
Variant translations deleted
Fired when a variant's translations are cleared for one or more fields in a locale.
Payload fields
| Field | Type | Description |
|---|---|---|
variant.id |
integer |
Always present |
variant.product_id |
integer |
Always present |
variant.title |
string |
Selectable in the Payload builder |
variant.sku |
string |
Selectable in the Payload builder |
locale |
string |
Selectable in the Payload builder |
translation.title |
string |
Selectable in the Payload builder |
updated_at |
string |
Selectable in the Payload builder |