Skip to main content
A tag is a named label a workspace applies to its campaigns, flows, templates and segments. The public API can enumerate every tag in the workspace and create new ones. Both endpoints authenticate with the X-Sender-Tenant + X-API-Key headers and are rooted at https://api.senderz.app/api/v1.
These tags are not the tags array on a profile. The profile tags field documented on Profiles is free text stored on the contact itself and is never validated against this resource. Writing "tags": ["vip"] on a profile does not create a tag here, and creating a tag here does not make it available on a profile.
The public surface is read and create only. There is no public endpoint to rename, recolour or delete a tag. Do that in the dashboard.

List tags

Returns every tag in the workspace, ordered alphabetically by name.

Query parameters

integer
default:"50"
Page size. Must be an integer between 1 and 100.
integer
default:"0"
Number of records to skip. Must be an integer of 0 or more.
There are no other query parameters. The API rejects unknown properties, so a stray ?search= returns 400. The response uses the standard pagination envelope with a tag option per item.

The tag option

string
The tag name. This is the value field so the shape drops straight into a select control.
string
The tag name again, as the display label. value and label are always identical for tags.
string
Tag UUID. This is the value GET /public/campaigns accepts in tagIds.
string | null
The tag colour, or null when none was chosen. One of neutral, primary, accent, warn, danger, info, violet.

Example

200 OK
This endpoint loads the whole tag set and applies limit and offset in memory. total is exact, and a workspace is capped at 200 tags, so a single request with limit=100 covers most workspaces in two calls.

Create a tag

Creates a tag in the workspace the API key resolves to. Returns 201 Created.

Body

string
required
The tag name. Non-empty, maximum 60 characters. Leading and trailing whitespace is trimmed before the tag is stored and before the uniqueness check runs.
string
Optional colour. One of neutral, primary, accent, warn, danger, info, violet. Stored as null when omitted.

Response

Unlike the list endpoint, the create response is the tag record itself, not a paginated envelope and not the value / label option shape.
string
Tag UUID.
string
The stored (trimmed) name.
string | null
The colour, or null.
string
ISO 8601 timestamp.
string
ISO 8601 timestamp.

Example

201 Created

Filtering campaigns by tag

The id returned by GET /public/tags is what the campaigns list accepts in tagIds. Pass one or more UUIDs, comma separated, and the response is narrowed to campaigns carrying any of them.
Every value must be a UUID. A tag name in tagIds returns 400, so resolve names to ids with GET /public/tags first. See Resource dropdowns for the rest of the campaigns query.

Errors

A coded error carries the machine code alongside the human message:
Match on code, not on message. See Errors for the full envelope.
Creating a tag is not idempotent. To make a create safe to retry, treat 409 with code: "tag_name_taken" as success and read the existing id back from GET /public/tags.