Tags

Tags are reusable, publication-scoped labels. Posts assign an ordered tag list through /post/save; the public read API provides tag indexes and archives.

Authentication

All routes require a bearer token and the named publication capability. Use a publication selector for lists and creates. An existing tag_id identifies the publication; any accompanying selector must match.

Routes

Route Methods Capability Required input Optional input and behavior Success result
/tag/list GET, POST taxonomy.list Publication selector Pagination Paginated tags.
/tag/get POST taxonomy.list tag_id, or publication selector plus slug tag.
/tag/save POST taxonomy.save Create: publication selector and name; update: tag_id name, slug, description, seo, metadata Saved tag.
/tag/merge POST taxonomy.merge source_tag_id, target_tag_id Merge result.
/tag/delete POST taxonomy.delete tag_id Matching publication selector Deleted tag.

Tag object and save fields

{
  "tag_id": "TAG_UUID",
  "publication_id": "PUBLICATION_UUID",
  "slug": "release-notes",
  "name": "Release Notes",
  "description": "Product and deployment announcements.",
  "seo": { "title": "Release Notes" },
  "metadata": null
}

/tag/save uses tag_id for an update, or a publication selector and name to create. slug is optional and generated from name when omitted or empty. description accepts a string or null; seo and metadata accept an object, array, or null.

curl -sS https://api.blog.service.m7.org/v1/tag/save \
  -H 'Authorization: Bearer ACCESS_TOKEN' \
  -H 'Content-Type: application/json' \
  -d '{"publication_slug":"engineering-notes","name":"Release Notes"}'

/tag/list accepts the standard pagination fields. Merge requires two distinct tags in the same publication, moves source assignments to the target, removes duplicate assignments, then deletes the source tag. Delete is permanent and returns 409 while a post is still assigned the tag.