X-Sender-Tenant + X-API-Key headers and are rooted at https://api.senderz.app/api/v1.
Lists are not segments. A segment computes its own membership from a filter
and is a separate resource. Everything on this page operates on lists, whose
membership only ever changes when something adds or removes a contact
explicitly.
The public API is read plus membership only. There is no endpoint to create,
rename, archive or delete a list. Create lists in the dashboard, then manage
their members here.
List all lists
archived field client side if you need to hide them.
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.
The list object
string
List UUID. Use this as
:id on the membership endpoints.string
Display name.
string
Free-text description. Empty string when none was set, never
null.integer
Cached member count.
string
Hex swatch used in the dashboard. Defaults to
#0b1f3f.boolean
true when the list is archived in the dashboard. Archived lists are still
returned by this endpoint and still accept membership changes.string
Where the members originally came from. One of
manual, import, form,
api, segment, preference_center. Defaults to manual. This records
origin only, it does not restrict what you can do with the list.object[]
One entry per contact import that landed in this list. Empty array when the
list was never imported into.
string | null
Consent page bound to this list, or
null.string | null
ISO 8601 timestamp of the last time
members was recounted, or null if it
never has been.string
ISO 8601 creation timestamp.
string
ISO 8601 last-modified timestamp. Results are ordered by this field, newest
first.
members on this endpoint is the cached count, served without a recount so
the listing stays fast. It is refreshed whenever the Lists surface loads a
single list, and whenever a membership change goes through the endpoints
below. The count returned by an add or remove is always a live count.Errors
Add members
201 Created.
string
required
List UUID.
Body
Send at least one of these four fields. They combine:contactId and contactIds are merged with email and emails into a single set of contacts, and duplicates within one request collapse.
string
A single email address. Trimmed and lowercased before lookup.
string[]
Email addresses. Each entry is trimmed and lowercased before lookup.
string
A single contact UUID.
string[]
Contact UUIDs. Entries are validated as UUID v4.
How addresses resolve
1
Known email
An address that already belongs to a contact in the workspace resolves to
that contact.
2
Unknown email
A new contact is created with that address and then added to the list. The
new contact has no marketing consent recorded, so it is not sendable to
until consent is captured. List membership and consent are independent.
3
Contact IDs
A
contactId that does not belong to the workspace, or belongs to a
deleted contact, is silently skipped and does not count toward added.Response
integer
Contacts actually inserted into the list by this call. A contact that was
already a member, or a contact ID that did not resolve, counts as 0.
integer
Live total members on the list after the call.
Errors
Remove members by identity
200 OK, not 204.
string
required
List UUID.
Body
The same four fields as the add endpoint, with the same combined cap of 100 and the same trimming and lowercasing of addresses.string
A single email address.
string[]
Email addresses.
string
A single contact UUID.
string[]
Contact UUIDs. Entries are validated as UUID v4.
Removal never creates anything. An email that matches no contact is simply
skipped, in contrast with the add endpoint which creates a contact for it.
Contact IDs you supply always count as resolved, so a syntactically valid but
unknown UUID passes the guard below and is reported as removed 0.
Response
integer
Contacts actually removed from the list. A contact that was not a member
counts as 0.
integer
Live total members on the list after the call.
Errors
Remove a single member by ID
200 OK.
string
required
List UUID.
string
required
Contact UUID.
Response
integer
Live total members on the list after the call.
count. Use the identity endpoint above when you need the removed figure.
Errors
Webhooks
Membership changes made through these endpoints fire outbound webhooks, one event per contact:
The payload carries
listId, listName and contactId. Dispatch is best effort: a webhook that fails to deliver is logged and does not fail or roll back the membership change.

