---
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.
    - `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.
      - 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
  - `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.
  - `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.net/sequenzy/apis/sequenzy-api.md) · [All operations](https://skmtc.net/sequenzy/apis/sequenzy-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/sequenzy/sequenzy-api/revisions/ba3a29c6eb33/schema)
