Blog Tags require blog scopes. Reads use read_blog; writes use write_blog. Blog Tags support name and slug fields. slug is optional on create and generated from the name when omitted; on update, a supplied slug must be non-empty and valid. Deleting a blog tag assigned to blog posts requires confirmation and removes the blog tag from those posts. AI translation is not exposed through the Store API.
Endpoints#
Blog Tag limits
Fetch Blog Tag limits and per-field constraints.
Returns the per-field maximum lengths and request caps that apply to Blog Tag endpoints. Useful for clients to validate inputs before sending them and to size UIs.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
List blog tags
List blog tags for the store.
Returns paginated Blog Tags. Use search to filter by name or slug. Invalid page or limit values are rejected; unsupported sort values fall back to the service's stable default ordering.
Query parameters
| Name | Type | Description |
|---|---|---|
page
|
integer |
Page number. |
limit
|
integer |
Page size. |
search
|
string |
Search Blog Tags by name or slug. |
sort_by
|
string |
Sort field from the Blog Tag list contract.
Allowed values
namepost_countcreated_atupdated_at |
sort_direction
|
string |
Sort direction from the Blog Tag 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 a positive integer within the contract cap.
-
400BLOG_TAG_SEARCH_TOO_LONGSearch exceeds the Blog Tag contract max length.
Get a blog tag
Fetch one blog tag by id.
Returns the Blog Tag if it belongs to the token's store.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Blog Tag id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Errors
-
400STORE_API_INVALID_TAG_IDBlog Tag id is not a valid UUID.
-
404NOT_FOUNDBlog Tag does not exist in this store.
Create a blog tag
Create a blog tag.
Creates a Blog Tag. name is required. slug is optional on create; when omitted or empty, the backend generates it from the name.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
required
|
string |
Blog Tag name. |
slug
|
string |
Optional slug. Omit to generate from name. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body is not valid JSON.
-
400BLOG_TAG_NAME_REQUIREDName is empty after normalization.
-
400BLOG_TAG_NAME_TOO_LONGName exceeds the Blog Tag contract max length.
-
400BLOG_TAG_SLUG_REQUIREDSlug is empty on update. Blank slug auto-generation is only available on create.
-
400BLOG_TAG_SLUG_FORMATSlug is not valid for Blog Tag URLs.
-
400BLOG_TAG_SLUG_TOO_LONGSlug exceeds the Blog Tag contract max length.
-
400BLOG_TAG_SLUG_GENERATION_FAILEDA slug could not be generated from the supplied name.
-
400BLOG_TAG_UNIQUE_SLUG_GENERATION_FAILEDA unique generated slug could not be found; supply a slug explicitly.
-
400BLOG_TAG_LIMIT_REACHEDStore Blog Tag cap has been reached.
-
409BLOG_TAG_DUPLICATEName or slug already exists in this store.
Update a blog tag
Update a blog tag.
Updates provided Blog Tag 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 name.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Blog Tag id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
name
|
string |
Blog Tag name. |
slug
|
string |
New slug. Omit to leave the current slug unchanged; an empty value is invalid. |
Errors
-
400STORE_API_INVALID_TAG_IDBlog Tag id is not a valid UUID.
-
400STORE_API_INVALID_REQUEST_BODYRequest body is not valid JSON.
-
404NOT_FOUNDBlog Tag does not exist in this store.
-
400BLOG_TAG_NAME_REQUIREDName is empty after normalization.
-
400BLOG_TAG_NAME_TOO_LONGName exceeds the Blog Tag contract max length.
-
400BLOG_TAG_SLUG_REQUIREDSlug is empty on update. Blank slug auto-generation is only available on create.
-
400BLOG_TAG_SLUG_FORMATSlug is not valid for Blog Tag URLs.
-
400BLOG_TAG_SLUG_TOO_LONGSlug exceeds the Blog Tag contract max length.
-
400BLOG_TAG_SLUG_GENERATION_FAILEDA slug could not be generated from the supplied name.
-
400BLOG_TAG_UNIQUE_SLUG_GENERATION_FAILEDA unique generated slug could not be found; supply a slug explicitly.
-
400BLOG_TAG_LIMIT_REACHEDStore Blog Tag cap has been reached.
-
409BLOG_TAG_DUPLICATEName or slug already exists in this store.
Delete a blog tag
Delete a blog tag.
Deletes a Blog Tag. If the tag is assigned to blog posts, retry with the returned confirmation token; confirmed delete removes the tag from those posts.
Path parameters
| Name | Type | Description |
|---|---|---|
id
required
|
uuid |
Blog Tag id. |
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
confirmed
|
boolean |
On a confirmation retry, set this to true and send the returned confirmation_token. Omit it on the first request. |
confirmation_token
|
string |
Token from the CONFIRMATION_REQUIRED response. Omit it on the first request and resend the exact same id selection when using it. |
Errors
-
400STORE_API_INVALID_TAG_IDBlog Tag id is not a valid UUID.
-
400STORE_API_INVALID_REQUEST_BODYA non-empty delete body is not valid JSON.
-
400BLOG_TAG_CONFIRMATION_INVALIDConfirmation token is missing, expired, or mismatched.
-
404NOT_FOUNDBlog Tag does not exist in this store.
-
404BLOG_TAG_NOT_FOUNDBlog Tag disappeared while deletion was being committed.
-
409CONFIRMATION_REQUIREDDelete requires confirmation. Details include localized warnings and a confirmation token.
-
409BLOG_TAG_BULK_RACEDAssignments changed while deletion was running; retry with fresh state.
Bulk delete blog tags
Delete multiple blog tags.
Deletes multiple Blog Tags in one request. When any selected tag is assigned to blog posts, the request returns a confirmation token; retry with it to remove them all together. If any deletion can't proceed, none are deleted.
Headers
| Name | Type | Description |
|---|---|---|
Authorization
required
|
string |
Bearer Store API token. |
Body parameters
| Name | Type | Description |
|---|---|---|
tag_ids
required
|
array<uuid> |
Blog Tag ids to delete. |
confirmed
|
boolean |
On a confirmation retry, set this to true and send the returned confirmation_token. Omit it on the first request. |
confirmation_token
|
string |
Token from the CONFIRMATION_REQUIRED response. Omit it on the first request and resend the exact same id selection when using it. |
Errors
-
400STORE_API_INVALID_REQUEST_BODYRequest body is not valid JSON.
-
400STORE_API_INVALID_TAG_IDOne tag id is not a valid UUID.
-
400BLOG_TAG_BULK_NO_IDSNo Blog Tag ids were provided.
-
400BLOG_TAG_BULK_DELETE_TOO_MANYBatch exceeds the Blog Tag bulk delete cap.
-
400STORE_API_INVALID_TAG_IDBlog Tag id is not a valid UUID.
-
400STORE_API_INVALID_REQUEST_BODYA non-empty delete body is not valid JSON.
-
400BLOG_TAG_CONFIRMATION_INVALIDConfirmation token is missing, expired, or mismatched.
-
404NOT_FOUNDBlog Tag does not exist in this store.
-
404BLOG_TAG_NOT_FOUNDBlog Tag disappeared while deletion was being committed.
-
409CONFIRMATION_REQUIREDDelete requires confirmation. Details include localized warnings and a confirmation token.
-
409BLOG_TAG_BULK_RACEDAssignments changed while deletion was running; retry with fresh state.
Fields#
Field |
Kind |
Create |
Update |
Required |
Translatable |
|---|---|---|---|---|---|
|
text |
Yes |
Yes |
create |
Yes |
|
slug |
Yes |
Yes |
Yes |
|
|
integer |
No |
No |
No |
|
|
datetime |
No |
No |
No |
|
|
datetime |
No |
No |
No |
Webhook events#
Blog Tag webhook events are declared by the Blog Tag resource contract. The event cards below include the topic, subscription scope, store permission, payload schema, and sample payload.
Blog tag created
Fired when a blog tag is created.
Payload fields
| Field | Type | Description |
|---|---|---|
blog_tag.id |
string |
Always present |
blog_tag.name |
string |
Can be removed/added via the Payload builder |
blog_tag.slug |
string |
Can be removed/added via the Payload builder |
blog_tag.post_count |
integer |
Can be removed/added via the Payload builder |
blog_tag.created_at |
string |
Can be removed/added via the Payload builder |
Blog tag updated
Fired when a blog tag is updated.
Payload fields
| Field | Type | Description |
|---|---|---|
blog_tag.id |
string |
Always present |
blog_tag.name |
string |
Can be removed/added via the Payload builder |
blog_tag.slug |
string |
Can be removed/added via the Payload builder |
blog_tag.post_count |
integer |
Can be removed/added via the Payload builder |
blog_tag.created_at |
string |
Can be removed/added via the Payload builder |
Blog tag deleted
Fired when a blog tag is deleted.
Payload fields
| Field | Type | Description |
|---|---|---|
blog_tag.id |
string |
Always present |
blog_tag.name |
string |
Can be removed/added via the Payload builder |
blog_tag.slug |
string |
Can be removed/added via the Payload builder |