Blog Tags

Create, read, update, delete, bulk manage, translate, and subscribe to blog tags through the Store API.

Blog tags organize posts by topic. Reads require read_blog; writes require write_blog. Names and slugs must be unique in the store. An omitted create slug is generated from the name. An update preserves an omitted slug and rejects a supplied blank slug.

Deleting an assigned tag requires confirmation and removes its assignments without deleting posts. Bulk deletion reports deleted IDs and failures separately. Translate names and slugs through Blog Tag translations.

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. max_per_store is this store's plan cap, count is how many exist now, and usage is the localized label.

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. total counts matches for the current filters; store_total counts all records in the store and can be compared with the store capacity returned by the limits endpoint. Use search to filter by name or slug. Invalid pagination and unsupported sort values are rejected.

Query parameters

Name Type Description
page integer

Page number.

Example: 1
limit integer

Page size, up to list_max_limit from the Blog Tag limits.

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 VALIDATION_LIST_INVALID_SORT_BY

    Sort field is not supported for this endpoint.

  • 400 VALIDATION_LIST_INVALID_SORT_DIRECTION

    Sort direction must be asc or desc.

  • 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, it is generated 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_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.

  • 400 BLOG_TAG_PLAN_LIMIT_REACHED

    This store is at its plan blog tag cap.

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_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.

  • 400 BLOG_TAG_SLUG_REQUIRED

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

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. Missing or blocked tags are reported in failed; eligible tags are reported in deleted. A confirmation-required response makes no changes until confirmed.

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 BLOG_TAG_CONFIRMATION_INVALID

    Confirmation token is missing, expired, or mismatched.

  • 404 NOT_FOUND

    One or more blog tags do not exist in this store.

  • 404 BLOG_TAG_NOT_FOUND

    A 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

Type

Create

Update

Required

Translatable

name

string

Yes

Yes

create

Yes

slug

string

Yes

Yes

Yes

post_count

integer

No

No

No

created_at

string (RFC 3339)

No

No

No

updated_at

string (RFC 3339)

No

No

No

Webhook events#

Subscribe to these events to keep your integration in sync with blog tags. Each event shows the required Store API scope and store permission, the available payload fields, and an example payload. Subscription setup is validated against those permissions; delivery is always restricted to the subscription's store.

Blog tag created

EVENT blog_tags/create App scope: read_blog Staff permission: blog:write

Fired when a blog tag is created.

Payload fields

Field Type Description
blog_tag.id string Always present
blog_tag.name string Selectable in the Payload builder
blog_tag.slug string Selectable in the Payload builder
blog_tag.post_count integer Selectable in the Payload builder
blog_tag.created_at string Selectable in the Payload builder

Blog tag updated

EVENT blog_tags/update App scope: read_blog Staff permission: blog:write

Fired when a blog tag is updated.

Payload fields

Field Type Description
blog_tag.id string Always present
blog_tag.name string Selectable in the Payload builder
blog_tag.slug string Selectable in the Payload builder
blog_tag.post_count integer Selectable in the Payload builder
blog_tag.created_at string Selectable in the Payload builder

Blog tag deleted

EVENT blog_tags/delete App scope: read_blog Staff permission: blog:write

Fired when a blog tag is deleted.

Payload fields

Field Type Description
blog_tag.id string Always present
blog_tag.name string Selectable in the Payload builder
blog_tag.slug string Selectable in the Payload builder