Blog Posts require blog scopes. Reads use read_blog; writes use write_blog. Blog Posts support title, slug, content, excerpt, featured_image_id, author_ref, seo_title, seo_description, status, publish_at, category_ids, tag_ids, and template_handle fields. author_ref must reference a blog author in the same store; responses enrich it as author. slug is optional on create and generated from the title when omitted; on update, a supplied slug must be non-empty and valid. Assigning a non-empty featured_image_id also requires read_files for the referenced upload image. On create, omitting template_handle assigns default_blog. Use default_blog for the default Blog Post template, or pass an alternate Blog Post template handle configured for the store. Omit template_handle on update to leave the current assignment unchanged; an empty string is invalid. AI translation is not exposed through the Store API.
Endpoints#
Blog Post limits
Fetch Blog Post limits and per-field constraints.
Returns the per-field maximum lengths, enum values, and request caps that apply to Blog Post endpoints.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
List blog posts
List blog posts for the store.
Returns paginated Blog Posts. Filter by search, status, author, category, tag, or publication date. Invalid pagination, UUID, and sort parameters are rejected instead of silently defaulted.
Query parameters
| Name | Type | Description |
|---|---|---|
page
|
integer |
Page number. |
limit
|
integer |
Page size. |
search
|
string |
Search Blog Posts by title or slug. |
status
|
string |
Filter by status. |
author_ref
|
uuid |
Filter by blog author id. |
category_id
|
uuid |
Filter by assigned blog category id. |
tag_id
|
uuid |
Filter by assigned blog tag id. |
publication_date_from
|
date |
Include posts published or scheduled on or after this store-local date (YYYY-MM-DD). |
publication_date_to
|
date |
Include posts published or scheduled on or before this store-local date (YYYY-MM-DD). |
sort_by
|
string |
Sort field from the Blog Post list contract.
Allowed values
titlestatusauthorcomment_countpublished_atpublish_atcreated_atupdated_at |
sort_direction
|
string |
Sort direction from the Blog Post list contract.
Allowed values
ascdesc |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400VALIDATION_LIST_INVALID_PAGEPage must be a positive integer.
-
400VALIDATION_LIST_INVALID_LIMITLimit must be within the Blog Post contract cap.
-
400VALIDATION_LIST_INVALID_SORT_BYSort field is not supported.
-
400VALIDATION_LIST_INVALID_SORT_DIRECTIONSort direction must be asc or desc.
-
400BLOG_POST_SEARCH_TOO_LONGSearch exceeds the Blog Post contract max length.
-
400BLOG_POST_STATUS_FILTER_INVALIDStatus is not one of the allowed values.
-
400BLOG_POST_PUBLICATION_DATE_FILTER_INVALIDPublication dates must use YYYY-MM-DD and form a valid range.
-
400STORE_API_INVALID_REQUEST_BODYAn author id is not a UUID.
-
400STORE_API_INVALID_CATEGORY_IDCategory id is not a UUID.
-
400STORE_API_INVALID_TAG_IDTag id is not a UUID.
Search blog posts
Search blog posts for picker UIs.
Returns lightweight post options. limit is strict and capped by the Blog Post contract.
Query parameters
| Name | Type | Description |
|---|---|---|
q
|
string |
Search query. |
status
|
string |
Filter by status. |
limit
|
integer |
Suggestion count. |
offset
|
integer |
Result offset. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Get a blog post
Fetch one blog post by id.
Returns the Blog Post if it belongs to the token's store.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Blog Post id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
404BLOG_POST_NOT_FOUNDBlog Post does not exist in this store.
Create a blog post
Create a blog post.
Creates a Blog Post. title, author_ref, and status are required. author_ref must identify an author in this store. slug is optional on create; when omitted or empty, the backend generates it from the title.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
title
required
|
string |
Blog Post title. |
slug
|
string |
Optional slug. Omit to generate from title. |
content
|
string |
Optional sanitized HTML content. |
excerpt
|
string |
Optional excerpt. |
featured_image_id
|
string |
Optional image file id. Non-empty values must reference an image in this store. |
author_ref
required
|
uuid |
Store-scoped blog author id. |
seo_title
|
string |
Optional SEO title. |
seo_description
|
string |
Optional SEO description. |
status
required
|
string |
Post status: draft, scheduled, published, or archived. |
publish_at
|
string |
Store-time publish date. Required when status is scheduled. |
template_handle
|
string |
Template assignment. On create, omitting this field or sending an empty string assigns |
category_ids
|
array<uuid> |
Category ids to assign. |
tag_ids
|
array<uuid> |
Tag ids to assign. |
Errors
-
400BLOG_POST_AUTHOR_REQUIREDAuthor is required.
-
400BLOG_POST_TITLE_REQUIREDTitle is empty after normalization.
-
400BLOG_POST_TITLE_TOO_LONGTitle exceeds the Blog Post contract max length.
-
400BLOG_POST_SLUG_REQUIREDSlug is empty on update. Blank slug auto-generation is only available on create.
-
400BLOG_POST_SLUG_FORMATSlug is not valid for Blog Post URLs.
-
400BLOG_POST_SLUG_TOO_LONGSlug exceeds the Blog Post contract max length.
-
404BLOG_AUTHOR_NOT_FOUNDAuthor does not exist in this store.
-
400BLOG_POST_CONTENT_TOO_LONGContent exceeds the Blog Post contract max length.
-
400BLOG_POST_EXCERPT_TOO_LONGExcerpt exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_TITLE_TOO_LONGSEO title exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_DESCRIPTION_TOO_LONGSEO description exceeds the Blog Post contract max length.
-
400BLOG_POST_STATUS_INVALIDStatus is not one of the allowed values.
-
400BLOG_POST_PUBLISH_DATE_REQUIREDScheduled posts require publish_at.
-
400BLOG_POST_CATEGORY_IDS_INVALIDOne or more category ids do not exist in this store.
-
400BLOG_POST_TAG_IDS_INVALIDOne or more tag ids do not exist in this store.
-
400TEMPLATE_HANDLE_INVALIDTemplate handle is not valid for Blog Post templates.
-
400TEMPLATE_HANDLE_NOT_FOUNDTemplate handle does not exist on the store's primary active theme for Blog Post.
-
404BLOG_POST_NOT_FOUNDBlog Post does not exist in this store.
-
409BLOG_POST_SLUG_DUPLICATESlug already exists in this store.
Update a blog post
Update a blog post.
Updates provided Blog Post fields. Omitted fields are left unchanged. When slug is provided it must be non-empty and valid; create is the only path that auto-generates a blank slug from the title.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Blog Post id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
title
|
string |
Blog Post title. |
slug
|
string |
Optional slug. Omit to generate from title. |
content
|
string |
Optional sanitized HTML content. |
excerpt
|
string |
Optional excerpt. |
featured_image_id
|
string |
Optional image file id. Non-empty values must reference an image in this store. |
author_ref
|
uuid |
Store-scoped blog author id. |
seo_title
|
string |
Optional SEO title. |
seo_description
|
string |
Optional SEO description. |
status
|
string |
Post status: draft, scheduled, published, or archived. |
publish_at
|
string |
Store-time publish date. Required when status is scheduled. |
template_handle
|
string |
Template assignment. On create, omitting this field or sending an empty string assigns |
category_ids
|
array<uuid> |
Category ids to assign. |
tag_ids
|
array<uuid> |
Tag ids to assign. |
create_redirect
|
boolean |
When slug changes, create a redirect from the previous post URL. Defaults to true; set false to suppress it. |
Errors
-
400BLOG_POST_AUTHOR_REQUIREDAuthor is required.
-
400BLOG_POST_TITLE_REQUIREDTitle is empty after normalization.
-
400BLOG_POST_TITLE_TOO_LONGTitle exceeds the Blog Post contract max length.
-
400BLOG_POST_SLUG_REQUIREDSlug is empty on update. Blank slug auto-generation is only available on create.
-
400BLOG_POST_SLUG_FORMATSlug is not valid for Blog Post URLs.
-
400BLOG_POST_SLUG_TOO_LONGSlug exceeds the Blog Post contract max length.
-
404BLOG_AUTHOR_NOT_FOUNDAuthor does not exist in this store.
-
400BLOG_POST_CONTENT_TOO_LONGContent exceeds the Blog Post contract max length.
-
400BLOG_POST_EXCERPT_TOO_LONGExcerpt exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_TITLE_TOO_LONGSEO title exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_DESCRIPTION_TOO_LONGSEO description exceeds the Blog Post contract max length.
-
400BLOG_POST_STATUS_INVALIDStatus is not one of the allowed values.
-
400BLOG_POST_PUBLISH_DATE_REQUIREDScheduled posts require publish_at.
-
400BLOG_POST_CATEGORY_IDS_INVALIDOne or more category ids do not exist in this store.
-
400BLOG_POST_TAG_IDS_INVALIDOne or more tag ids do not exist in this store.
-
400TEMPLATE_HANDLE_INVALIDTemplate handle is not valid for Blog Post templates.
-
400TEMPLATE_HANDLE_NOT_FOUNDTemplate handle does not exist on the store's primary active theme for Blog Post.
-
404BLOG_POST_NOT_FOUNDBlog Post does not exist in this store.
-
409BLOG_POST_SLUG_DUPLICATESlug already exists in this store.
Delete a blog post
Delete a blog post.
Deletes a Blog Post together with its category/tag assignments and translations.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Blog Post id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400BLOG_POST_BULK_NO_IDSNo Blog Post ids were provided.
-
400BLOG_POST_BULK_DELETE_TOO_MANYBatch exceeds the Blog Post bulk delete cap.
-
404BLOG_POST_NOT_FOUNDBlog Post does not exist in this store.
Bulk delete blog posts
Delete multiple blog posts.
Deletes multiple Blog Posts in one request. The request is capped by the Blog Post bulk contract.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
post_ids
required
|
array<uuid> |
Blog Post ids to delete. |
Errors
-
400BLOG_POST_BULK_NO_IDSNo Blog Post ids were provided.
-
400BLOG_POST_BULK_DELETE_TOO_MANYBatch exceeds the Blog Post bulk delete cap.
-
404BLOG_POST_NOT_FOUNDBlog Post does not exist in this store.
Bulk update blog post status
Update status for multiple blog posts.
Sets draft, published, or archived status on all supplied post ids. Schedule posts individually because this endpoint does not accept a publish date.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
post_ids
required
|
array<uuid> |
Blog Post ids to update. |
status
required
|
string |
New post status: draft, published, or archived. |
Errors
-
400BLOG_POST_AUTHOR_REQUIREDAuthor is required.
-
400BLOG_POST_TITLE_REQUIREDTitle is empty after normalization.
-
400BLOG_POST_TITLE_TOO_LONGTitle exceeds the Blog Post contract max length.
-
400BLOG_POST_SLUG_REQUIREDSlug is empty on update. Blank slug auto-generation is only available on create.
-
400BLOG_POST_SLUG_FORMATSlug is not valid for Blog Post URLs.
-
400BLOG_POST_SLUG_TOO_LONGSlug exceeds the Blog Post contract max length.
-
404BLOG_AUTHOR_NOT_FOUNDAuthor does not exist in this store.
-
400BLOG_POST_CONTENT_TOO_LONGContent exceeds the Blog Post contract max length.
-
400BLOG_POST_EXCERPT_TOO_LONGExcerpt exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_TITLE_TOO_LONGSEO title exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_DESCRIPTION_TOO_LONGSEO description exceeds the Blog Post contract max length.
-
400BLOG_POST_STATUS_INVALIDStatus is not one of the allowed values.
-
400BLOG_POST_PUBLISH_DATE_REQUIREDScheduled posts require publish_at.
-
400BLOG_POST_CATEGORY_IDS_INVALIDOne or more category ids do not exist in this store.
-
400BLOG_POST_TAG_IDS_INVALIDOne or more tag ids do not exist in this store.
-
400TEMPLATE_HANDLE_INVALIDTemplate handle is not valid for Blog Post templates.
-
400TEMPLATE_HANDLE_NOT_FOUNDTemplate handle does not exist on the store's primary active theme for Blog Post.
-
404BLOG_POST_NOT_FOUNDBlog Post does not exist in this store.
-
409BLOG_POST_SLUG_DUPLICATESlug already exists in this store.
-
400BLOG_POST_BULK_NO_IDSNo Blog Post ids were provided.
-
400BLOG_POST_BULK_UPDATE_TOO_MANYBatch exceeds the Blog Post bulk update cap.
Bulk assign categories
Assign categories to multiple blog posts.
Adds the supplied categories to each post while keeping existing categories.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
post_ids
required
|
array<uuid> |
Blog Post ids to update. |
category_ids
required
|
array<uuid> |
Category ids to add. |
Errors
-
400BLOG_POST_AUTHOR_REQUIREDAuthor is required.
-
400BLOG_POST_TITLE_REQUIREDTitle is empty after normalization.
-
400BLOG_POST_TITLE_TOO_LONGTitle exceeds the Blog Post contract max length.
-
400BLOG_POST_SLUG_REQUIREDSlug is empty on update. Blank slug auto-generation is only available on create.
-
400BLOG_POST_SLUG_FORMATSlug is not valid for Blog Post URLs.
-
400BLOG_POST_SLUG_TOO_LONGSlug exceeds the Blog Post contract max length.
-
404BLOG_AUTHOR_NOT_FOUNDAuthor does not exist in this store.
-
400BLOG_POST_CONTENT_TOO_LONGContent exceeds the Blog Post contract max length.
-
400BLOG_POST_EXCERPT_TOO_LONGExcerpt exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_TITLE_TOO_LONGSEO title exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_DESCRIPTION_TOO_LONGSEO description exceeds the Blog Post contract max length.
-
400BLOG_POST_STATUS_INVALIDStatus is not one of the allowed values.
-
400BLOG_POST_PUBLISH_DATE_REQUIREDScheduled posts require publish_at.
-
400BLOG_POST_CATEGORY_IDS_INVALIDOne or more category ids do not exist in this store.
-
400BLOG_POST_TAG_IDS_INVALIDOne or more tag ids do not exist in this store.
-
400TEMPLATE_HANDLE_INVALIDTemplate handle is not valid for Blog Post templates.
-
400TEMPLATE_HANDLE_NOT_FOUNDTemplate handle does not exist on the store's primary active theme for Blog Post.
-
404BLOG_POST_NOT_FOUNDBlog Post does not exist in this store.
-
409BLOG_POST_SLUG_DUPLICATESlug already exists in this store.
-
400BLOG_POST_BULK_NO_IDSNo Blog Post ids were provided.
-
400BLOG_POST_BULK_UPDATE_TOO_MANYBatch exceeds the Blog Post bulk update cap.
Bulk assign tags
Assign tags to multiple blog posts.
Adds the supplied tags to each post while keeping existing tags.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
post_ids
required
|
array<uuid> |
Blog Post ids to update. |
tag_ids
required
|
array<uuid> |
Tag ids to add. |
Errors
-
400BLOG_POST_AUTHOR_REQUIREDAuthor is required.
-
400BLOG_POST_TITLE_REQUIREDTitle is empty after normalization.
-
400BLOG_POST_TITLE_TOO_LONGTitle exceeds the Blog Post contract max length.
-
400BLOG_POST_SLUG_REQUIREDSlug is empty on update. Blank slug auto-generation is only available on create.
-
400BLOG_POST_SLUG_FORMATSlug is not valid for Blog Post URLs.
-
400BLOG_POST_SLUG_TOO_LONGSlug exceeds the Blog Post contract max length.
-
404BLOG_AUTHOR_NOT_FOUNDAuthor does not exist in this store.
-
400BLOG_POST_CONTENT_TOO_LONGContent exceeds the Blog Post contract max length.
-
400BLOG_POST_EXCERPT_TOO_LONGExcerpt exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_TITLE_TOO_LONGSEO title exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_DESCRIPTION_TOO_LONGSEO description exceeds the Blog Post contract max length.
-
400BLOG_POST_STATUS_INVALIDStatus is not one of the allowed values.
-
400BLOG_POST_PUBLISH_DATE_REQUIREDScheduled posts require publish_at.
-
400BLOG_POST_CATEGORY_IDS_INVALIDOne or more category ids do not exist in this store.
-
400BLOG_POST_TAG_IDS_INVALIDOne or more tag ids do not exist in this store.
-
400TEMPLATE_HANDLE_INVALIDTemplate handle is not valid for Blog Post templates.
-
400TEMPLATE_HANDLE_NOT_FOUNDTemplate handle does not exist on the store's primary active theme for Blog Post.
-
404BLOG_POST_NOT_FOUNDBlog Post does not exist in this store.
-
409BLOG_POST_SLUG_DUPLICATESlug already exists in this store.
-
400BLOG_POST_BULK_NO_IDSNo Blog Post ids were provided.
-
400BLOG_POST_BULK_UPDATE_TOO_MANYBatch exceeds the Blog Post bulk update cap.
Bulk remove categories
Remove categories from multiple blog posts.
Removes the supplied categories from each post while keeping every other category assignment.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
post_ids
required
|
array<uuid> |
Blog Post ids to update. |
category_ids
required
|
array<uuid> |
Category ids to remove. |
Errors
-
400BLOG_POST_AUTHOR_REQUIREDAuthor is required.
-
400BLOG_POST_TITLE_REQUIREDTitle is empty after normalization.
-
400BLOG_POST_TITLE_TOO_LONGTitle exceeds the Blog Post contract max length.
-
400BLOG_POST_SLUG_REQUIREDSlug is empty on update. Blank slug auto-generation is only available on create.
-
400BLOG_POST_SLUG_FORMATSlug is not valid for Blog Post URLs.
-
400BLOG_POST_SLUG_TOO_LONGSlug exceeds the Blog Post contract max length.
-
404BLOG_AUTHOR_NOT_FOUNDAuthor does not exist in this store.
-
400BLOG_POST_CONTENT_TOO_LONGContent exceeds the Blog Post contract max length.
-
400BLOG_POST_EXCERPT_TOO_LONGExcerpt exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_TITLE_TOO_LONGSEO title exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_DESCRIPTION_TOO_LONGSEO description exceeds the Blog Post contract max length.
-
400BLOG_POST_STATUS_INVALIDStatus is not one of the allowed values.
-
400BLOG_POST_PUBLISH_DATE_REQUIREDScheduled posts require publish_at.
-
400BLOG_POST_CATEGORY_IDS_INVALIDOne or more category ids do not exist in this store.
-
400BLOG_POST_TAG_IDS_INVALIDOne or more tag ids do not exist in this store.
-
400TEMPLATE_HANDLE_INVALIDTemplate handle is not valid for Blog Post templates.
-
400TEMPLATE_HANDLE_NOT_FOUNDTemplate handle does not exist on the store's primary active theme for Blog Post.
-
404BLOG_POST_NOT_FOUNDBlog Post does not exist in this store.
-
409BLOG_POST_SLUG_DUPLICATESlug already exists in this store.
-
400BLOG_POST_BULK_NO_IDSNo Blog Post ids were provided.
-
400BLOG_POST_BULK_UPDATE_TOO_MANYBatch exceeds the Blog Post bulk update cap.
Bulk remove tags
Remove tags from multiple blog posts.
Removes the supplied tags from each post while keeping every other tag assignment.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
post_ids
required
|
array<uuid> |
Blog Post ids to update. |
tag_ids
required
|
array<uuid> |
Tag ids to remove. |
Errors
-
400BLOG_POST_AUTHOR_REQUIREDAuthor is required.
-
400BLOG_POST_TITLE_REQUIREDTitle is empty after normalization.
-
400BLOG_POST_TITLE_TOO_LONGTitle exceeds the Blog Post contract max length.
-
400BLOG_POST_SLUG_REQUIREDSlug is empty on update. Blank slug auto-generation is only available on create.
-
400BLOG_POST_SLUG_FORMATSlug is not valid for Blog Post URLs.
-
400BLOG_POST_SLUG_TOO_LONGSlug exceeds the Blog Post contract max length.
-
404BLOG_AUTHOR_NOT_FOUNDAuthor does not exist in this store.
-
400BLOG_POST_CONTENT_TOO_LONGContent exceeds the Blog Post contract max length.
-
400BLOG_POST_EXCERPT_TOO_LONGExcerpt exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_TITLE_TOO_LONGSEO title exceeds the Blog Post contract max length.
-
400BLOG_POST_SEO_DESCRIPTION_TOO_LONGSEO description exceeds the Blog Post contract max length.
-
400BLOG_POST_STATUS_INVALIDStatus is not one of the allowed values.
-
400BLOG_POST_PUBLISH_DATE_REQUIREDScheduled posts require publish_at.
-
400BLOG_POST_CATEGORY_IDS_INVALIDOne or more category ids do not exist in this store.
-
400BLOG_POST_TAG_IDS_INVALIDOne or more tag ids do not exist in this store.
-
400TEMPLATE_HANDLE_INVALIDTemplate handle is not valid for Blog Post templates.
-
400TEMPLATE_HANDLE_NOT_FOUNDTemplate handle does not exist on the store's primary active theme for Blog Post.
-
404BLOG_POST_NOT_FOUNDBlog Post does not exist in this store.
-
409BLOG_POST_SLUG_DUPLICATESlug already exists in this store.
-
400BLOG_POST_BULK_NO_IDSNo Blog Post ids were provided.
-
400BLOG_POST_BULK_UPDATE_TOO_MANYBatch exceeds the Blog Post bulk update cap.
Fields#
Field |
Kind |
Create |
Update |
Required |
Translatable |
|---|---|---|---|---|---|
|
text |
Yes |
Yes |
create |
Yes |
|
slug |
Yes |
Yes |
Yes |
|
|
rich_text |
Yes |
Yes |
Yes |
|
|
textarea |
Yes |
Yes |
Yes |
|
|
image |
Yes |
Yes |
No |
|
|
id |
Yes |
Yes |
create |
No |
|
text |
No |
No |
No |
|
|
text |
Yes |
Yes |
Yes |
|
|
textarea |
Yes |
Yes |
Yes |
|
|
select |
Yes |
Yes |
create |
No |
|
datetime |
Yes |
Yes |
No |
|
|
datetime |
No |
No |
No |
|
|
template |
Yes |
Yes |
No |
|
|
id_list |
Yes |
Yes |
No |
|
|
id_list |
Yes |
Yes |
No |
|
|
integer |
No |
No |
No |
|
|
integer |
No |
No |
No |
|
|
datetime |
No |
No |
No |
|
|
datetime |
No |
No |
No |
|
|
url |
No |
No |
No |
No |
Webhook events#
Blog Post webhook events are declared by the Blog Post resource contract. The event cards below include the topic, subscription scope, store permission, payload schema, and sample payload.
Blog post created
Fired when a blog post is created.
Payload fields
| Field | Type | Description |
|---|---|---|
blog_post.id |
string |
Always present |
blog_post.title |
string |
Can be removed/added via the Payload builder |
blog_post.slug |
string |
Can be removed/added via the Payload builder |
blog_post.content |
string |
Can be removed/added via the Payload builder |
blog_post.excerpt |
string |
Can be removed/added via the Payload builder |
blog_post.featured_image_id |
string |
Can be removed/added via the Payload builder |
blog_post.featured_image_url |
string |
Can be removed/added via the Payload builder |
blog_post.featured_image_cdn_url |
string |
Can be removed/added via the Payload builder |
blog_post.author_ref |
string |
Can be removed/added via the Payload builder |
blog_post.author.id |
string |
Always present |
blog_post.author.name |
string |
Can be removed/added via the Payload builder |
blog_post.author.slug |
string |
Can be removed/added via the Payload builder |
blog_post.author.bio |
string |
Can be removed/added via the Payload builder |
blog_post.author.avatar_url |
string |
Can be removed/added via the Payload builder |
blog_post.author.created_at |
string |
Can be removed/added via the Payload builder |
blog_post.seo_title |
string |
Can be removed/added via the Payload builder |
blog_post.seo_description |
string |
Can be removed/added via the Payload builder |
blog_post.template_handle |
string |
Can be removed/added via the Payload builder |
blog_post.status |
string |
Can be removed/added via the Payload builder |
blog_post.publish_at |
string |
Can be removed/added via the Payload builder |
blog_post.published_at |
string |
Can be removed/added via the Payload builder |
blog_post.comment_count |
integer |
Can be removed/added via the Payload builder |
blog_post.categories[*].id |
string |
Always present |
blog_post.categories[*].name |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].slug |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].description |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].seo_title |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].seo_description |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].template_handle |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].post_count |
integer |
Can be removed/added via the Payload builder |
blog_post.categories[*].created_at |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].updated_at |
string |
Can be removed/added via the Payload builder |
blog_post.tags[*].id |
string |
Always present |
blog_post.tags[*].name |
string |
Can be removed/added via the Payload builder |
blog_post.tags[*].slug |
string |
Can be removed/added via the Payload builder |
blog_post.tags[*].post_count |
integer |
Can be removed/added via the Payload builder |
blog_post.tags[*].created_at |
string |
Can be removed/added via the Payload builder |
blog_post.created_at |
string |
Can be removed/added via the Payload builder |
blog_post.updated_at |
string |
Can be removed/added via the Payload builder |
Blog post updated
Fired when a blog post is updated.
Payload fields
| Field | Type | Description |
|---|---|---|
blog_post.id |
string |
Always present |
blog_post.title |
string |
Can be removed/added via the Payload builder |
blog_post.slug |
string |
Can be removed/added via the Payload builder |
blog_post.content |
string |
Can be removed/added via the Payload builder |
blog_post.excerpt |
string |
Can be removed/added via the Payload builder |
blog_post.featured_image_id |
string |
Can be removed/added via the Payload builder |
blog_post.featured_image_url |
string |
Can be removed/added via the Payload builder |
blog_post.featured_image_cdn_url |
string |
Can be removed/added via the Payload builder |
blog_post.author_ref |
string |
Can be removed/added via the Payload builder |
blog_post.author.id |
string |
Always present |
blog_post.author.name |
string |
Can be removed/added via the Payload builder |
blog_post.author.slug |
string |
Can be removed/added via the Payload builder |
blog_post.author.bio |
string |
Can be removed/added via the Payload builder |
blog_post.author.avatar_url |
string |
Can be removed/added via the Payload builder |
blog_post.author.created_at |
string |
Can be removed/added via the Payload builder |
blog_post.seo_title |
string |
Can be removed/added via the Payload builder |
blog_post.seo_description |
string |
Can be removed/added via the Payload builder |
blog_post.template_handle |
string |
Can be removed/added via the Payload builder |
blog_post.status |
string |
Can be removed/added via the Payload builder |
blog_post.publish_at |
string |
Can be removed/added via the Payload builder |
blog_post.published_at |
string |
Can be removed/added via the Payload builder |
blog_post.comment_count |
integer |
Can be removed/added via the Payload builder |
blog_post.categories[*].id |
string |
Always present |
blog_post.categories[*].name |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].slug |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].description |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].seo_title |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].seo_description |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].template_handle |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].post_count |
integer |
Can be removed/added via the Payload builder |
blog_post.categories[*].created_at |
string |
Can be removed/added via the Payload builder |
blog_post.categories[*].updated_at |
string |
Can be removed/added via the Payload builder |
blog_post.tags[*].id |
string |
Always present |
blog_post.tags[*].name |
string |
Can be removed/added via the Payload builder |
blog_post.tags[*].slug |
string |
Can be removed/added via the Payload builder |
blog_post.tags[*].post_count |
integer |
Can be removed/added via the Payload builder |
blog_post.tags[*].created_at |
string |
Can be removed/added via the Payload builder |
blog_post.created_at |
string |
Can be removed/added via the Payload builder |
blog_post.updated_at |
string |
Can be removed/added via the Payload builder |
Blog post deleted
Fired when a blog post is deleted.
Payload fields
| Field | Type | Description |
|---|---|---|
blog_post.id |
string |
Always present |
blog_post.title |
string |
Can be removed/added via the Payload builder |
blog_post.slug |
string |
Can be removed/added via the Payload builder |
Blog settings updated
Fired when blog comment settings change.
Payload fields
| Field | Type | Description |
|---|---|---|
settings.comments_mode |
string |
Always present |
settings.comments_moderation |
boolean |
Can be removed/added via the Payload builder |
settings.updated_at |
string |
Always present |