---
title: "List sequence enrollments"
method: GET
path: "/sequences/{sequenceId}/enrollments"
tags: ["Sequences"]
---

# List sequence enrollments

`GET /sequences/{sequenceId}/enrollments`

Lists the individual contacts enrolled in one sequence, with the node each one is currently sitting on. Defaults to active and waiting enrollments. Use this when sequence stats give you enrollmentCounts and you need the actual subscribers behind a number.

## Path parameters

- `sequenceId` string, required

## Query parameters

- `status` string
- `currentNodeId` string
- `subscriberId` string
- `email` string
- `sort` 'enrolled_at_desc' | 'enrolled_at_asc' | 'wait_until_asc' | 'wait_until_desc'
- `stopConditionMatch` boolean
- `limit` integer
- `offset` integer

## Response `200`

Enrollments matching the filters

- SequenceEnrollmentListResponse
  - `success` boolean
  - `sequenceId` string
  - `sequenceName` string
  - `statuses` string[] — Enrollment statuses included in this response.
  - `stopCondition` SequenceStopCondition — Auto-stop condition, re-evaluated before every step including the first one. has_tag, added_to_list, entered_segment, field_changed, and event_received stop the run once the thing happens. event_received only counts events received after enrollment - the enrolling event and earlier history never satisfy the stop. does_not_have_tag and removed_from_list stop the run whenever the subscriber lacks that tag or list membership, so they act as a required-tag or required-list allowlist and cancel everyone else before any step sends. Guarded-out contacts still enroll and are then cancelled at the trigger node, so they appear as cancellations there rather than in the active or waiting enrollment counts. Clearing the guard does not retry them: they only receive the sequence if the trigger fires for them again, and on the one_time enrollment mode not even then.
    - `type` 'none' | 'has_tag' | 'does_not_have_tag' | 'added_to_list' | 'removed_from_list' | 'entered_segment' | 'field_changed' | 'event_received'
    - `value` string, nullable — Tag name, list ID, segment ID, field path, or event name. For the does_not_have_tag and removed_from_list guards this is the tag or list a subscriber must have to keep receiving the sequence. Null with entry_audience matching means the tag or list that enrolled each contact is used.
    - `matchConfig` union — Optional typed match rule. event_received uses event_property_filter propertyFilters (stop only when an event received after enrollment matches every filter, e.g. quota_used greater_than 1) or event_property rules (stop only when the stop event's field equals the same field captured on the enrolling event); field_changed uses a field_value comparison. Tag/list defaults use entry_audience to resolve the required tag or list per enrollment. Tag entry matching requires a tag_added trigger; list entry matching requires a contact_added trigger scoped to at least one specific list.
      - object
        - `mode` 'event_property_filter', required
        - `propertyFilters` object[], required — Filters an event received after enrollment must all match for the stop to fire. Same shape as event trigger propertyFilters.
          - `path` string, required — Dot-path into the stop event's properties.
          - `operator` 'exists' | 'not_exists' | 'equals' | 'not_equals' | 'one_of' | 'contains' | 'greater_than' | 'less_than', required
          - `value` unknown
      - object
        - `mode` 'event_property', required
        - `rules` object[], required
          - `entryFieldPath` string, required
          - `eventFieldPath` string, required
      - object
        - `mode` 'field_value', required
        - `operator` 'equals' | 'not_equals' | 'greater_than' | 'less_than' | 'contains' | 'not_contains', required
        - `value` string, required
      - object
        - `mode` 'entry_audience', required
        - `audience` 'tag' | 'list', required — Use the tag or list recorded when this contact enrolled.
  - `stopConditionMatchEvaluatedCount` integer — How many enrollments in this page were actually evaluated for a current stop-condition match. 0 when stopConditionMatch was not requested, the sequence has no stop condition, or no returned enrollment was still active or waiting.
  - `enrollments` object[]
    - `enrollmentId` string — Enrollment token ID. Stable identifier for this one run through the sequence.
    - `sequenceId` string
    - `subscriberId` string
    - `email` string, nullable — Subscriber email address. Falls back to the address captured at enrollment when the subscriber record no longer exists.
    - `firstName` string, nullable
    - `lastName` string, nullable
    - `subscriberStatus` string, nullable
    - `status` 'active' | 'waiting' | 'completed' | 'failed' | 'cancelled'
    - `currentNodeId` string — Sequence node this enrollment is currently sitting on.
    - `currentNodeType` string — Omitted when the node no longer exists in the sequence graph.
    - `currentNodeLabel` string — Node label or email subject when available.
    - `currentNodeMissing` boolean
    - `enrollmentKey` string
    - `enrollmentStartedAt` string, date-time
    - `waitUntil` string, date-time, nullable — When a waiting enrollment is scheduled to resume, or null when nothing is scheduled.
    - `lastUpdatedAt` string, date-time — Last change to this enrollment. For a waiting enrollment this is when it arrived at its current node.
    - `failedReason` string, nullable — Why this enrollment stopped, for status `failed`. Null for every other status and for failures recorded before this field existed. The same reason repeated across enrollments on one `currentNodeId` points at that step rather than at the contacts.
    - `movedFromNodeId` string, nullable — Step this enrollment was released from by POST /sequences/{sequenceId}/enrollments/move, or null when it reached its current step on its own.
    - `movedAt` string, date-time, nullable — When that release happened, or null when the enrollment was never moved.
    - `moveReason` string, nullable — Note recorded with that release, or null when none was given.
    - `stopConditionMatches` boolean, nullable — Whether the sequence stop condition matches for this contact right now. Null when it was not determined - stopConditionMatch was not requested, the sequence has no stop condition, this enrollment is no longer active or waiting, or it fell outside the evaluated window. Null never means "does not match". This is a non-atomic snapshot; the worker re-checks before a future step, but the condition can change and a step already past its stop check may still finish.
    - `stopConditionMatchReason` string, nullable — Human-readable reason the stop condition matches. Null when stopConditionMatches is not true.
    - `enteredVia` object — What put this contact into the sequence. The distinguishing detail when a trigger covers several lists or tags.
      - `kind` 'list' | 'tag' | 'segment' | 'event' | 'inactivity' | 'frequency' | 'manual' | 'test_run' | 'unknown' — `inactivity` and `frequency` identify time-based evaluation of the monitored event rather than an ordinary event-received enrollment. `manual` is a dashboard or API enrollment that bypassed the trigger. `unknown` covers enrollments recorded before this field existed.
      - `value` string, nullable — The list ID, tag name, segment ID, event name, or monitored event name. Null for `manual`, `test_run`, and `unknown`.
      - `name` string, nullable — Resolved list or segment name. Set for list and segment kinds, and null when the referenced resource has since been deleted.
      - `description` string — Ready-to-display attribution line.
  - `pagination` object
    - `limit` number
    - `offset` number
    - `count` number
    - `total` number
    - `hasMore` boolean

## Other responses

- `400` — Validation error
- `401` — Unauthorized
- `403` — No company selected
- `404` — Sequence not found
- `503` — The database was temporarily unavailable. The request may be retried after the delay in Retry-After.

---

[API](https://skmtc.dev/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.dev/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/revisions/73f826277d9a/schema)
