Skip to main content
POST
Pause one contact

Authorizations

X-API-Key
string
header
required

Path Parameters

sequence_id
string<uuid>
required
enrolment_id
string<uuid>
required

Response

Successful Response

bounced
boolean
required
company_key
string | null
required
created_at
string<date-time>
required
current_step_id
string<uuid> | null
required
due_at
string<date-time> | null
required
email
string | null
required
id
string<uuid>
required
record_id
string<uuid>
required
replied_at
string<date-time> | null
required
status
enum<string>
required

Where one contact stands in one sequence.

ACTIVE rows carry a due_at and are what the tick claims; CLAIMED is the in-flight guard between claim and outcome. PAUSED is a deliberate per-contact hold: unclaimable because the tick claims strictly on ACTIVE, yet still LIVE. It keeps its step and its one-live-sequence slot, and a compliance stop (reply, unsubscribe) reaches it. Everything else is settled: COMPLETED walked off the end; STOPPED was halted (reply, unsubscribe, bounce, manual, company pause); FAILED is terminal; SUPPRESSED was on the do-not-contact list; SKIPPED_DUPLICATE lost the one-live-sequence-per-contact rule, with the reason visible in the grid.

A contact the workspace's recontact rule refuses is STOPPED with StopReason.COOLDOWN. There is deliberately no held state: a cooldown settles a contact rather than parking them, so nothing here waits on a date and nothing lets itself out later.

AWAITING_ACTION is a contact parked behind a task that needs a person or a channel, modelled on PAUSED: live, keeps its step and its one-live-sequence slot, unclaimable because the tick claims strictly on ACTIVE, and a compliance stop reaches it. Unlike PAUSED nobody wakes it by hand: only the outreach-task sweep does, once the task it waits on is decided or delivered. Deliberately not "awaiting approval": an AUTO-mode LinkedIn park is waiting for a browser rather than for anyone's approval, and this value is the word the Contacts tab shows for both.

PENDING is a draft's roster: in, standing on a step, and NOT live. Binding an audience enrols on the spot so the Contacts tab can show who is in, but a sequence nobody has launched must not hold anybody's one-live-sequence slot, or a second sequence written for the same people skips them all. uq_sequence_enrolment_one_live leaves PENDING out, the tick never claims it, and launch turns each row ACTIVE, settling the ones another sequence took meanwhile as SKIPPED_DUPLICATE.

Available options:
pending,
active,
claimed,
paused,
awaiting_action,
completed,
stopped,
failed,
suppressed,
skipped_duplicate
stop_reason
enum<string> | null
required
Available options:
reply,
unsubscribe,
bounce,
manual,
company_reply,
row_left_audience,
step_removed,
removed,
cooldown,
rejected,
mailbox_removed
updated_at
string<date-time>
required
contact_company
string | null

Their company, from whichever column of the audience row holds one.

contact_name
string | null

The person's name from their audience row: a full-name column where filled, else the given and family names joined. Null when the table names nobody.

contact_number
integer
default:0

This contact's ordinal within the sequence, from 1. A label of last resort, for a contact with neither an address nor a LinkedIn profile.

contact_title
string | null

Their job title, from whichever column of the audience row holds one.

decides_at
string<date-time> | null

For a contact on a condition that waits (Replied?, Bounced?, Accepted?), or waiting for a connection request's answer: when the branch is decided. On a request it is when its answer window closes; in the past, the window is over and one more reading decides.

failure_code
enum<string> | null

Which kind of failure stopped a failed contact, where it changes what Retry does: connected_before_withdraw (a Withdraw found them already connected; nothing to retry, so no Retry is offered) or invite_look_unreadable (the look at their profile could not tell whether they accepted; Retry looks again). Null for every other failure and status.

Available options:
connected_before_withdraw,
invite_look_unreadable
failure_reason
string | null

Why a failed contact stopped, in the words of its status cell: for a LinkedIn step, the browser's own reason. Retry runs the same step again. Null on every other status.

held_by_sequence
HeldBySequenceReadSchema · object | null

On a contact skipped because they are in another live sequence (status skipped_duplicate): that sequence of this workspace, by id and name. Null for every other status, and once nothing holds the contact, which is when the next sync takes them in.

hold_reason
enum<string> | null

Why the send path pushed this contact's next attempt out to due_at. Set only on an active contact whose due_at is still ahead. 'window' also covers a contact due on one of the sending window's openings, whoever scheduled them.

Available options:
window,
daily_cap,
no_mailbox,
pacing,
agent_unavailable,
no_message,
agent_writing,
mailbox_waiting,
no_linkedin_account
invited_at
string<date-time> | null

When the connection request this contact stands on went out, or was first seen already pending: set while they wait for its answer (and kept through a pause or a stop). Null on every other step, and on a completed contact.

last_contacted_at
string<date-time> | null

The touch a cooldown stop is measured from. Whoever made it is deliberately never named, because it may be a colleague's sequence entirely.

last_step_at
string<date-time> | null

When that step ran.

last_step_id
string<uuid> | null

The step this contact last actually ran. Not the step before current_step_id: on a branching graph those are different steps.

linkedin_queue
enum<string> | null

Set beside waiting_on 'linkedin': where the contact's step stands in the sending account's line. 'running' is in a browser now; 'queued' is in line (see linkedin_steps_ahead and linkedin_starts_at); the rest say why the line is not moving for it: the sequence's sending hours shut in the sender's timezone ('outside_window'), a daily or weekly limit for its kind, no browser checked in for fifteen minutes, LinkedIn asking to verify the account, or the account disconnected.

Available options:
running,
queued,
outside_window,
daily_limit,
weekly_limit,
kind_disabled,
browser_offline,
verify_account,
disconnected
linkedin_resets_at
string<date-time> | null

For a step held by a daily or weekly limit, when the limit it waits on resets (midnight in the sender's timezone). Null otherwise.

linkedin_starts_at
string<date-time> | null

When the step is expected to start, simulated the way the account's governor hands steps out: the next gap is exact, later gaps are the account's time between steps widened by the average jitter, and a step held by a daily or weekly limit starts after that limit resets. Null where no time can be named.

linkedin_steps_ahead
integer | null

For a queued step, how many of the account's steps run before it.

linkedin_url
string | null
mailbox_address
string | null

The address this contact is emailed from. A contact is only ever emailed from the mailbox that first emailed them, in any sequence. Null until something has emailed them.

mailbox_issue
enum<string> | null

Why that mailbox cannot send for this sequence, set while it is what stops the contact (stop_reason mailbox_removed: deleted, not_on_sequence) or holds them (hold_reason mailbox_waiting: disconnected, no_sender).

Available options:
deleted,
not_on_sequence,
disconnected,
no_sender
reachable
boolean
default:true

Whether any channel this sequence's steps use can reach the contact: an email address for an email step, a LinkedIn profile URL for a LinkedIn one. A sequence with no sending step yet counts both.

unreachable_reason
enum<string> | null

Which address the contact lacks, set only while being unreachable is what holds them: the Contacts tab reads it as Unreachable, and the audience eligibility counts them under missing_contact_details. Null for a reachable contact and for one who is settled or held by something named first (do not contact, another sequence, a cooldown).

Available options:
no_email,
no_linkedin_url,
no_email_or_linkedin_url
waiting_on
enum<string> | null

What the approval queue holds this contact behind, read from the task for their current step: a person's approval, a LinkedIn browser, or an approved email the engine has not sent yet. Null when nothing does.

Available options:
approval,
linkedin,
send