Translate seo_title, seo_description, social_title and social_description of a storefront's home, shop and search pages for an enabled language other than the store's default. The social image and robots settings are shared by all languages; set them for one country and language with Country page SEO. Supply strings; an empty string clears a translation and omitted fields remain unchanged. A page nobody has edited can be translated without changing its source fields.
Source edits mark translations outdated but keep serving them until replaced or removed. A field without a translation shows the generated default for that language, never the default-language text. Generated copy exists in ar, bn, cs, da, de, en, es, fi, fr, he, id, it, ja, ko, ms, nb, nl, no, pl, pt, pt-BR, pt-PT, ru, sv, th, tr, vi, zh, zh-CN and zh-TW; other languages get the English generated copy, so supply your own text for them. A translated title is final: the title pattern and store-name suffix are not applied to it. Reads require read_storefront and read_translations; writes require write_storefront and write_translations.
Get storefront page SEO translation
Get translated SEO for a storefront's home, shop or search page in one locale.
The locale must be enabled and cannot be the store's default language. Fields without a translation in this locale are omitted from the response. The storefront does not show the source-language text for them: shoppers browsing in this locale get the generated default for this language. Generated copy exists in ar, bn, cs, da, de, en, es, fi, fr, he, id, it, ja, ko, ms, nb, nl, no, pl, pt, pt-BR, pt-PT, ru, sv, th, tr, vi, zh, zh-CN and zh-TW; other languages get the English generated copy, so write your own text for them.
Path parameters
| Name | Type | Description |
|---|---|---|
storefrontId
required
|
uuid |
Storefront id from List storefronts. |
pageType
required
|
string |
Storefront page:
Allowed values
homeshopsearch |
locale
required
|
string |
Enabled non-default store locale. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
401UNAUTHORIZEDAuthorization header missing, malformed, or token invalid/expired.
-
402SUBSCRIPTION_REQUIREDThe store does not have an active or trialing subscription.
-
403STORE_API_SCOPE_REQUIREDToken is valid but lacks the required scope for this call.
-
429RATE_LIMITEDThe token's request allowance is exhausted. Retry after the Retry-After header.
-
400INVALID_INPUTThe storefront id is not a UUID.
-
404STOREFRONT_NOT_FOUNDNo storefront with this id belongs to the store.
-
400STORE_API_INVALID_REQUEST_BODYThe body has an invalid shape. Translation values must be strings.
-
400PAGE_SEO_PAGE_TYPE_INVALIDA page type is not
home,shoporsearch. -
400TRANSLATION_LOCALE_REQUIREDA locale is required.
-
400TRANSLATION_LOCALE_NOT_ENABLEDThe locale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe source language cannot be a translation target.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEOnly the four SEO and social text fields can be translated.
-
400TRANSLATION_FIELDS_REQUIREDProvide at least one field.
-
400TRANSLATION_NO_SOURCE_TEXTSave source text before adding its translation.
-
404TRANSLATION_RESOURCE_NOT_FOUNDSave source SEO before writing translations for this page.
-
409TRANSLATION_MUTATION_CONFLICTThe idempotency key was already used for another translation change.
-
400PAGE_SEO_META_TITLE_INVALID_CHARSA translated title contains unsupported characters.
-
400PAGE_SEO_META_TITLE_TOO_LONGA translated title exceeds its limit.
-
400PAGE_SEO_META_DESCRIPTION_INVALID_CHARSA translated description contains unsupported characters.
-
400PAGE_SEO_META_DESCRIPTION_TOO_LONGA translated description exceeds its limit.
Set storefront page SEO translation
Set or clear translated SEO fields for a storefront's home, shop or search page.
Only seo_title, seo_description, social_title and social_description are translatable; the social image and robots settings are shared by all languages (set them per country with Update country page SEO). An empty value clears only that locale's translation, after which the page shows the generated default for that language. A page nobody has edited can be translated: its row is created without changing any source field. Writes are atomic. A write waits at most 2 seconds for other translation writes of the same item or of a clashing name or slug (for example a translation CSV import writing the same language); writes of other items, types and languages never wait. A row or call that fails with TRANSLATION_WRITE_BUSY (HTTP 503) saved nothing: send it again after error.details.retry_after_seconds (the call's Retry-After header says the same). Every row or call either saved or reports an error; none is left in an unknown state.
Path parameters
| Name | Type | Description |
|---|---|---|
storefrontId
required
|
uuid |
Storefront id from List storefronts. |
pageType
required
|
string |
Storefront page:
Allowed values
homeshopsearch |
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 translations. |
Errors
-
401UNAUTHORIZEDAuthorization header missing, malformed, or token invalid/expired.
-
402SUBSCRIPTION_REQUIREDThe store does not have an active or trialing subscription.
-
403STORE_API_SCOPE_REQUIREDToken is valid but lacks the required scope for this call.
-
429RATE_LIMITEDThe token's request allowance is exhausted. Retry after the Retry-After header.
-
400INVALID_INPUTThe storefront id is not a UUID.
-
404STOREFRONT_NOT_FOUNDNo storefront with this id belongs to the store.
-
400STORE_API_INVALID_REQUEST_BODYThe body has an invalid shape. Translation values must be strings.
-
400PAGE_SEO_PAGE_TYPE_INVALIDA page type is not
home,shoporsearch. -
400TRANSLATION_LOCALE_REQUIREDA locale is required.
-
400TRANSLATION_LOCALE_NOT_ENABLEDThe locale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe source language cannot be a translation target.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEOnly the four SEO and social text fields can be translated.
-
400TRANSLATION_FIELDS_REQUIREDProvide at least one field.
-
400TRANSLATION_NO_SOURCE_TEXTSave source text before adding its translation.
-
404TRANSLATION_RESOURCE_NOT_FOUNDSave source SEO before writing translations for this page.
-
409TRANSLATION_MUTATION_CONFLICTThe idempotency key was already used for another translation change.
-
400PAGE_SEO_META_TITLE_INVALID_CHARSA translated title contains unsupported characters.
-
400PAGE_SEO_META_TITLE_TOO_LONGA translated title exceeds its limit.
-
400PAGE_SEO_META_DESCRIPTION_INVALID_CHARSA translated description contains unsupported characters.
-
400PAGE_SEO_META_DESCRIPTION_TOO_LONGA translated description exceeds its limit.
-
503TRANSLATION_WRITE_BUSYOther translation writes held the item or a clashing name or slug for more than 2 seconds; nothing was saved. Send the request again after
error.details.retry_after_seconds(also theRetry-Afterheader). -
400STORE_API_BODY_PROPERTY_UNKNOWNThe body has a property this request does not accept. The message and
error.details.propertieslist the allowed and required properties (nestedfor each object or list of objects). -
400STORE_API_BODY_PROPERTY_INVALIDA body property has the wrong type (
error.details.expected_type). The message anderror.details.propertieslist the allowed and required properties.
Batch get storefront page SEO translations
Get translations for several of a storefront's system pages.
Omit page_types to return home, shop and search. Otherwise pass a comma-separated subset; duplicates and unknown values are rejected. Fields without a translation in this locale are omitted from the response. The storefront does not show the source-language text for them: shoppers browsing in this locale get the generated default for this language. Generated copy exists in ar, bn, cs, da, de, en, es, fi, fr, he, id, it, ja, ko, ms, nb, nl, no, pl, pt, pt-BR, pt-PT, ru, sv, th, tr, vi, zh, zh-CN and zh-TW; other languages get the English generated copy, so write your own text for them.
Path parameters
| Name | Type | Description |
|---|---|---|
storefrontId
required
|
uuid |
Storefront id from List storefronts. |
locale
required
|
string |
Enabled non-default store locale. |
Query parameters
| Name | Type | Description |
|---|---|---|
page_types
|
string |
Comma-separated page types from |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
401UNAUTHORIZEDAuthorization header missing, malformed, or token invalid/expired.
-
402SUBSCRIPTION_REQUIREDThe store does not have an active or trialing subscription.
-
403STORE_API_SCOPE_REQUIREDToken is valid but lacks the required scope for this call.
-
429RATE_LIMITEDThe token's request allowance is exhausted. Retry after the Retry-After header.
-
400INVALID_INPUTThe storefront id is not a UUID.
-
404STOREFRONT_NOT_FOUNDNo storefront with this id belongs to the store.
-
400STORE_API_INVALID_REQUEST_BODYThe body has an invalid shape. Translation values must be strings.
-
400PAGE_SEO_PAGE_TYPE_INVALIDA page type is not
home,shoporsearch. -
400TRANSLATION_LOCALE_REQUIREDA locale is required.
-
400TRANSLATION_LOCALE_NOT_ENABLEDThe locale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe source language cannot be a translation target.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEOnly the four SEO and social text fields can be translated.
-
400TRANSLATION_FIELDS_REQUIREDProvide at least one field.
-
400TRANSLATION_NO_SOURCE_TEXTSave source text before adding its translation.
-
404TRANSLATION_RESOURCE_NOT_FOUNDSave source SEO before writing translations for this page.
-
409TRANSLATION_MUTATION_CONFLICTThe idempotency key was already used for another translation change.
-
400PAGE_SEO_META_TITLE_INVALID_CHARSA translated title contains unsupported characters.
-
400PAGE_SEO_META_TITLE_TOO_LONGA translated title exceeds its limit.
-
400PAGE_SEO_META_DESCRIPTION_INVALID_CHARSA translated description contains unsupported characters.
-
400PAGE_SEO_META_DESCRIPTION_TOO_LONGA translated description exceeds its limit.
Batch set storefront page SEO translations
Set system page translations for any languages in one call.
Each row is one system page in one language: page_type, locale (any enabled non-default store locale) and fields. Rows for several languages can be mixed in one call; send at most 100 rows (one row = one system page in one locale) and at most one row per system page and locale. Each row is saved on its own: a failing row never stops the others. Empty values clear the matching field translation; omitted fields keep their translation. Every row is validated exactly like the single translation endpoint. The response has totals (rows, saved, failed) and one results entry per row in request order: {page_type, locale, status} with status saved or failed. A failed row carries the full error (code, message, details); its codes are the single endpoint's codes plus TRANSLATION_ROW_DUPLICATE. A saved rich-text row whose unsafe markup was removed lists warnings. A top-level code and message give the outcome: TRANSLATIONS_SAVED (200, every row saved), TRANSLATIONS_PARTIALLY_SAVED (200, success: true; the message counts saved and failed rows and names the failure reasons, e.g. "2 saved, 1 failed. No source text found for the requested fields (description).") TRANSLATIONS_NOT_SAVED_RETRY (503 with a Retry-After header, success: false; no row saved because every row failed only with TRANSLATION_WRITE_BUSY, so the same call can be sent again after error.details.retry_after_seconds) or TRANSLATIONS_NOT_SAVED (422, success: false; no row saved and at least one row failed for another reason). Both carry the same totals and results in error.details. With an Idempotency-Key, repeating the same request re-applies nothing that already saved and retries the failed rows. A write waits at most 2 seconds for other translation writes of the same item or of a clashing name or slug (for example a translation CSV import writing the same language); writes of other items, types and languages never wait. A row or call that fails with TRANSLATION_WRITE_BUSY (HTTP 503) saved nothing: send it again after error.details.retry_after_seconds (the call's Retry-After header says the same). Every row or call either saved or reports an error; none is left in an unknown state.
Path parameters
| Name | Type | Description |
|---|---|---|
storefrontId
required
|
uuid |
Storefront id from List storefronts. |
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> |
Up to 100 rows shaped as {page_type, locale, fields}. Allowed fields are |
Errors
-
401UNAUTHORIZEDAuthorization header missing, malformed, or token invalid/expired.
-
402SUBSCRIPTION_REQUIREDThe store does not have an active or trialing subscription.
-
403STORE_API_SCOPE_REQUIREDToken is valid but lacks the required scope for this call.
-
429RATE_LIMITEDThe token's request allowance is exhausted. Retry after the Retry-After header.
-
400STORE_API_INVALID_REQUEST_BODYThe body is not valid JSON or a row has an unknown key or a wrongly typed value.
-
400TRANSLATION_NO_WRITES_PROVIDEDtranslations is empty.
-
400TRANSLATION_TOO_MANY_ROWSMore than 100 rows; nothing is written.
-
503TRANSLATIONS_NOT_SAVED_RETRYNo row saved and every row failed only with
TRANSLATION_WRITE_BUSY: send the same request again aftererror.details.retry_after_seconds(also theRetry-Afterheader).error.detailsalso hastotalsand oneresultsentry per row with its error. -
422TRANSLATIONS_NOT_SAVEDNo row saved and at least one row failed with an error that sending again will not fix;
error.detailshastotalsand oneresultsentry per row with its error. -
400STORE_API_BODY_PROPERTY_UNKNOWNThe body has a property this request does not accept. The message and
error.details.propertieslist the allowed and required properties (nestedfor each object or list of objects). -
400STORE_API_BODY_PROPERTY_INVALIDA body property has the wrong type (
error.details.expected_type). The message anderror.details.propertieslist the allowed and required properties.