Skip to main content
POST
Create a sequence

Authorizations

X-API-Key
string
header
required

Body

application/json
goal
string | null

Only with proposal_id: the goal the person chose for it, instead of the one tailoring chose.

Required string length: 1 - 1000
name
string | null

Defaults to 'New sequence'.

Required string length: 1 - 255
proposal_id
string<uuid> | null

A tailored proposal (POST /sequences/proposals/) to make the sequence from: it carries the audience, the senders and the campaign, so give only a name, a timezone and, if the person changed it, the goal beside it.

record_ids
string<uuid>[] | null
Required array length: 1 - 1000 elements
sender_profile_ids
string<uuid>[] | null

The senders to send from, assigned before the audience so the campaign is tailored knowing who sends. Omitted leaves the sequence with none.

Maximum array length: 100
starter
enum<string>
default:ai
Available options:
ai,
written,
blank,
template
table_id
string<uuid> | null
template_id
string<uuid> | null
timezone
string | null

The creating browser's IANA timezone; seeds the default deliverability sending window. UTC when absent, or when it is not a timezone the send engine knows.

Maximum string length: 64
view_id
string<uuid> | null

Response

Successful Response

audience_table_id
string<uuid> | null
required
audience_view_id
string<uuid> | null
required
column_mapping
ColumnMappingSchema · object
required

Which audience columns carry a meaning, all detected from the table.

One field per channel (email, LinkedIn) plus the company domain the coverage line reports on. Leave the whole object out when binding an audience and the columns are detected server-side. Send it only to correct a detection: a first name, a company or a last-contacted date is no longer part of this, because every column on the table is already addressable as a {{Column name}} variable.

created_at
string<date-time>
required
edges
SequenceEdgeSchema · object[]
required
id
string<uuid>
required
launched_at
string<date-time> | null
required
multithreading
Multithreading · object | null
required
name
string
required
pause_reason
string | null
required
sending_window
Sending Window · object | null
required
status
enum<string>
required

Lifecycle of a sequence.

DRAFT until launch; RUNNING sequences are locked against structural edits (pause → edit → resume); PAUSED stops scheduling while leaving every enrolment exactly where it is; COMPLETED is terminal.

Available options:
draft,
running,
paused,
completed
status_column_id
string<uuid> | null
required
step_count
integer
required
steps
SequenceStepSchema · object[]
required
updated_at
string<date-time>
required
bcc_addresses
string[]

Blind copies on every email this sequence sends.

cc_addresses
string[]

Addresses copied on every email this sequence sends.

connection_requests_sent
integer | null
connections_accepted
integer | null

Invitations from this sequence confirmed accepted. With connection_requests_sent this yields the acceptance rate.

contacts_added
integer | null

Rollup, list reads only. None when the list's stats have never been built and could not be built on this request (for example, another request was building them). Show a zero state, not a fake 0.

contacts_failed
integer | null
contacts_finished
integer | null
contacts_in_progress
integer | null
contacts_not_started
integer | null

A draft's contacts, who start when it launches (rollup, list reads only).

continuous_enrolment
boolean
default:false

TRUE keeps the audience live: rows added to the table later enrol on their own, and rows that leave it stop. FALSE (the default for a new sequence) freezes the audience after launch; Add to sequence still adds rows to it by hand.

email_approval_mode
string | null

manual requires approval; confident adds approval for uncertain AI-written emails; null follows the sender. There is no value meaning 'send automatically': a sequence can only add an approval.

emails_sent
integer | null
hold
SequenceListHoldSchema · object | null

List reads only, read live on every request (never from the cached stats): on a running sequence nobody on which can move, the worst reason holding them (as GET /sequences/{id}/holds/ names it). Null while anybody moves and on any other status.

last_synced_at
string<date-time> | null

When the audience-enrolment diff last completed. None until the first sync (launch runs one inline). The Audience tab shows this plus a manual trigger, never a background job the user cannot see.

linkedin_approval_mode
string | null

manual requires approval; confident adds approval for uncertain AI-written LinkedIn steps; null follows the sender. There is no value meaning 'send automatically': a sequence can only add an approval.

linkedin_check_max_seconds
integer | null
deprecated

Retired. Acceptance checks now use the service-managed interval.

linkedin_check_min_seconds
integer | null
deprecated

Retired. Acceptance checks now use the service-managed interval.

linkedin_messages_sent
integer | null
opportunity_values
Opportunity Values · object | null

Dollars per outcome label; None = tracking off.

outbound_agent_id
string<uuid> | null

The sequence's outbound agent: the writer of every agent-written step and of its replies. Read and configure it under /outbound-agents/{id}/.

plain_text_only
boolean
default:true

TRUE (recommended) sends no formatting: the bold, italic and link marks are stripped and the email reads as plain text; FALSE renders them. Either way the email carries an HTML part laid out line for line, which keeps its spacing exactly, beside a matching text part.

positive
integer | null

Threads labelled positive (rollup, list reads only).

positive_rate
number | null
replies
integer | null

Distinct contacts who replied: reply_rate's numerator.

reply_rate
number | null
sender_profile_ids
string<uuid>[]

Only meaningful on list reads: the sequence's senders by id, in the same order as sender_profile_names.

sender_profile_names
string[]

Only meaningful on list reads: the names of the sequence's senders.

senders_ready
boolean
default:true

Only meaningful on list reads: False when the sequence has senders but none currently has a connected mailbox.

sending_priority
string
default:new_contacts

Who gets scarce capacity first: new_contacts or follow_ups.

sending_window_problem
SendingWindowProblemSchema · object | null

Set when the saved sending_window breaks a rule a save now refuses, which only a window saved before those rules can. It still sends on it as stored: an unknown timezone is read as UTC, and no open day sends at any hour. Fix it by saving a valid sending_window.

spending_limit_tenths
integer | null