Get blog post translation
Fetch one blog post translation.
Returns stored translated Blog Post fields for one locale, including whether the translation is out of date. 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
|
uuid |
Blog Post id. |
locale
required
|
string |
Enabled non-default store locale. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400BLOG_POST_IDS_INVALIDBlog Post id is not a valid UUID.
-
400TRANSLATION_LOCALE_REQUIREDLocale is required.
-
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_STOREBlog Post does not exist in this store.
Set blog post translation
Set one blog post translation.
Writes translated Blog Post fields for one locale. Empty values clear the matching field translation.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Blog Post 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
-
400STORE_API_INVALID_REQUEST_BODYRequest body is not valid JSON.
-
400BLOG_POST_IDS_INVALIDBlog Post id is not a valid UUID.
-
400TRANSLATION_LOCALE_REQUIREDLocale is required.
-
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_STOREBlog Post does not exist in this store.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEField is not translatable for Blog Posts.
-
400TRANSLATION_FIELDS_REQUIREDAt least one translated field is required.
-
400TRANSLATION_FIELD_VALUE_TOO_LONGA translated value exceeds its field limit.
-
400TRANSLATION_NO_SOURCE_TEXTA non-empty translation requires source text for that field.
-
409TRANSLATION_DUPLICATE_NAME_OR_SLUGTranslated title or slug conflicts with another blog post.
-
400BLOG_POST_SLUG_FORMATTranslated slug is not valid for Blog Post URLs.
Batch get blog post translations
Fetch blog post translations in batch.
Returns translated Blog Post fields for multiple post 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 Blog Post ids. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400TRANSLATION_LOCALE_REQUIREDLocale is required.
-
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_STOREBlog Post does not exist in this store.
-
400TRANSLATION_TOO_MANY_RESOURCESThe request exceeds the translation batch resource cap.
-
400BLOG_POST_IDS_INVALIDOne post id is not a valid UUID.
Batch set blog post translations
Set blog post translations in batch.
Writes translated Blog Post fields for multiple post 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.
-
400BLOG_POST_IDS_INVALIDOne post id is not a valid UUID.
-
400TRANSLATION_TOO_MANY_FIELDSThe request exceeds the translation batch field cap.
-
400TRANSLATION_LOCALE_REQUIREDLocale is required.
-
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_STOREBlog Post does not exist in this store.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEField is not translatable for Blog Posts.
-
400TRANSLATION_FIELDS_REQUIREDAt least one translated field is required.
-
400TRANSLATION_FIELD_VALUE_TOO_LONGA translated value exceeds its field limit.
-
400TRANSLATION_NO_SOURCE_TEXTA non-empty translation requires source text for that field.
-
409TRANSLATION_DUPLICATE_NAME_OR_SLUGTranslated title or slug conflicts with another blog post.
-
400BLOG_POST_SLUG_FORMATTranslated slug is not valid for Blog Post URLs.
Get a blog post metafield translation
Fetch one translated custom-data value.
The definition must be visible and translatable. 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
|
uuid |
Blog Post 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
-
400PRODUCT_METAFIELD_DEF_NOT_FOUNDThe namespace and key do not identify an accessible definition.
-
404NOT_FOUNDThe resource does not exist in this store.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEThe definition is not translatable.
-
400TRANSLATION_LOCALE_REQUIREDLocale is missing.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe default locale cannot be a translation target.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe translated resource does not exist.
Set a blog post metafield translation
Set or clear one translated custom-data value.
Send an empty value to clear the locale's translation. 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
|
uuid |
Blog Post 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; empty clears it. |
Errors
-
400PRODUCT_METAFIELD_DEF_NOT_FOUNDThe namespace and key do not identify an accessible definition.
-
404NOT_FOUNDThe resource does not exist in this store.
-
400TRANSLATION_FIELD_NOT_TRANSLATABLEThe definition is not translatable.
-
400TRANSLATION_LOCALE_REQUIREDLocale is missing.
-
400TRANSLATION_LOCALE_NOT_ENABLEDLocale is not enabled for this store.
-
400TRANSLATION_DEFAULT_LOCALE_FORBIDDENThe default locale cannot be a translation target.
-
400TRANSLATION_RESOURCE_ID_NOT_IN_STOREThe translated resource does not exist.
-
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 blog posts. Update and clear events identify the locale and changed fields. One write can emit both events when it sets some fields and clears others.
Blog post translations updated
Fired when a blog post's translations are added or updated for a locale.
Payload fields
| Field | Type | Description |
|---|---|---|
blog_post.id |
string |
Always present |
blog_post.title |
string |
Selectable in the Payload builder |
blog_post.slug |
string |
Selectable in the Payload builder |
blog_post.content |
string |
Selectable in the Payload builder |
blog_post.excerpt |
string |
Selectable in the Payload builder |
blog_post.featured_image_id |
string |
Selectable in the Payload builder |
blog_post.featured_image_url |
string |
Selectable in the Payload builder |
blog_post.featured_image_cdn_url |
string |
Selectable in the Payload builder |
blog_post.author_ref |
string |
Selectable in the Payload builder |
blog_post.author.id |
string |
Always present |
blog_post.author.name |
string |
Selectable in the Payload builder |
blog_post.author.slug |
string |
Selectable in the Payload builder |
blog_post.author.bio |
string |
Selectable in the Payload builder |
blog_post.author.avatar_url |
string |
Selectable in the Payload builder |
blog_post.author.created_at |
string |
Selectable in the Payload builder |
blog_post.seo_title |
string |
Selectable in the Payload builder |
blog_post.seo_description |
string |
Selectable in the Payload builder |
blog_post.template_handle |
string |
Selectable in the Payload builder |
blog_post.status |
string |
Selectable in the Payload builder |
blog_post.publish_at |
string |
Selectable in the Payload builder |
blog_post.published_at |
string |
Selectable in the Payload builder |
blog_post.comment_count |
integer |
Selectable in the Payload builder |
blog_post.categories[*].id |
string |
Always present |
blog_post.categories[*].name |
string |
Selectable in the Payload builder |
blog_post.categories[*].slug |
string |
Selectable in the Payload builder |
blog_post.categories[*].description |
string |
Selectable in the Payload builder |
blog_post.categories[*].seo_title |
string |
Selectable in the Payload builder |
blog_post.categories[*].seo_description |
string |
Selectable in the Payload builder |
blog_post.categories[*].template_handle |
string |
Selectable in the Payload builder |
blog_post.categories[*].post_count |
integer |
Selectable in the Payload builder |
blog_post.categories[*].created_at |
string |
Selectable in the Payload builder |
blog_post.categories[*].updated_at |
string |
Selectable in the Payload builder |
blog_post.tags[*].id |
string |
Always present |
blog_post.tags[*].name |
string |
Selectable in the Payload builder |
blog_post.tags[*].slug |
string |
Selectable in the Payload builder |
blog_post.tags[*].post_count |
integer |
Selectable in the Payload builder |
blog_post.tags[*].created_at |
string |
Selectable in the Payload builder |
blog_post.created_at |
string |
Selectable in the Payload builder |
blog_post.updated_at |
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.content |
string |
Selectable in the Payload builder |
translation.excerpt |
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 |
Blog post translations deleted
Fired when a blog post's translations are cleared for one or more fields in a locale.
Payload fields
| Field | Type | Description |
|---|---|---|
blog_post.id |
string |
Always present |
blog_post.title |
string |
Selectable in the Payload builder |
blog_post.slug |
string |
Selectable in the Payload builder |
blog_post.content |
string |
Selectable in the Payload builder |
blog_post.excerpt |
string |
Selectable in the Payload builder |
blog_post.featured_image_id |
string |
Selectable in the Payload builder |
blog_post.featured_image_url |
string |
Selectable in the Payload builder |
blog_post.featured_image_cdn_url |
string |
Selectable in the Payload builder |
blog_post.author_ref |
string |
Selectable in the Payload builder |
blog_post.author.id |
string |
Always present |
blog_post.author.name |
string |
Selectable in the Payload builder |
blog_post.author.slug |
string |
Selectable in the Payload builder |
blog_post.author.bio |
string |
Selectable in the Payload builder |
blog_post.author.avatar_url |
string |
Selectable in the Payload builder |
blog_post.author.created_at |
string |
Selectable in the Payload builder |
blog_post.seo_title |
string |
Selectable in the Payload builder |
blog_post.seo_description |
string |
Selectable in the Payload builder |
blog_post.template_handle |
string |
Selectable in the Payload builder |
blog_post.status |
string |
Selectable in the Payload builder |
blog_post.publish_at |
string |
Selectable in the Payload builder |
blog_post.published_at |
string |
Selectable in the Payload builder |
blog_post.comment_count |
integer |
Selectable in the Payload builder |
blog_post.categories[*].id |
string |
Always present |
blog_post.categories[*].name |
string |
Selectable in the Payload builder |
blog_post.categories[*].slug |
string |
Selectable in the Payload builder |
blog_post.categories[*].description |
string |
Selectable in the Payload builder |
blog_post.categories[*].seo_title |
string |
Selectable in the Payload builder |
blog_post.categories[*].seo_description |
string |
Selectable in the Payload builder |
blog_post.categories[*].template_handle |
string |
Selectable in the Payload builder |
blog_post.categories[*].post_count |
integer |
Selectable in the Payload builder |
blog_post.categories[*].created_at |
string |
Selectable in the Payload builder |
blog_post.categories[*].updated_at |
string |
Selectable in the Payload builder |
blog_post.tags[*].id |
string |
Always present |
blog_post.tags[*].name |
string |
Selectable in the Payload builder |
blog_post.tags[*].slug |
string |
Selectable in the Payload builder |
blog_post.tags[*].post_count |
integer |
Selectable in the Payload builder |
blog_post.tags[*].created_at |
string |
Selectable in the Payload builder |
blog_post.created_at |
string |
Selectable in the Payload builder |
blog_post.updated_at |
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.content |
string |
Selectable in the Payload builder |
translation.excerpt |
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 |
Blog post metafield translations updated
Fired when a blog post metafield's translation is added or updated for a locale.
Payload fields
| Field | Type | Description |
|---|---|---|
metafield.blog_post_id |
string |
Always present |
metafield.blog_post_title |
string |
Selectable in the Payload builder |
metafield.blog_post_slug |
string |
Selectable in the Payload builder |
metafield.definition_id |
string |
Always present |
metafield.namespace |
string |
Selectable in the Payload builder |
metafield.key |
string |
Selectable in the Payload builder |
metafield.name |
string |
Selectable in the Payload builder |
metafield.type |
string |
Selectable in the Payload builder |
metafield.app_id |
string |
Selectable in the Payload builder |
metafield.app_access |
string |
Selectable in the Payload builder |
metafield.merchant_access |
string |
Selectable in the Payload builder |
locale |
string |
Selectable in the Payload builder |
translation.value |
string |
Selectable in the Payload builder |
updated_at |
string |
Selectable in the Payload builder |
Blog post metafield translations deleted
Fired when a blog post metafield's translation is cleared for a locale, including when its blog post is deleted.
Payload fields
| Field | Type | Description |
|---|---|---|
metafield.blog_post_id |
string |
Always present |
metafield.blog_post_title |
string |
Selectable in the Payload builder |
metafield.blog_post_slug |
string |
Selectable in the Payload builder |
metafield.definition_id |
string |
Always present |
metafield.namespace |
string |
Selectable in the Payload builder |
metafield.key |
string |
Selectable in the Payload builder |
metafield.name |
string |
Selectable in the Payload builder |
metafield.type |
string |
Selectable in the Payload builder |
metafield.app_id |
string |
Selectable in the Payload builder |
metafield.app_access |
string |
Selectable in the Payload builder |
metafield.merchant_access |
string |
Selectable in the Payload builder |
locale |
string |
Selectable in the Payload builder |
translation.value |
string |
Selectable in the Payload builder |
updated_at |
string |
Selectable in the Payload builder |