Blog Tags

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

GET read_blog

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

GET read_blog

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.

Example: 1
limit integer

Page size.

Example: 20
search string

Search Blog Tags by name or slug.

Example: product-updates
sort_by string

Sort field from the Blog Tag list contract.

Allowed values
namepost_countcreated_atupdated_at
Example: name
sort_direction string

Sort direction from the Blog Tag list contract.

Allowed values
ascdesc
Example: asc

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 VALIDATION_LIST_INVALID_PAGE

    page must be a positive integer.

  • 400 VALIDATION_LIST_INVALID_LIMIT

    limit must be a positive integer within the contract cap.

  • 400 BLOG_TAG_SEARCH_TOO_LONG

    Search exceeds the Blog Tag contract max length.

Get a blog tag

GET read_blog

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.

Example: 5ff7d4ea-3250-4a4d-9d26-07f64d917d31

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Errors

  • 400 STORE_API_INVALID_TAG_ID

    Blog Tag id is not a valid UUID.

  • 404 NOT_FOUND

    Blog Tag does not exist in this store.

Create a blog tag

POST write_blog

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.

Example: Product Updates
slug string

Optional slug. Omit to generate from name.

Example: product-updates

Errors

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body is not valid JSON.

  • 400 BLOG_TAG_NAME_REQUIRED

    Name is empty after normalization.

  • 400 BLOG_TAG_NAME_TOO_LONG

    Name exceeds the Blog Tag contract max length.

  • 400 BLOG_TAG_SLUG_REQUIRED

    Slug is empty on update. Blank slug auto-generation is only available on create.

  • 400 BLOG_TAG_SLUG_FORMAT

    Slug is not valid for Blog Tag URLs.

  • 400 BLOG_TAG_SLUG_TOO_LONG

    Slug exceeds the Blog Tag contract max length.

  • 400 BLOG_TAG_SLUG_GENERATION_FAILED

    A slug could not be generated from the supplied name.

  • 400 BLOG_TAG_UNIQUE_SLUG_GENERATION_FAILED

    A unique generated slug could not be found; supply a slug explicitly.

  • 400 BLOG_TAG_LIMIT_REACHED

    Store Blog Tag cap has been reached.

  • 409 BLOG_TAG_DUPLICATE

    Name or slug already exists in this store.

Update a blog tag

PUT write_blog

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.

Example: 5ff7d4ea-3250-4a4d-9d26-07f64d917d31

Headers

Name Type Description
Authorization required string

Bearer Store API token.

Body parameters

Name Type Description
name string

Blog Tag name.

Example: Product Updates
slug string

New slug. Omit to leave the current slug unchanged; an empty value is invalid.

Example: product-updates

Errors

  • 400 STORE_API_INVALID_TAG_ID

    Blog Tag id is not a valid UUID.

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body is not valid JSON.

  • 404 NOT_FOUND

    Blog Tag does not exist in this store.

  • 400 BLOG_TAG_NAME_REQUIRED

    Name is empty after normalization.

  • 400 BLOG_TAG_NAME_TOO_LONG

    Name exceeds the Blog Tag contract max length.

  • 400 BLOG_TAG_SLUG_REQUIRED

    Slug is empty on update. Blank slug auto-generation is only available on create.

  • 400 BLOG_TAG_SLUG_FORMAT

    Slug is not valid for Blog Tag URLs.

  • 400 BLOG_TAG_SLUG_TOO_LONG

    Slug exceeds the Blog Tag contract max length.

  • 400 BLOG_TAG_SLUG_GENERATION_FAILED

    A slug could not be generated from the supplied name.

  • 400 BLOG_TAG_UNIQUE_SLUG_GENERATION_FAILED

    A unique generated slug could not be found; supply a slug explicitly.

  • 400 BLOG_TAG_LIMIT_REACHED

    Store Blog Tag cap has been reached.

  • 409 BLOG_TAG_DUPLICATE

    Name or slug already exists in this store.

Delete a blog tag

DELETE write_blog

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.

Example: 5ff7d4ea-3250-4a4d-9d26-07f64d917d31

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

  • 400 STORE_API_INVALID_TAG_ID

    Blog Tag id is not a valid UUID.

  • 400 STORE_API_INVALID_REQUEST_BODY

    A non-empty delete body is not valid JSON.

  • 400 BLOG_TAG_CONFIRMATION_INVALID

    Confirmation token is missing, expired, or mismatched.

  • 404 NOT_FOUND

    Blog Tag does not exist in this store.

  • 404 BLOG_TAG_NOT_FOUND

    Blog Tag disappeared while deletion was being committed.

  • 409 CONFIRMATION_REQUIRED

    Delete requires confirmation. Details include localized warnings and a confirmation token.

  • 409 BLOG_TAG_BULK_RACED

    Assignments changed while deletion was running; retry with fresh state.

Bulk delete blog tags

POST write_blog

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.

Example: 5ff7d4ea-3250-4a4d-9d26-07f64d917d31
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

  • 400 STORE_API_INVALID_REQUEST_BODY

    Request body is not valid JSON.

  • 400 STORE_API_INVALID_TAG_ID

    One tag id is not a valid UUID.

  • 400 BLOG_TAG_BULK_NO_IDS

    No Blog Tag ids were provided.

  • 400 BLOG_TAG_BULK_DELETE_TOO_MANY

    Batch exceeds the Blog Tag bulk delete cap.

  • 400 STORE_API_INVALID_TAG_ID

    Blog Tag id is not a valid UUID.

  • 400 STORE_API_INVALID_REQUEST_BODY

    A non-empty delete body is not valid JSON.

  • 400 BLOG_TAG_CONFIRMATION_INVALID

    Confirmation token is missing, expired, or mismatched.

  • 404 NOT_FOUND

    Blog Tag does not exist in this store.

  • 404 BLOG_TAG_NOT_FOUND

    Blog Tag disappeared while deletion was being committed.

  • 409 CONFIRMATION_REQUIRED

    Delete requires confirmation. Details include localized warnings and a confirmation token.

  • 409 BLOG_TAG_BULK_RACED

    Assignments changed while deletion was running; retry with fresh state.

Fields#

Field

Kind

Create

Update

Required

Translatable

name

text

Yes

Yes

create

Yes

slug

slug

Yes

Yes

Yes

post_count

integer

No

No

No

created_at

datetime

No

No

No

updated_at

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

EVENT blog_tags/create write_blog blog:write

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

EVENT blog_tags/update write_blog blog:write

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

EVENT blog_tags/delete write_blog blog:write

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