Subscribers
List Subscribers
List subscribers with pagination and filtering
GET
List Subscribers
List subscribers with stable pagination and optional filtering by status,
free-text query, tags, list, segment, attribute, email, or opt-out date.
Each subscriber carries
Reconcile a window of opt-outs against another system:
unsubscribedAt, the date the contact opted out. Use
it rather than updatedAt to date an opt-out - updatedAt moves on any later
tag or attribute write. It is null unless the contact is currently
unsubscribed, so a contact who left one list but still receives email does not
carry a date, and it is null for contacts imported as already unsubscribed,
where no opt-out date exists.
Without an attribute filter, results are ordered by createdAt descending,
with subscriber ID used as a tie-breaker so page boundaries stay deterministic
when multiple subscribers have the same creation time.
With an attribute filter, results use ClickHouse-first cursor pagination and
are ordered by subscriber ID ascending. Attribute-filtered responses do not
include a total count; use pagination.nextCursor until it is null.
Pulling a full audience
Every response includespagination.nextCursor and pagination.hasMore. When
you need more than one page - a backup, an export, a migration - follow
nextCursor instead of incrementing page:
- Page numbers are computed with an offset, so rows can be skipped or repeated if subscribers are created or deleted while you are paging. A cursor walks a fixed sort key and is not affected.
- Cursor requests skip the total-count query, so
totalandtotalPagescome back asnull. Read the count from your first (cursorless) request. - With
limit=1000, a 10,000-subscriber audience takes ten requests.
Searching for one address
Aquery that is a whole email address is treated as an identity lookup: it
matches contacts whose email is that address (case-insensitively), or whose
external ID is that address, and nothing else. Anything shorter - gmail.com,
@example.com, ana - stays a substring search across email, external ID,
first name, last name, and tags.
The distinction matters on a large audience. A substring search has to examine
every contact you have; an address lookup does not. If you only need one
contact and you already know the address, prefer GET /v1/subscribers/{email},
which returns the full contact record directly.
Query Parameters
number
default:"1"
Page number. Cannot be combined with
cursor.number
default:"20"
Items per page (max 1000)
string
Cursor returned as
pagination.nextCursor. Cannot be combined with page.
Attribute-filtered requests return their own cursor, which is not
interchangeable with the default-ordering cursor.string
Pass
false to skip the total-count query on page-numbered requests. Cursor
requests always skip it.string
Filter by status:
active, unsubscribed, bounced, or all. Use all to
disable status filtering.string
Free-text search across email, first name, last name, and tags. A term that is
a whole email address is matched exactly against the contact’s email or
external ID instead - see Searching for one
address.
string
Legacy alias for
query. Follows the same matching rules.string
Comma-separated tag names. A subscriber must have all provided tags.
string
Filter by a custom attribute using
attributeName:value syntax, such as
plan:pro or mrr:50. Use attributeName: only with empty-check operators.string
default:"is"
Attribute operator. Direct cursor pagination supports inclusion operators:
is, contains, gt, gte, lt, lte, and is_not_empty. For exclusion
operators such as is_not, not_contains, or is_empty, create a saved
segment and pass segmentId.string
Subscriber list ID or exact list name. The API tries ID first, then exact
name.
string
Filter by subscriber list ID.
string
Filter by exact subscriber list name when the ID is not known.
string
Filter by an existing segment ID
string
Only return contacts whose
unsubscribedAt is on or after this ISO 8601 date
or datetime. Bare dates use UTC midnight; datetimes must include Z or an
explicit offset. Contacts with no opt-out date are excluded, which includes
active contacts and imports with no known date.string
Only return contacts whose
unsubscribedAt is on or before this ISO 8601 date
or datetime. Bare dates use UTC midnight; datetimes must include Z or an
explicit offset.