Skip to content
Kumquat
Esc
↑↓navigate↵open⌘Jpreview

Propose Tag

Idempotent by slug — a value the Tags field doesn’t recognize calls this to coin it, and calling it again for the same slug just returns the tag that already exists (so an admin adding a tag someone already coined does not silently re-status it).

status is admin-only: without the check, anyone with write access could coin a tag straight into the shared vocabulary and skip the review that promotion exists to be.

POST/api/v1/tags
Authorization
AuthorizationBearer token · headerrequired
or
AuthorizationOAuth2 access token · headerrequired
Request body
requiredapplication/json
slugstringrequired
min length 1 · max length 32
labelstringrequired
min length 1 · max length 64
statusTagStatus | any
Show properties
Any of:
TagStatus
string
any
any
Responses
200Successful Response
successboolean
default: true
dataCreativeTagWithUsage | any
Show properties
Any of:
CreativeTagWithUsage
idstringrequired
slugstringrequired
labelstringrequired
statusTagStatusrequired
A creative tag's lifecycle. `PROPOSED` on first use (`Tags` field, coined free-form); an admin promotes it to `APPROVED` once it earns a place in the shared vocabulary, or retires it to `ARCHIVED`. The `slug` does not move across this — every creative that already carries it keeps carrying it, so promotion is a one-document status write. A *rename* is the one thing that does move it, because the slug is derived from the label; see `set_label`.
Allowed:proposedapprovedarchived
created_bystringrequired
created_atstring<date-time>required
updated_atstring<date-time>required
usage_countinteger
default: 0
any
any
messagestring | any
Show properties
Any of:
string
string
any
any
errorsstring[] | any
Show properties
Any of:
string[]
Array of string
string
any
any
422Validation Error
detailValidationError[]
Show properties
Array of ValidationError
locstring | integer[]required
Show properties
Array of string | integer
Any of:
string
string
integer
integer
msgstringrequired
typestringrequired
inputany
ctxobject
Request
curl -X POST "/api/v1/tags" \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
  "slug": "string",
  "label": "string",
  "status": "proposed"
}'
Response
{
  "success": true,
  "data": {
    "id": "string",
    "slug": "string",
    "label": "string",
    "status": "proposed",
    "created_by": "string",
    "created_at": "2019-08-24T14:15:22Z",
    "updated_at": "2019-08-24T14:15:22Z",
    "usage_count": 0
  },
  "message": "string",
  "errors": [
    "string"
  ]
}