## Retrieve a sequence enrollment

`sequence.retrieve_enrollment(strenrollment_id, SequenceRetrieveEnrollmentParams**kwargs)  -> SequenceRetrieveEnrollmentResponse`

**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

### Parameters

- `id: str`

  Unique identifier of the sequence.

- `enrollment_id: str`

  Unique identifier of the enrollment to retrieve.

### Returns

- `class SequenceRetrieveEnrollmentResponse: …`

  - `id: str`

    Unique identifier of the enrollment.

  - `cancelled_at: Optional[str]`

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

  - `completed_at: Optional[str]`

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

  - `contact_id: str`

    ID of the enrolled contact.

  - `current_step_id: Optional[str]`

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

  - `enrolled_at: str`

    When the contact was enrolled.

  - `enrolled_by: Optional[str]`

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

  - `last_activity_at: Optional[str]`

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

  - `last_activity_kind: Optional[Literal["SENT", "OPENED", "REPLIED", 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"`

  - `next_send_at: Optional[str]`

    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.

  - `remaining_sends: Optional[int]`

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

  - `replied_at: Optional[str]`

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

  - `status: Optional[Literal["ACTIVE", "AWAITING_REVIEW", "NEEDS_ATTENTION", 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

```python
from lightfield import Lightfield

client = Lightfield(
    api_key="My API Key",
)
sequence_retrieve_enrollment_response = client.sequence.retrieve_enrollment(
    enrollment_id="enrollmentId",
    id="id",
)
print(sequence_retrieve_enrollment_response.id)
```

#### 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"
}
```
