Tag
Resource: Tag — CRUD endpoints
A label attached to other records. This model does double duty. When type is null the row is a plain tag — a free-form label attached to clients, projects, tasks, users, and expense categories via TagAssignment. When type is set the row is a skill (part of Skill Management): 1 = skill, 2 = language, 3 = certificate. Skills require a category and are assigned to users via SkillAssignment. Which rows a GET returns depends on the type filter and the includeSkills query parameter.
List Tag (find where)
Find a list of Tag records that match the specified criteria.
Tip: All query parameters accept multiple values for array filtering — e.g. ?id=1&id=2 or ?id[]=1&id[]=2. This also works within the where parameter: ?where={"id":[1,2,3]}.
Note: The per-attribute filter parameters and the where parameter are mutually exclusive. If where is supplied, the per-attribute filters are ignored — put all filter criteria inside where instead. limit, skip, sort, and populate are unaffected.
query Parameters
typeDistinguishes a plain tag from a skill. Null = plain tag; 1 = skill, 2 = language, 3 = certificate. A tag cannot be converted to a skill or vice versa after creation, though a skill's type may be changed between skill, language, and certificate.
statusFilter by status (1 = active, 0 = inactive)
categoryID of the associated TagCategory record. Only used by skills — the category the skill belongs to. Required when creating a skill; unused for plain tags.
idFilter by record ID
createdAtFilter by creation date (YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss.sssZ). This is an exact match filter; for range queries (greater than, less than), use the where parameter instead
updatedAtFilter by last update date (YYYY-MM-DD or YYYY-MM-DDTHH:mm:ss.sssZ). This is an exact match filter; for range queries (greater than, less than), use the where parameter instead
includeSkillsWhen true, includes skills (Tag records with a type) in the results alongside plain tags. When omitted or false, only plain tags are returned.
whereA JSON-encoded Waterline criteria for advanced filtering. Only whitelisted criteria are supported: type, status, category, id, createdAt, updatedAt. Sub-attribute modifiers such as startsWith, >=, <=, >, <, and != are supported on any whitelisted criterion. The contains modifier is not supported on this model.
Note: If where is supplied, the per-attribute filter query parameters above are ignored — where is the entire criteria. (limit, skip, sort, and populate are unaffected.) To combine filters, put them all inside where.
e.g. ?where={"startDate":{">=":"2026-07-01","<":"2026-08-01"}}
limitThe maximum number of records to return. Defaults to 10000, capped at 50000.
skipThe number of records to skip (useful for pagination).
sortThe sort order. By default, returned records are sorted by primary key value in ascending order.
e.g. ?sort=lastName%20ASC
List Tag (find where) › Responses
Responds with a paged list of Tag records that match the specified criteria
Create Tag
Create a new Tag record.
Create Tag › Request Body
A label attached to other records. This model does double duty. When type is null the row is a plain tag — a free-form label attached to clients, projects, tasks, users, and expense categories via TagAssignment. When type is set the row is a skill (part of Skill Management): 1 = skill, 2 = language, 3 = certificate. Skills require a category and are assigned to users via SkillAssignment. Which rows a GET returns depends on the type filter and the includeSkills query parameter.
Create Tag › Responses
Responds with a JSON dictionary representing the newly created Tag instance
A label attached to other records. This model does double duty. When type is null the row is a plain tag — a free-form label attached to clients, projects, tasks, users, and expense categories via TagAssignment. When type is set the row is a skill (part of Skill Management): 1 = skill, 2 = language, 3 = certificate. Skills require a category and are assigned to users via SkillAssignment. Which rows a GET returns depends on the type filter and the includeSkills query parameter.
Get Tag (find one)
Look up the Tag record with the specified ID.
path Parameters
idThe desired Tag record's primary key value
Get Tag (find one) › Responses
Responds with a single Tag record as a JSON dictionary
A label attached to other records. This model does double duty. When type is null the row is a plain tag — a free-form label attached to clients, projects, tasks, users, and expense categories via TagAssignment. When type is set the row is a skill (part of Skill Management): 1 = skill, 2 = language, 3 = certificate. Skills require a category and are assigned to users via SkillAssignment. Which rows a GET returns depends on the type filter and the includeSkills query parameter.
Update Tag
Partially update an existing Tag record. Despite using PUT, this endpoint applies PATCH semantics — only the fields included in the request body are modified; omitted fields are left unchanged.
path Parameters
idThe desired Tag record's primary key value
Update Tag › Request Body
A label attached to other records. This model does double duty. When type is null the row is a plain tag — a free-form label attached to clients, projects, tasks, users, and expense categories via TagAssignment. When type is set the row is a skill (part of Skill Management): 1 = skill, 2 = language, 3 = certificate. Skills require a category and are assigned to users via SkillAssignment. Which rows a GET returns depends on the type filter and the includeSkills query parameter.
Update Tag › Responses
Responds with the newly updated Tag record as a JSON dictionary
A label attached to other records. This model does double duty. When type is null the row is a plain tag — a free-form label attached to clients, projects, tasks, users, and expense categories via TagAssignment. When type is set the row is a skill (part of Skill Management): 1 = skill, 2 = language, 3 = certificate. Skills require a category and are assigned to users via SkillAssignment. Which rows a GET returns depends on the type filter and the includeSkills query parameter.