## Retrieve a sequence enrollment

**get** `/v1/sequences/{id}/enrollments/{enrollmentId}`

Retrieves a single enrollment by its ID: the contact’s position in the cadence and its latest activity. Test-run enrollments are not returned.

**[Required scope](/using-the-api/scopes/):** `sequences:read`

**[Rate limit category](/using-the-api/rate-limits/):** Read

### Path Parameters

- `id: string`

  Unique identifier of the sequence.

- `enrollmentId: string`

  Unique identifier of the enrollment to retrieve.

### Returns

- `SequenceRetrieveEnrollmentResponse object { id, cancelledAt, completedAt, 10 more }`

  - `id: string`

    Unique identifier of the enrollment.

  - `cancelledAt: string`

    When the enrollment was cancelled, or null if it was not.

  - `completedAt: string`

    When the enrollment completed, or null if it has not.

  - `contactId: string`

    ID of the enrolled contact.

  - `currentStepId: string`

    ID of the step the contact is on, matching `definition.steps`; null when the contact has no current step the API returns.

  - `enrolledAt: string`

    When the contact was enrolled.

  - `enrolledBy: string`

    Member ID of whoever enrolled the contact; null when they are no longer a member or the enrollment was automatic.

  - `lastActivityAt: string`

    When `lastActivityKind` happened; null when there has been no activity.

  - `lastActivityKind: "SENT" or "OPENED" or "REPLIED" or 4 more`

    The latest activity on the enrollment. A reply or bounce that ended the enrollment is reported over a later open.

    - `"SENT"`

    - `"OPENED"`

    - `"REPLIED"`

    - `"BOUNCED"`

    - `"INVITED"`

    - `"CONNECTED"`

    - `"SEEN"`

  - `nextSendAt: string`

    Estimated time of the next send, from the cadence, send window, pacing and sender; queue order and random gaps can push it later. Null while a message awaits review or is sending, while paused, or when it cannot be estimated.

  - `remainingSends: number`

    Email and LinkedIn steps not yet sent, connection requests included.

  - `repliedAt: string`

    When the contact first replied, on email or LinkedIn; null if they have not.

  - `status: "ACTIVE" or "AWAITING_REVIEW" or "NEEDS_ATTENTION" or 5 more`

    `ACTIVE` is progressing; `AWAITING_REVIEW` has a message waiting for approval; `NEEDS_ATTENTION` is held by a failed step, a held draft or an unavailable sender; `PAUSED` is stopped because the sequence is deactivated or it was paused in Lightfield. `REPLIED`, `COMPLETED`, `CANCELLED` and `FAILED` are final.

    - `"ACTIVE"`

    - `"AWAITING_REVIEW"`

    - `"NEEDS_ATTENTION"`

    - `"REPLIED"`

    - `"COMPLETED"`

    - `"PAUSED"`

    - `"CANCELLED"`

    - `"FAILED"`

### Example

```http
curl https://api.lightfield.app/v1/sequences/$ID/enrollments/$ENROLLMENT_ID \
    -H 'Lightfield-Version: 2026-03-01' \
    -H "Authorization: Bearer $API_KEY"
```

#### Response

```json
{
  "id": "id",
  "cancelledAt": "cancelledAt",
  "completedAt": "completedAt",
  "contactId": "contactId",
  "currentStepId": "currentStepId",
  "enrolledAt": "enrolledAt",
  "enrolledBy": "enrolledBy",
  "lastActivityAt": "lastActivityAt",
  "lastActivityKind": "SENT",
  "nextSendAt": "nextSendAt",
  "remainingSends": -9007199254740991,
  "repliedAt": "repliedAt",
  "status": "ACTIVE"
}
```
