X-Sender-Tenant + X-API-Key headers and are rooted at https://api.senderz.app/api/v1.
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
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.
?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
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 thevalue / 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
Theid 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.
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:
code, not on message. See Errors for the full envelope.

