---
title: "Get a contact in a sequence"
method: GET
path: "/v3/sequences/{id}/contacts/{contact_id}"
tags: ["Sequence Contacts"]
---

# Get a contact in a sequence

`GET /v3/sequences/{id}/contacts/{contact_id}`

<small>_Requires the `sequences:read` scope (or a broader one that includes it)._</small>

Returns details of a specific contact enrolled in the sequence.

## Path parameters

- `id` integer, required
- `contact_id` integer, required

## Response `200`

Contact details retrieved successfully

- object — A contact enrolled in a sequence with sequence-specific metadata
  - `contactId` integer — Contact ID
  - `sequenceId` integer — Sequence ID
  - `email` string, nullable — Contact email address
  - `firstName` string, nullable — Contact first name
  - `lastName` string, nullable — Contact last name
  - `company` string, nullable — Contact company name
  - `title` string, nullable — Contact job title
  - `statusInSequence` 'active' | 'paused' | 'finished' | 'inactive' | 'outOfOffice' — Contact's status in this sequence. The writable subset (`active`, `paused`, `finished`, `outOfOffice`) can be set via `POST /v3/sequences/{id}/contacts/set-status-in-sequence`. `inactive` is set by the system when the contact is missing data needed to continue (e.g. no email when the next step is an email step).
  - `isOptedOut` boolean — Whether the contact has opted out (contact-level flag, not sequence-scoped)
  - `callStatus` 'none' | 'toCall' | 'called' — Contact-level call status. Set via `PATCH /v3/contacts/{id}` (`callStatus` field). Pass `none` to clear.
  - `meetingStatus` 'none' | 'meetingBooked' — Contact-level meeting status. Set via `PATCH /v3/contacts/{id}` (`meetingStatus` field). Pass `none` to clear.
  - `emailDisposition` object, nullable — Reply/bounce status for the most recent email sent to this contact in this sequence. `null` when no email has been sent to this contact yet in this sequence. Otherwise an object with `isReplied` and `isBounced` flags. `false`/`false` here means an email was sent but no reply or bounce was registered — distinct from the `null` "never sent" state.
    - `isReplied` boolean, required — Whether the contact has replied to any email in this sequence
    - `isBounced` boolean, required — Whether any email sent to this contact in this sequence has bounced
  - `currentStep` object — Current sequence step the contact is on. Always present in the response. When the contact has no in-progress step (e.g. finished or paused at the end of the sequence), `stepId` is `null` and `displayName` is `"Finished"`.
    - `stepId` integer, nullable, required — Identifier of the current step. `null` when the contact has no active step.
    - `displayName` string, nullable, required — Display label of the current step (e.g. `"1"`, `"2A"`, or `"Finished"`).
  - `addingDate` string, date-time — Date the contact was added to the sequence
  - `emailAccountId` integer, nullable — Identifier of the email account this contact is assigned to send from in this sequence. `null` when no email account is assigned (e.g. the sequence has no email steps the contact has reached, or the assignment hasn't been resolved yet).
  - `linkedInAccountId` integer, nullable — Identifier of the LinkedIn account this contact is assigned to send from in this sequence. `null` when no LinkedIn account is assigned (e.g. the sequence has no LinkedIn steps the contact has reached).

## Other responses

- `400` — Route-parameter validation failure (e.g. non-positive `id` or `contact_id`) or a business rule rejection.
- `401` — Unauthorized. The response body is empty; check the `WWW-Authenticate` header for the expected scheme.
- `403` — User lacks required feature scope to view this sequence
- `404` — Sequence or contact not found, or contact not in sequence
- `429` — Too Many Requests

---

[API](https://skmtc.net/reply/apis/reply-api.md) · [All operations](https://skmtc.net/reply/apis/reply-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/reply/reply-api/revisions/1c3d32eaf95e/schema)
