Skip to content

Sequence

Sequences are multi-step outreach cadences that send email and LinkedIn messages to enrolled contacts. A sequence is edited through its draft, published, then activated; contacts are enrolled into the published sequence. Start with Using sequences with the API for the lifecycle, the draft and version model, and a worked example.

List sequences
sequence.list(SequenceListParams**kwargs) -> SequenceListResponse
GET/v1/sequences
Retrieve a sequence
sequence.retrieve(strid) -> SequenceRetrieveResponse
GET/v1/sequences/{id}
Retrieve sequence performance
sequence.retrieve_performance(strid) -> SequenceRetrievePerformanceResponse
GET/v1/sequences/{id}/performance
Retrieve a sequence enrollment
sequence.retrieve_enrollment(strenrollment_id, SequenceRetrieveEnrollmentParams**kwargs) -> SequenceRetrieveEnrollmentResponse
GET/v1/sequences/{id}/enrollments/{enrollmentId}
List sequence enrollments
sequence.list_enrollments(strid, SequenceListEnrollmentsParams**kwargs) -> SequenceListEnrollmentsResponse
GET/v1/sequences/{id}/enrollments
List sequence messages
sequence.list_messages(strid, SequenceListMessagesParams**kwargs) -> SequenceListMessagesResponse
GET/v1/sequences/{id}/messages
Retrieve a sequence message
sequence.retrieve_message(strmessage_id, SequenceRetrieveMessageParams**kwargs) -> SequenceRetrieveMessageResponse
GET/v1/sequences/{id}/messages/{messageId}
Enroll and cancel contacts
sequence.update_enrollments(strid, SequenceUpdateEnrollmentsParams**kwargs) -> SequenceUpdateEnrollmentsResponse
POST/v1/sequences/{id}/enrollments
Start a sequence test
sequence.start_test(strid, SequenceStartTestParams**kwargs) -> SequenceStartTestResponse
POST/v1/sequences/{id}/tests
Retrieve a sequence test
sequence.retrieve_test(strtest_id, SequenceRetrieveTestParams**kwargs) -> SequenceRetrieveTestResponse
GET/v1/sequences/{id}/tests/{testId}
Create a sequence
sequence.create(SequenceCreateParams**kwargs) -> SequenceCreateResponse
POST/v1/sequences
Activate a sequence
sequence.activate(strid, SequenceActivateParams**kwargs) -> SequenceActivateResponse
POST/v1/sequences/{id}/activate
Deactivate a sequence
sequence.deactivate(strid, SequenceDeactivateParams**kwargs) -> SequenceDeactivateResponse
POST/v1/sequences/{id}/deactivate
Retrieve a sequence draft
sequence.retrieve_draft(strid) -> SequenceRetrieveDraftResponse
GET/v1/sequences/{id}/draft
Update a sequence draft
sequence.update_draft(strid, SequenceUpdateDraftParams**kwargs) -> SequenceUpdateDraftResponse
POST/v1/sequences/{id}/draft
Publish a sequence draft
sequence.publish_draft(strid, SequencePublishDraftParams**kwargs) -> SequencePublishDraftResponse
POST/v1/sequences/{id}/draft/publish
List template variables
sequence.list_template_variables() -> SequenceListTemplateVariablesResponse
GET/v1/sequences/template/variables
Discard a sequence draft
sequence.discard_draft(strid, SequenceDiscardDraftParams**kwargs) -> SequenceDiscardDraftResponse
POST/v1/sequences/{id}/draft/discard
ModelsExpand Collapse
class SequenceActivateResponse: …
id: str

Unique identifier of the sequence.

channels: List[Literal["EMAIL", "LINKEDIN"]]

Channels the published steps send on; empty before the first publish.

One of the following:
"EMAIL"
"LINKEDIN"
created_at: str

ISO 8601 creation timestamp.

definition: Optional[Definition]

Published configuration, or null before the first publish.

description: str

What this version of the sequence is for.

messaging: DefinitionMessaging

Messaging inputs that frame every step.

call_to_action: Optional[str]

What the recipient is asked to do.

persona: Optional[str]

Who the sequence targets.

trigger: Optional[str]

Why the outreach is timely.

value_prop: Optional[str]

The value proposition.

pacing: DefinitionPacing

How the whole sequence paces each step type it sends, keyed by sequence step type.

email: DefinitionPacingEmail

Email steps.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_invite: DefinitionPacingLinkedinInvite

LinkedIn connection requests.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_message: DefinitionPacingLinkedinMessage

LinkedIn messages.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
priority: Literal["HIGH", "NORMAL"]

Send priority relative to other sequences.

One of the following:
"HIGH"
"NORMAL"
send_window: DefinitionSendWindow

When the sequence may send.

days_of_week: List[int]

Days sends may go out, 0 = Sunday.

end_hour: int

Local hour sends stop, exclusive (1–24).

minimum-9007199254740991
maximum9007199254740991
start_hour: int

First local hour sends may go out (0–23).

minimum-9007199254740991
maximum9007199254740991
timezone: str

IANA timezone of the window.

steps: List[DefinitionStep]

Email, LinkedIn and wait steps in execution order.

One of the following:
class DefinitionStepUnionMember0: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["EMAIL", "LINKEDIN_MESSAGE"]

Step type.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
class DefinitionStepUnionMember1: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember2: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember2Template

The email every contact receives.

body: str

Email body as Markdown, without the sign-off or signature, which are added when the message is written. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

subject: str

Plain-text subject line. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["EMAIL"]

Step type.

class DefinitionStepUnionMember3: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember3Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_MESSAGE"]

Step type.

class DefinitionStepUnionMember4: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember4Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember5: …
id: str

Step identifier.

duration: int

Length of the wait.

minimum-9007199254740991
maximum9007199254740991
type: Literal["WAIT", "WAIT_FOR_CONNECTION"]

WAIT pauses for a fixed time; WAIT_FOR_CONNECTION waits up to that long for a LinkedIn invite to be accepted.

One of the following:
"WAIT"
"WAIT_FOR_CONNECTION"
unit: Literal["DAY", "MINUTE"]

Unit of duration.

One of the following:
"DAY"
"MINUTE"
first_activated_at: Optional[str]

When the sequence was first activated.

last_activated_at: Optional[str]

When the sequence was most recently activated.

name: str

Name of the sequence.

object_type: Literal["sequence"]

Always sequence.

reviewers: List[Reviewer]

Extra members who may approve this sequence’s FOR_REVIEW messages before they send. The sending member and the sequence’s creator always review, whether or not they are listed.

id: str

ID of the member.

minLength1
object_type: Literal["member"]

Always member.

senders: List[Sender]

The senders this sequence sends from; new contacts rotate across them. An archived sender stays listed but never sends; any change to the list drops it.

id: str

ID of the sender.

minLength1
object_type: Literal["sender"]

Always sender.

status: Literal["DRAFT", "ACTIVE", "DEACTIVATED"]

DRAFT has not been published; ACTIVE is enabled for sending; DEACTIVATED is published but paused.

One of the following:
"DRAFT"
"ACTIVE"
"DEACTIVATED"
class SequenceCreateResponse: …
channels: List[Literal["EMAIL", "LINKEDIN"]]

Channels the draft’s steps send on.

One of the following:
"EMAIL"
"LINKEDIN"
definition: Definition

The draft configuration, in the same shape as a published definition.

description: str

What this version of the sequence is for.

messaging: DefinitionMessaging

Messaging inputs that frame every step.

call_to_action: Optional[str]

What the recipient is asked to do.

persona: Optional[str]

Who the sequence targets.

trigger: Optional[str]

Why the outreach is timely.

value_prop: Optional[str]

The value proposition.

pacing: DefinitionPacing

How the whole sequence paces each step type it sends, keyed by sequence step type.

email: DefinitionPacingEmail

Email steps.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_invite: DefinitionPacingLinkedinInvite

LinkedIn connection requests.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_message: DefinitionPacingLinkedinMessage

LinkedIn messages.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
priority: Literal["HIGH", "NORMAL"]

Send priority relative to other sequences.

One of the following:
"HIGH"
"NORMAL"
send_window: DefinitionSendWindow

When the sequence may send.

days_of_week: List[int]

Days sends may go out, 0 = Sunday.

end_hour: int

Local hour sends stop, exclusive (1–24).

minimum-9007199254740991
maximum9007199254740991
start_hour: int

First local hour sends may go out (0–23).

minimum-9007199254740991
maximum9007199254740991
timezone: str

IANA timezone of the window.

steps: List[DefinitionStep]

Email, LinkedIn and wait steps in execution order.

One of the following:
class DefinitionStepUnionMember0: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["EMAIL", "LINKEDIN_MESSAGE"]

Step type.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
class DefinitionStepUnionMember1: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember2: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember2Template

The email every contact receives.

body: str

Email body as Markdown, without the sign-off or signature, which are added when the message is written. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

subject: str

Plain-text subject line. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["EMAIL"]

Step type.

class DefinitionStepUnionMember3: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember3Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_MESSAGE"]

Step type.

class DefinitionStepUnionMember4: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember4Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember5: …
id: str

Step identifier.

duration: int

Length of the wait.

minimum-9007199254740991
maximum9007199254740991
type: Literal["WAIT", "WAIT_FOR_CONNECTION"]

WAIT pauses for a fixed time; WAIT_FOR_CONNECTION waits up to that long for a LinkedIn invite to be accepted.

One of the following:
"WAIT"
"WAIT_FOR_CONNECTION"
unit: Literal["DAY", "MINUTE"]

Unit of duration.

One of the following:
"DAY"
"MINUTE"
name: str

Name the sequence takes when the draft is published.

publish_warnings: List[PublishWarning]

What publishing this draft would change for contacts already in the sequence; empty when nothing is affected. Before the first publish, the only possible warning is a proposed sender that was archived and would be left off.

code: Literal["delay_shortened", "delay_lengthened", "connection_wait_shortened", 18 more]

What publishing would change.

One of the following:
"delay_shortened"
"delay_lengthened"
"connection_wait_shortened"
"connection_wait_lengthened"
"send_schedule_changed"
"send_configuration_changed"
"send_priority_changed"
"senders_changed"
"email_sender_pool_emptied"
"linkedin_account_pool_emptied"
"assigned_sender_removed"
"delivery_became_automatic"
"invite_note_enabled"
"invite_note_disabled"
"step_inserted"
"automatic_send_step_inserted"
"step_removed"
"step_type_changed"
"step_order_changed"
"full_identity_rewrite"
"low_identity_overlap"
message: str

What would change, in plain language.

severity: Literal["warning", "destructive"]

destructive when contacts already in the sequence may skip, repeat or receive a step they would not have; warning otherwise.

One of the following:
"warning"
"destructive"
step_ids: List[str]

The steps involved; empty for a sequence-wide change.

reviewers: List[Reviewer]

Extra members who may approve this sequence’s FOR_REVIEW messages before they send. The sending member and the sequence’s creator always review, whether or not they are listed.

id: str

ID of the member.

minLength1
object_type: Literal["member"]

Always member.

senders: List[Sender]

The senders this draft will publish; new contacts rotate across them. Until a save changes it, this is the sequence’s live list. An archived sender stays listed but never sends; any change to the list drops it.

id: str

ID of the sender.

minLength1
object_type: Literal["sender"]

Always sender.

sequence_id: str

The sequence this draft belongs to.

updated_at: str

When the draft last changed.

version: str

Opaque token for the current state of the draft. Send it as expectedVersion on the next save, publish or discard; it changes whenever anyone edits the draft.

class SequenceDeactivateResponse: …
id: str

Unique identifier of the sequence.

channels: List[Literal["EMAIL", "LINKEDIN"]]

Channels the published steps send on; empty before the first publish.

One of the following:
"EMAIL"
"LINKEDIN"
created_at: str

ISO 8601 creation timestamp.

definition: Optional[Definition]

Published configuration, or null before the first publish.

description: str

What this version of the sequence is for.

messaging: DefinitionMessaging

Messaging inputs that frame every step.

call_to_action: Optional[str]

What the recipient is asked to do.

persona: Optional[str]

Who the sequence targets.

trigger: Optional[str]

Why the outreach is timely.

value_prop: Optional[str]

The value proposition.

pacing: DefinitionPacing

How the whole sequence paces each step type it sends, keyed by sequence step type.

email: DefinitionPacingEmail

Email steps.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_invite: DefinitionPacingLinkedinInvite

LinkedIn connection requests.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_message: DefinitionPacingLinkedinMessage

LinkedIn messages.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
priority: Literal["HIGH", "NORMAL"]

Send priority relative to other sequences.

One of the following:
"HIGH"
"NORMAL"
send_window: DefinitionSendWindow

When the sequence may send.

days_of_week: List[int]

Days sends may go out, 0 = Sunday.

end_hour: int

Local hour sends stop, exclusive (1–24).

minimum-9007199254740991
maximum9007199254740991
start_hour: int

First local hour sends may go out (0–23).

minimum-9007199254740991
maximum9007199254740991
timezone: str

IANA timezone of the window.

steps: List[DefinitionStep]

Email, LinkedIn and wait steps in execution order.

One of the following:
class DefinitionStepUnionMember0: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["EMAIL", "LINKEDIN_MESSAGE"]

Step type.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
class DefinitionStepUnionMember1: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember2: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember2Template

The email every contact receives.

body: str

Email body as Markdown, without the sign-off or signature, which are added when the message is written. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

subject: str

Plain-text subject line. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["EMAIL"]

Step type.

class DefinitionStepUnionMember3: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember3Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_MESSAGE"]

Step type.

class DefinitionStepUnionMember4: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember4Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember5: …
id: str

Step identifier.

duration: int

Length of the wait.

minimum-9007199254740991
maximum9007199254740991
type: Literal["WAIT", "WAIT_FOR_CONNECTION"]

WAIT pauses for a fixed time; WAIT_FOR_CONNECTION waits up to that long for a LinkedIn invite to be accepted.

One of the following:
"WAIT"
"WAIT_FOR_CONNECTION"
unit: Literal["DAY", "MINUTE"]

Unit of duration.

One of the following:
"DAY"
"MINUTE"
first_activated_at: Optional[str]

When the sequence was first activated.

last_activated_at: Optional[str]

When the sequence was most recently activated.

name: str

Name of the sequence.

object_type: Literal["sequence"]

Always sequence.

reviewers: List[Reviewer]

Extra members who may approve this sequence’s FOR_REVIEW messages before they send. The sending member and the sequence’s creator always review, whether or not they are listed.

id: str

ID of the member.

minLength1
object_type: Literal["member"]

Always member.

senders: List[Sender]

The senders this sequence sends from; new contacts rotate across them. An archived sender stays listed but never sends; any change to the list drops it.

id: str

ID of the sender.

minLength1
object_type: Literal["sender"]

Always sender.

status: Literal["DRAFT", "ACTIVE", "DEACTIVATED"]

DRAFT has not been published; ACTIVE is enabled for sending; DEACTIVATED is published but paused.

One of the following:
"DRAFT"
"ACTIVE"
"DEACTIVATED"
class SequenceDiscardDraftResponse: …
sequence_deleted: bool

True when the sequence had never been published, so discarding its only draft deleted it.

sequence_id: str

The sequence whose draft was discarded.

class SequenceListEnrollmentsResponse: …
data: List[Data]
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.

One of the following:
"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.

minimum-9007199254740991
maximum9007199254740991
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.

One of the following:
"ACTIVE"
"AWAITING_REVIEW"
"NEEDS_ATTENTION"
"REPLIED"
"COMPLETED"
"PAUSED"
"CANCELLED"
"FAILED"
object: Literal["list"]
total_count: int
minimum-9007199254740991
maximum9007199254740991
class SequenceListMessagesResponse: …
data: List[Data]
One of the following:
class DataOutboundMessage: …
id: str

Unique identifier of the message.

accepted_at: Optional[str]

When the connection request was accepted; null until then.

bounced_at: Optional[str]

When the email bounced; null until then.

channel: Literal["EMAIL", "LINKEDIN"]

Channel the message went over.

One of the following:
"EMAIL"
"LINKEDIN"
contact_id: str

ID of the contact.

created_at: str

When the message was created, or when a reply was received. Lists sort by this field, newest first.

direction: Literal["OUTBOUND"]

Always OUTBOUND.

enrollment_id: str

ID of the enrollment the message belongs to.

opened_at: Optional[str]

When the email was opened; null until then.

read_at: Optional[str]

When the LinkedIn message was read; null until then.

reference: Optional[DataOutboundMessageReference]

The email or LinkedIn message record behind this sequence message, readable with Retrieve an email or Retrieve a message under their own scopes; null when there is none.

One of the following:
class DataOutboundMessageReferenceEmail: …
id: str

ID of the email.

object_type: Literal["email"]

Always email.

class DataOutboundMessageReferenceMessage: …
id: str

ID of the message.

object_type: Literal["message"]

Always message.

replied_at: Optional[str]

When the contact replied to this message; null until then.

sent_at: Optional[str]

When the message was sent; null until then.

sequence_step_id: str

ID of the step that sent the message or, for a reply, the step it replied to.

sequence_step_type: Literal["EMAIL", "LINKEDIN_MESSAGE", "LINKEDIN_INVITE"]

Type of that step.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
"LINKEDIN_INVITE"
status: Literal["AWAITING_REVIEW", "SCHEDULED", "QUEUED", 4 more]

AWAITING_REVIEW is waiting for approval; SCHEDULED is composed and waiting for its send time; QUEUED is due and waiting on the sender. SENT, SKIPPED, FAILED and CANCELLED are final.

One of the following:
"AWAITING_REVIEW"
"SCHEDULED"
"QUEUED"
"SENT"
"SKIPPED"
"FAILED"
"CANCELLED"
status_changed_at: str

When status last changed.

class DataReply: …
id: str

Unique identifier of the message.

channel: Literal["EMAIL", "LINKEDIN"]

Channel the message went over.

One of the following:
"EMAIL"
"LINKEDIN"
contact_id: str

ID of the contact.

created_at: str

When the message was created, or when a reply was received. Lists sort by this field, newest first.

direction: Literal["INBOUND"]

Always INBOUND.

enrollment_id: str

ID of the enrollment the message belongs to.

received_at: str

When the reply was received.

reference: Optional[DataReplyReference]

The email or LinkedIn message record behind this sequence message, readable with Retrieve an email or Retrieve a message under their own scopes; null when there is none.

One of the following:
class DataReplyReferenceEmail: …
id: str

ID of the email.

object_type: Literal["email"]

Always email.

class DataReplyReferenceMessage: …
id: str

ID of the message.

object_type: Literal["message"]

Always message.

sequence_step_id: str

ID of the step that sent the message or, for a reply, the step it replied to.

sequence_step_type: Literal["EMAIL", "LINKEDIN_MESSAGE", "LINKEDIN_INVITE"]

Type of that step.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
"LINKEDIN_INVITE"
object: Literal["list"]
total_count: int
minimum-9007199254740991
maximum9007199254740991
class SequenceListResponse: …
data: List[Data]
id: str

Unique identifier of the sequence.

channels: List[Literal["EMAIL", "LINKEDIN"]]

Channels the published steps send on; empty before the first publish.

One of the following:
"EMAIL"
"LINKEDIN"
created_at: str

ISO 8601 creation timestamp.

definition: Optional[DataDefinition]

Published configuration, or null before the first publish.

description: str

What this version of the sequence is for.

messaging: DataDefinitionMessaging

Messaging inputs that frame every step.

call_to_action: Optional[str]

What the recipient is asked to do.

persona: Optional[str]

Who the sequence targets.

trigger: Optional[str]

Why the outreach is timely.

value_prop: Optional[str]

The value proposition.

pacing: DataDefinitionPacing

How the whole sequence paces each step type it sends, keyed by sequence step type.

email: DataDefinitionPacingEmail

Email steps.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_invite: DataDefinitionPacingLinkedinInvite

LinkedIn connection requests.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_message: DataDefinitionPacingLinkedinMessage

LinkedIn messages.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
priority: Literal["HIGH", "NORMAL"]

Send priority relative to other sequences.

One of the following:
"HIGH"
"NORMAL"
send_window: DataDefinitionSendWindow

When the sequence may send.

days_of_week: List[int]

Days sends may go out, 0 = Sunday.

end_hour: int

Local hour sends stop, exclusive (1–24).

minimum-9007199254740991
maximum9007199254740991
start_hour: int

First local hour sends may go out (0–23).

minimum-9007199254740991
maximum9007199254740991
timezone: str

IANA timezone of the window.

steps: List[DataDefinitionStep]

Email, LinkedIn and wait steps in execution order.

One of the following:
class DataDefinitionStepUnionMember0: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["EMAIL", "LINKEDIN_MESSAGE"]

Step type.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
class DataDefinitionStepUnionMember1: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DataDefinitionStepUnionMember2: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DataDefinitionStepUnionMember2Template

The email every contact receives.

body: str

Email body as Markdown, without the sign-off or signature, which are added when the message is written. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

subject: str

Plain-text subject line. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["EMAIL"]

Step type.

class DataDefinitionStepUnionMember3: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DataDefinitionStepUnionMember3Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_MESSAGE"]

Step type.

class DataDefinitionStepUnionMember4: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DataDefinitionStepUnionMember4Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DataDefinitionStepUnionMember5: …
id: str

Step identifier.

duration: int

Length of the wait.

minimum-9007199254740991
maximum9007199254740991
type: Literal["WAIT", "WAIT_FOR_CONNECTION"]

WAIT pauses for a fixed time; WAIT_FOR_CONNECTION waits up to that long for a LinkedIn invite to be accepted.

One of the following:
"WAIT"
"WAIT_FOR_CONNECTION"
unit: Literal["DAY", "MINUTE"]

Unit of duration.

One of the following:
"DAY"
"MINUTE"
first_activated_at: Optional[str]

When the sequence was first activated.

last_activated_at: Optional[str]

When the sequence was most recently activated.

name: str

Name of the sequence.

object_type: Literal["sequence"]

Always sequence.

reviewers: List[DataReviewer]

Extra members who may approve this sequence’s FOR_REVIEW messages before they send. The sending member and the sequence’s creator always review, whether or not they are listed.

id: str

ID of the member.

minLength1
object_type: Literal["member"]

Always member.

senders: List[DataSender]

The senders this sequence sends from; new contacts rotate across them. An archived sender stays listed but never sends; any change to the list drops it.

id: str

ID of the sender.

minLength1
object_type: Literal["sender"]

Always sender.

status: Literal["DRAFT", "ACTIVE", "DEACTIVATED"]

DRAFT has not been published; ACTIVE is enabled for sending; DEACTIVATED is published but paused.

One of the following:
"DRAFT"
"ACTIVE"
"DEACTIVATED"
object: Literal["list"]
total_count: int
minimum-9007199254740991
maximum9007199254740991
class SequenceListTemplateVariablesResponse: …
data: List[Data]
field: Optional[DataField]

The field the variable reads; null for built-in variables.

id: str

The ad_ id of the field, as the field-definitions endpoints list it.

value_type: Literal["ADDRESS", "CHECKBOX", "CURRENCY", 12 more]

Type of the field.

One of the following:
"ADDRESS"
"CHECKBOX"
"CURRENCY"
"DATETIME"
"EMAIL"
"FULL_NAME"
"MARKDOWN"
"MULTI_SELECT"
"NUMBER"
"SINGLE_SELECT"
"SOCIAL_HANDLE"
"TELEPHONE"
"TEXT"
"URL"
"HTML"
group: Literal["contact", "account", "sender"]

Whose value the variable prints: the enrolled contact, its first account, or the step’s sender.

One of the following:
"contact"
"account"
"sender"
label: str

Name of the variable, as the editor shows it.

ref: str

The variable, e.g. {{ {attr:ad_…} }}. A variable needs a fallback for contacts missing the value: {{ {attr:ad_…} }} is written {{ coalesce({attr:ad_…}, "fallback") }}, and one without a fallback is refused when the draft is saved.

object: Literal["list"]
total_count: int
minimum-9007199254740991
maximum9007199254740991
class SequencePublishDraftResponse: …
id: str

Unique identifier of the sequence.

channels: List[Literal["EMAIL", "LINKEDIN"]]

Channels the published steps send on; empty before the first publish.

One of the following:
"EMAIL"
"LINKEDIN"
created_at: str

ISO 8601 creation timestamp.

definition: Optional[Definition]

Published configuration, or null before the first publish.

description: str

What this version of the sequence is for.

messaging: DefinitionMessaging

Messaging inputs that frame every step.

call_to_action: Optional[str]

What the recipient is asked to do.

persona: Optional[str]

Who the sequence targets.

trigger: Optional[str]

Why the outreach is timely.

value_prop: Optional[str]

The value proposition.

pacing: DefinitionPacing

How the whole sequence paces each step type it sends, keyed by sequence step type.

email: DefinitionPacingEmail

Email steps.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_invite: DefinitionPacingLinkedinInvite

LinkedIn connection requests.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_message: DefinitionPacingLinkedinMessage

LinkedIn messages.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
priority: Literal["HIGH", "NORMAL"]

Send priority relative to other sequences.

One of the following:
"HIGH"
"NORMAL"
send_window: DefinitionSendWindow

When the sequence may send.

days_of_week: List[int]

Days sends may go out, 0 = Sunday.

end_hour: int

Local hour sends stop, exclusive (1–24).

minimum-9007199254740991
maximum9007199254740991
start_hour: int

First local hour sends may go out (0–23).

minimum-9007199254740991
maximum9007199254740991
timezone: str

IANA timezone of the window.

steps: List[DefinitionStep]

Email, LinkedIn and wait steps in execution order.

One of the following:
class DefinitionStepUnionMember0: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["EMAIL", "LINKEDIN_MESSAGE"]

Step type.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
class DefinitionStepUnionMember1: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember2: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember2Template

The email every contact receives.

body: str

Email body as Markdown, without the sign-off or signature, which are added when the message is written. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

subject: str

Plain-text subject line. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["EMAIL"]

Step type.

class DefinitionStepUnionMember3: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember3Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_MESSAGE"]

Step type.

class DefinitionStepUnionMember4: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember4Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember5: …
id: str

Step identifier.

duration: int

Length of the wait.

minimum-9007199254740991
maximum9007199254740991
type: Literal["WAIT", "WAIT_FOR_CONNECTION"]

WAIT pauses for a fixed time; WAIT_FOR_CONNECTION waits up to that long for a LinkedIn invite to be accepted.

One of the following:
"WAIT"
"WAIT_FOR_CONNECTION"
unit: Literal["DAY", "MINUTE"]

Unit of duration.

One of the following:
"DAY"
"MINUTE"
first_activated_at: Optional[str]

When the sequence was first activated.

last_activated_at: Optional[str]

When the sequence was most recently activated.

name: str

Name of the sequence.

object_type: Literal["sequence"]

Always sequence.

reviewers: List[Reviewer]

Extra members who may approve this sequence’s FOR_REVIEW messages before they send. The sending member and the sequence’s creator always review, whether or not they are listed.

id: str

ID of the member.

minLength1
object_type: Literal["member"]

Always member.

senders: List[Sender]

The senders this sequence sends from; new contacts rotate across them. An archived sender stays listed but never sends; any change to the list drops it.

id: str

ID of the sender.

minLength1
object_type: Literal["sender"]

Always sender.

status: Literal["DRAFT", "ACTIVE", "DEACTIVATED"]

DRAFT has not been published; ACTIVE is enabled for sending; DEACTIVATED is published but paused.

One of the following:
"DRAFT"
"ACTIVE"
"DEACTIVATED"
class SequenceRetrieveDraftResponse: …
channels: List[Literal["EMAIL", "LINKEDIN"]]

Channels the draft’s steps send on.

One of the following:
"EMAIL"
"LINKEDIN"
definition: Definition

The draft configuration, in the same shape as a published definition.

description: str

What this version of the sequence is for.

messaging: DefinitionMessaging

Messaging inputs that frame every step.

call_to_action: Optional[str]

What the recipient is asked to do.

persona: Optional[str]

Who the sequence targets.

trigger: Optional[str]

Why the outreach is timely.

value_prop: Optional[str]

The value proposition.

pacing: DefinitionPacing

How the whole sequence paces each step type it sends, keyed by sequence step type.

email: DefinitionPacingEmail

Email steps.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_invite: DefinitionPacingLinkedinInvite

LinkedIn connection requests.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_message: DefinitionPacingLinkedinMessage

LinkedIn messages.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
priority: Literal["HIGH", "NORMAL"]

Send priority relative to other sequences.

One of the following:
"HIGH"
"NORMAL"
send_window: DefinitionSendWindow

When the sequence may send.

days_of_week: List[int]

Days sends may go out, 0 = Sunday.

end_hour: int

Local hour sends stop, exclusive (1–24).

minimum-9007199254740991
maximum9007199254740991
start_hour: int

First local hour sends may go out (0–23).

minimum-9007199254740991
maximum9007199254740991
timezone: str

IANA timezone of the window.

steps: List[DefinitionStep]

Email, LinkedIn and wait steps in execution order.

One of the following:
class DefinitionStepUnionMember0: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["EMAIL", "LINKEDIN_MESSAGE"]

Step type.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
class DefinitionStepUnionMember1: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember2: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember2Template

The email every contact receives.

body: str

Email body as Markdown, without the sign-off or signature, which are added when the message is written. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

subject: str

Plain-text subject line. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["EMAIL"]

Step type.

class DefinitionStepUnionMember3: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember3Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_MESSAGE"]

Step type.

class DefinitionStepUnionMember4: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember4Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember5: …
id: str

Step identifier.

duration: int

Length of the wait.

minimum-9007199254740991
maximum9007199254740991
type: Literal["WAIT", "WAIT_FOR_CONNECTION"]

WAIT pauses for a fixed time; WAIT_FOR_CONNECTION waits up to that long for a LinkedIn invite to be accepted.

One of the following:
"WAIT"
"WAIT_FOR_CONNECTION"
unit: Literal["DAY", "MINUTE"]

Unit of duration.

One of the following:
"DAY"
"MINUTE"
name: str

Name the sequence takes when the draft is published.

publish_warnings: List[PublishWarning]

What publishing this draft would change for contacts already in the sequence; empty when nothing is affected. Before the first publish, the only possible warning is a proposed sender that was archived and would be left off.

code: Literal["delay_shortened", "delay_lengthened", "connection_wait_shortened", 18 more]

What publishing would change.

One of the following:
"delay_shortened"
"delay_lengthened"
"connection_wait_shortened"
"connection_wait_lengthened"
"send_schedule_changed"
"send_configuration_changed"
"send_priority_changed"
"senders_changed"
"email_sender_pool_emptied"
"linkedin_account_pool_emptied"
"assigned_sender_removed"
"delivery_became_automatic"
"invite_note_enabled"
"invite_note_disabled"
"step_inserted"
"automatic_send_step_inserted"
"step_removed"
"step_type_changed"
"step_order_changed"
"full_identity_rewrite"
"low_identity_overlap"
message: str

What would change, in plain language.

severity: Literal["warning", "destructive"]

destructive when contacts already in the sequence may skip, repeat or receive a step they would not have; warning otherwise.

One of the following:
"warning"
"destructive"
step_ids: List[str]

The steps involved; empty for a sequence-wide change.

reviewers: List[Reviewer]

Extra members who may approve this sequence’s FOR_REVIEW messages before they send. The sending member and the sequence’s creator always review, whether or not they are listed.

id: str

ID of the member.

minLength1
object_type: Literal["member"]

Always member.

senders: List[Sender]

The senders this draft will publish; new contacts rotate across them. Until a save changes it, this is the sequence’s live list. An archived sender stays listed but never sends; any change to the list drops it.

id: str

ID of the sender.

minLength1
object_type: Literal["sender"]

Always sender.

sequence_id: str

The sequence this draft belongs to.

updated_at: str

When the draft last changed.

version: str

Opaque token for the current state of the draft. Send it as expectedVersion on the next save, publish or discard; it changes whenever anyone edits the draft.

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.

One of the following:
"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.

minimum-9007199254740991
maximum9007199254740991
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.

One of the following:
"ACTIVE"
"AWAITING_REVIEW"
"NEEDS_ATTENTION"
"REPLIED"
"COMPLETED"
"PAUSED"
"CANCELLED"
"FAILED"
One of the following:
class OutboundMessage: …
id: str

Unique identifier of the message.

accepted_at: Optional[str]

When the connection request was accepted; null until then.

bounced_at: Optional[str]

When the email bounced; null until then.

channel: Literal["EMAIL", "LINKEDIN"]

Channel the message went over.

One of the following:
"EMAIL"
"LINKEDIN"
contact_id: str

ID of the contact.

content: Optional[OutboundMessageContent]

Plain-text content of the message. Null when the underlying record is no longer available; not included in list responses.

body: Optional[str]

Plain-text body; null for a connection request sent without a note.

subject: Optional[str]

Email subject; null for LinkedIn.

created_at: str

When the message was created, or when a reply was received. Lists sort by this field, newest first.

direction: Literal["OUTBOUND"]

Always OUTBOUND.

enrollment_id: str

ID of the enrollment the message belongs to.

opened_at: Optional[str]

When the email was opened; null until then.

read_at: Optional[str]

When the LinkedIn message was read; null until then.

reference: Optional[OutboundMessageReference]

The email or LinkedIn message record behind this sequence message, readable with Retrieve an email or Retrieve a message under their own scopes; null when there is none.

One of the following:
class OutboundMessageReferenceEmail: …
id: str

ID of the email.

object_type: Literal["email"]

Always email.

class OutboundMessageReferenceMessage: …
id: str

ID of the message.

object_type: Literal["message"]

Always message.

replied_at: Optional[str]

When the contact replied to this message; null until then.

sent_at: Optional[str]

When the message was sent; null until then.

sequence_step_id: str

ID of the step that sent the message or, for a reply, the step it replied to.

sequence_step_type: Literal["EMAIL", "LINKEDIN_MESSAGE", "LINKEDIN_INVITE"]

Type of that step.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
"LINKEDIN_INVITE"
status: Literal["AWAITING_REVIEW", "SCHEDULED", "QUEUED", 4 more]

AWAITING_REVIEW is waiting for approval; SCHEDULED is composed and waiting for its send time; QUEUED is due and waiting on the sender. SENT, SKIPPED, FAILED and CANCELLED are final.

One of the following:
"AWAITING_REVIEW"
"SCHEDULED"
"QUEUED"
"SENT"
"SKIPPED"
"FAILED"
"CANCELLED"
status_changed_at: str

When status last changed.

class Reply: …
id: str

Unique identifier of the message.

channel: Literal["EMAIL", "LINKEDIN"]

Channel the message went over.

One of the following:
"EMAIL"
"LINKEDIN"
contact_id: str

ID of the contact.

content: Optional[ReplyContent]

Plain-text content of the message. Null when the underlying record is no longer available; not included in list responses.

body: Optional[str]

Plain-text body; null for a connection request sent without a note.

subject: Optional[str]

Email subject; null for LinkedIn.

created_at: str

When the message was created, or when a reply was received. Lists sort by this field, newest first.

direction: Literal["INBOUND"]

Always INBOUND.

enrollment_id: str

ID of the enrollment the message belongs to.

received_at: str

When the reply was received.

reference: Optional[ReplyReference]

The email or LinkedIn message record behind this sequence message, readable with Retrieve an email or Retrieve a message under their own scopes; null when there is none.

One of the following:
class ReplyReferenceEmail: …
id: str

ID of the email.

object_type: Literal["email"]

Always email.

class ReplyReferenceMessage: …
id: str

ID of the message.

object_type: Literal["message"]

Always message.

sequence_step_id: str

ID of the step that sent the message or, for a reply, the step it replied to.

sequence_step_type: Literal["EMAIL", "LINKEDIN_MESSAGE", "LINKEDIN_INVITE"]

Type of that step.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
"LINKEDIN_INVITE"
class SequenceRetrievePerformanceResponse: …
by_step_type: ByStepType

Lifetime totals for each step type, across all of its steps.

email: ByStepTypeEmail

Email steps.

bounced: int

Sent emails that bounced.

minimum-9007199254740991
maximum9007199254740991
bounce_rate: Optional[float]

Bounced divided by sent; null if none sent.

current_enrollments: int

Enrollments currently on steps of this type, paused ones included.

minimum-9007199254740991
maximum9007199254740991
delivered: int

Sent minus bounced, never below zero.

minimum-9007199254740991
maximum9007199254740991
opened: int

Sent emails that were opened.

minimum-9007199254740991
maximum9007199254740991
open_rate: Optional[float]

Opened divided by delivered; null if none delivered.

replied: int

Sent messages that received a reply.

minimum-9007199254740991
maximum9007199254740991
reply_rate: Optional[float]

Replied divided by delivered; null if none delivered.

sent: int

Messages sent.

minimum-9007199254740991
maximum9007199254740991
linkedin_invite: ByStepTypeLinkedinInvite

LinkedIn connection request steps.

acceptance_rate: Optional[float]

Accepted divided by sent; null if none sent.

accepted: int

Connection requests that were accepted.

minimum-9007199254740991
maximum9007199254740991
current_enrollments: int

Enrollments currently on steps of this type, paused ones included.

minimum-9007199254740991
maximum9007199254740991
replied: int

Sent messages that received a reply.

minimum-9007199254740991
maximum9007199254740991
reply_rate: Optional[float]

Replied divided by sent; null if none sent.

sent: int

Messages sent.

minimum-9007199254740991
maximum9007199254740991
linkedin_message: ByStepTypeLinkedinMessage

LinkedIn message steps.

current_enrollments: int

Enrollments currently on steps of this type, paused ones included.

minimum-9007199254740991
maximum9007199254740991
read: int

Sent messages that were read.

minimum-9007199254740991
maximum9007199254740991
read_rate: Optional[float]

Read divided by sent; null if none sent.

replied: int

Sent messages that received a reply.

minimum-9007199254740991
maximum9007199254740991
reply_rate: Optional[float]

Replied divided by sent; null if none sent.

sent: int

Messages sent.

minimum-9007199254740991
maximum9007199254740991
wait: ByStepTypeWait

Wait steps.

current_enrollments: int

Enrollments currently on steps of this type, paused ones included.

minimum-9007199254740991
maximum9007199254740991
wait_for_connection: ByStepTypeWaitForConnection

Wait-for-connection steps.

current_enrollments: int

Enrollments currently on steps of this type, paused ones included.

minimum-9007199254740991
maximum9007199254740991
per_step: List[PerStep]

Per-step statistics in published sequence order, including steps with no activity. Steps no longer in the published definition are included if they have sent messages.

One of the following:
class PerStepEmailStep: …
bounced: int

Sent emails that bounced.

minimum-9007199254740991
maximum9007199254740991
bounce_rate: Optional[float]

Bounced divided by sent; null if none sent.

current_enrollments: int

Enrollments currently on this step, paused ones included.

minimum-9007199254740991
maximum9007199254740991
delivered: int

Sent minus bounced, never below zero.

minimum-9007199254740991
maximum9007199254740991
opened: int

Sent emails that were opened.

minimum-9007199254740991
maximum9007199254740991
open_rate: Optional[float]

Opened divided by delivered; null if none delivered.

replied: int

Sent messages that received a reply.

minimum-9007199254740991
maximum9007199254740991
reply_rate: Optional[float]

Replied divided by delivered; null if none delivered.

sent: int

Messages sent.

minimum-9007199254740991
maximum9007199254740991
sequence_step_id: str

ID of the step. A step no longer in the published definition keeps its original ID.

sequence_step_type: Literal["EMAIL"]
class PerStepLinkedInMessageStep: …
current_enrollments: int

Enrollments currently on this step, paused ones included.

minimum-9007199254740991
maximum9007199254740991
read: int

Sent messages that were read.

minimum-9007199254740991
maximum9007199254740991
read_rate: Optional[float]

Read divided by sent; null if none sent.

replied: int

Sent messages that received a reply.

minimum-9007199254740991
maximum9007199254740991
reply_rate: Optional[float]

Replied divided by sent; null if none sent.

sent: int

Messages sent.

minimum-9007199254740991
maximum9007199254740991
sequence_step_id: str

ID of the step. A step no longer in the published definition keeps its original ID.

sequence_step_type: Literal["LINKEDIN_MESSAGE"]
class PerStepLinkedInInviteStep: …
acceptance_rate: Optional[float]

Accepted divided by sent; null if none sent.

accepted: int

Connection requests that were accepted.

minimum-9007199254740991
maximum9007199254740991
current_enrollments: int

Enrollments currently on this step, paused ones included.

minimum-9007199254740991
maximum9007199254740991
replied: int

Sent messages that received a reply.

minimum-9007199254740991
maximum9007199254740991
reply_rate: Optional[float]

Replied divided by sent; null if none sent.

sent: int

Messages sent.

minimum-9007199254740991
maximum9007199254740991
sequence_step_id: str

ID of the step. A step no longer in the published definition keeps its original ID.

sequence_step_type: Literal["LINKEDIN_INVITE"]
class PerStepWaitStep: …
current_enrollments: int

Enrollments currently on this step, paused ones included.

minimum-9007199254740991
maximum9007199254740991
sequence_step_id: str

ID of the step. A step no longer in the published definition keeps its original ID.

sequence_step_type: Literal["WAIT"]
class PerStepWaitForConnectionStep: …
current_enrollments: int

Enrollments currently on this step, paused ones included.

minimum-9007199254740991
maximum9007199254740991
sequence_step_id: str

ID of the step. A step no longer in the published definition keeps its original ID.

sequence_step_type: Literal["WAIT_FOR_CONNECTION"]
class SequenceRetrieveResponse: …
id: str

Unique identifier of the sequence.

channels: List[Literal["EMAIL", "LINKEDIN"]]

Channels the published steps send on; empty before the first publish.

One of the following:
"EMAIL"
"LINKEDIN"
created_at: str

ISO 8601 creation timestamp.

definition: Optional[Definition]

Published configuration, or null before the first publish.

description: str

What this version of the sequence is for.

messaging: DefinitionMessaging

Messaging inputs that frame every step.

call_to_action: Optional[str]

What the recipient is asked to do.

persona: Optional[str]

Who the sequence targets.

trigger: Optional[str]

Why the outreach is timely.

value_prop: Optional[str]

The value proposition.

pacing: DefinitionPacing

How the whole sequence paces each step type it sends, keyed by sequence step type.

email: DefinitionPacingEmail

Email steps.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_invite: DefinitionPacingLinkedinInvite

LinkedIn connection requests.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_message: DefinitionPacingLinkedinMessage

LinkedIn messages.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
priority: Literal["HIGH", "NORMAL"]

Send priority relative to other sequences.

One of the following:
"HIGH"
"NORMAL"
send_window: DefinitionSendWindow

When the sequence may send.

days_of_week: List[int]

Days sends may go out, 0 = Sunday.

end_hour: int

Local hour sends stop, exclusive (1–24).

minimum-9007199254740991
maximum9007199254740991
start_hour: int

First local hour sends may go out (0–23).

minimum-9007199254740991
maximum9007199254740991
timezone: str

IANA timezone of the window.

steps: List[DefinitionStep]

Email, LinkedIn and wait steps in execution order.

One of the following:
class DefinitionStepUnionMember0: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["EMAIL", "LINKEDIN_MESSAGE"]

Step type.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
class DefinitionStepUnionMember1: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember2: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember2Template

The email every contact receives.

body: str

Email body as Markdown, without the sign-off or signature, which are added when the message is written. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

subject: str

Plain-text subject line. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["EMAIL"]

Step type.

class DefinitionStepUnionMember3: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember3Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_MESSAGE"]

Step type.

class DefinitionStepUnionMember4: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember4Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember5: …
id: str

Step identifier.

duration: int

Length of the wait.

minimum-9007199254740991
maximum9007199254740991
type: Literal["WAIT", "WAIT_FOR_CONNECTION"]

WAIT pauses for a fixed time; WAIT_FOR_CONNECTION waits up to that long for a LinkedIn invite to be accepted.

One of the following:
"WAIT"
"WAIT_FOR_CONNECTION"
unit: Literal["DAY", "MINUTE"]

Unit of duration.

One of the following:
"DAY"
"MINUTE"
first_activated_at: Optional[str]

When the sequence was first activated.

last_activated_at: Optional[str]

When the sequence was most recently activated.

name: str

Name of the sequence.

object_type: Literal["sequence"]

Always sequence.

reviewers: List[Reviewer]

Extra members who may approve this sequence’s FOR_REVIEW messages before they send. The sending member and the sequence’s creator always review, whether or not they are listed.

id: str

ID of the member.

minLength1
object_type: Literal["member"]

Always member.

senders: List[Sender]

The senders this sequence sends from; new contacts rotate across them. An archived sender stays listed but never sends; any change to the list drops it.

id: str

ID of the sender.

minLength1
object_type: Literal["sender"]

Always sender.

status: Literal["DRAFT", "ACTIVE", "DEACTIVATED"]

DRAFT has not been published; ACTIVE is enabled for sending; DEACTIVATED is published but paused.

One of the following:
"DRAFT"
"ACTIVE"
"DEACTIVATED"
class SequenceRetrieveTestResponse: …
id: str

ID of the test, an enrollment ID.

contact_id: str

ID of the contact tested.

status: Literal["RUNNING", "COMPLETED", "FAILED"]

RUNNING until every step has finished, then COMPLETED, or FAILED when the test ended on a failure.

One of the following:
"RUNNING"
"COMPLETED"
"FAILED"
steps: List[Step]

Every step of the tested version that the Sequences API lists, in run order. Call steps are not part of the API yet, so a test reports nothing for them.

error: Optional[StepError]

Why the step failed; null unless outcome is FAILED.

code: Literal["CONFIGURATION_ERROR", "SYSTEM_ERROR"]

CONFIGURATION_ERROR when the sequence or the contact needs a change, SYSTEM_ERROR when Lightfield failed.

One of the following:
"CONFIGURATION_ERROR"
"SYSTEM_ERROR"
message: str

What went wrong, in plain words.

message: Optional[StepMessage]

The composed message; null when the step has not composed one.

One of the following:
class StepMessageEmailMessage: …
body: str

Body as markdown, the same form a template step reads back in.

subject: str

Subject line, as composed.

class StepMessageLinkedInMessage: …
body: str

Message text, as composed.

mode: Optional[Literal["AGENT", "TEMPLATE"]]

How a send step’s content is composed; null for a wait step.

One of the following:
"AGENT"
"TEMPLATE"
name: Optional[str]

Name of the step, as in definition.steps; null for a wait step.

outcome: Literal["PENDING", "COMPOSED", "SKIPPED", "FAILED"]

PENDING while the step has not run, including a step a finished test never reached, COMPOSED when it produced a message, SKIPPED when it produced nothing: a test never waits, so a wait is always SKIPPED, and a send step is SKIPPED when it has nothing to send, such as a LinkedIn invite another step already sent. FAILED when it failed: see error.

One of the following:
"PENDING"
"COMPOSED"
"SKIPPED"
"FAILED"
step_id: str

ID of the step, as in the sequence’s definition.steps.

type: Literal["EMAIL", "LINKEDIN_MESSAGE", "LINKEDIN_INVITE", 2 more]

Step type.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
"LINKEDIN_INVITE"
"WAIT"
"WAIT_FOR_CONNECTION"
target: Literal["DRAFT", "PUBLISHED"]

Which version was tested.

One of the following:
"DRAFT"
"PUBLISHED"
class SequenceStartTestResponse: …
id: str

ID of the test, an enrollment ID. Use it to read the result.

contact_id: str

ID of the contact being tested.

status: Literal["RUNNING"]

Always RUNNING: the test continues after the response.

target: Literal["DRAFT", "PUBLISHED"]

Which version is being tested: the open DRAFT when there is one or the sequence was never published, otherwise the PUBLISHED version.

One of the following:
"DRAFT"
"PUBLISHED"
class SequenceUpdateDraftResponse: …
channels: List[Literal["EMAIL", "LINKEDIN"]]

Channels the draft’s steps send on.

One of the following:
"EMAIL"
"LINKEDIN"
definition: Definition

The draft configuration, in the same shape as a published definition.

description: str

What this version of the sequence is for.

messaging: DefinitionMessaging

Messaging inputs that frame every step.

call_to_action: Optional[str]

What the recipient is asked to do.

persona: Optional[str]

Who the sequence targets.

trigger: Optional[str]

Why the outreach is timely.

value_prop: Optional[str]

The value proposition.

pacing: DefinitionPacing

How the whole sequence paces each step type it sends, keyed by sequence step type.

email: DefinitionPacingEmail

Email steps.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_invite: DefinitionPacingLinkedinInvite

LinkedIn connection requests.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
linkedin_message: DefinitionPacingLinkedinMessage

LinkedIn messages.

daily_limit: Optional[int]

Most sends of this step type across the whole sequence in any rolling 24 hours, or null when the sequence sets no daily cap. Workspace and sender limits still apply.

minimum-9007199254740991
maximum9007199254740991
priority: Literal["HIGH", "NORMAL"]

Send priority relative to other sequences.

One of the following:
"HIGH"
"NORMAL"
send_window: DefinitionSendWindow

When the sequence may send.

days_of_week: List[int]

Days sends may go out, 0 = Sunday.

end_hour: int

Local hour sends stop, exclusive (1–24).

minimum-9007199254740991
maximum9007199254740991
start_hour: int

First local hour sends may go out (0–23).

minimum-9007199254740991
maximum9007199254740991
timezone: str

IANA timezone of the window.

steps: List[DefinitionStep]

Email, LinkedIn and wait steps in execution order.

One of the following:
class DefinitionStepUnionMember0: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["EMAIL", "LINKEDIN_MESSAGE"]

Step type.

One of the following:
"EMAIL"
"LINKEDIN_MESSAGE"
class DefinitionStepUnionMember1: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["AGENT"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

prompt: str

Instructions the agent follows when composing this message.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember2: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember2Template

The email every contact receives.

body: str

Email body as Markdown, without the sign-off or signature, which are added when the message is written. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

subject: str

Plain-text subject line. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["EMAIL"]

Step type.

class DefinitionStepUnionMember3: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember3Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_MESSAGE"]

Step type.

class DefinitionStepUnionMember4: …
id: str

Step identifier, referenced by enrollment currentStepId and message sequenceStepId.

delivery_mode: Literal["AUTO", "FOR_REVIEW"]

AUTO sends without manual approval, subject to the send window and limits; FOR_REVIEW requires a person to approve the draft before sending.

One of the following:
"AUTO"
"FOR_REVIEW"
include_note: bool

Whether the connection request carries a note. A step authored before this setting existed reads as true.

mode: Literal["TEMPLATE"]

How each message is written: AGENT composes it from prompt; TEMPLATE sends template to every contact, with its variables filled in.

name: str

Display name of the step.

template: DefinitionStepUnionMember4Template

The message every contact receives; for an invite, its connection note, sent only with includeNote.

body: str

Plain-text message. Each {{ }} is a variable filled in per contact, with a fallback for a contact missing the value; a field variable names the field by the ad_ ID the field-definitions endpoints list.

type: Literal["LINKEDIN_INVITE"]

Step type.

class DefinitionStepUnionMember5: …
id: str

Step identifier.

duration: int

Length of the wait.

minimum-9007199254740991
maximum9007199254740991
type: Literal["WAIT", "WAIT_FOR_CONNECTION"]

WAIT pauses for a fixed time; WAIT_FOR_CONNECTION waits up to that long for a LinkedIn invite to be accepted.

One of the following:
"WAIT"
"WAIT_FOR_CONNECTION"
unit: Literal["DAY", "MINUTE"]

Unit of duration.

One of the following:
"DAY"
"MINUTE"
name: str

Name the sequence takes when the draft is published.

publish_warnings: List[PublishWarning]

What publishing this draft would change for contacts already in the sequence; empty when nothing is affected. Before the first publish, the only possible warning is a proposed sender that was archived and would be left off.

code: Literal["delay_shortened", "delay_lengthened", "connection_wait_shortened", 18 more]

What publishing would change.

One of the following:
"delay_shortened"
"delay_lengthened"
"connection_wait_shortened"
"connection_wait_lengthened"
"send_schedule_changed"
"send_configuration_changed"
"send_priority_changed"
"senders_changed"
"email_sender_pool_emptied"
"linkedin_account_pool_emptied"
"assigned_sender_removed"
"delivery_became_automatic"
"invite_note_enabled"
"invite_note_disabled"
"step_inserted"
"automatic_send_step_inserted"
"step_removed"
"step_type_changed"
"step_order_changed"
"full_identity_rewrite"
"low_identity_overlap"
message: str

What would change, in plain language.

severity: Literal["warning", "destructive"]

destructive when contacts already in the sequence may skip, repeat or receive a step they would not have; warning otherwise.

One of the following:
"warning"
"destructive"
step_ids: List[str]

The steps involved; empty for a sequence-wide change.

reviewers: List[Reviewer]

Extra members who may approve this sequence’s FOR_REVIEW messages before they send. The sending member and the sequence’s creator always review, whether or not they are listed.

id: str

ID of the member.

minLength1
object_type: Literal["member"]

Always member.

senders: List[Sender]

The senders this draft will publish; new contacts rotate across them. Until a save changes it, this is the sequence’s live list. An archived sender stays listed but never sends; any change to the list drops it.

id: str

ID of the sender.

minLength1
object_type: Literal["sender"]

Always sender.

sequence_id: str

The sequence this draft belongs to.

updated_at: str

When the draft last changed.

version: str

Opaque token for the current state of the draft. Send it as expectedVersion on the next save, publish or discard; it changes whenever anyone edits the draft.

class SequenceUpdateEnrollmentsResponse: …
results: List[Result]

One result per distinct contact, additions first, then removals.

One of the following:
class ResultEnrollmentChanged: …
contact_id: str

ID of the contact.

enrollment_id: str

ID of the enrollment the outcome applies to.

outcome: Literal["enrolled", "already_enrolled", "unenrolled"]

enrolled created the enrollment, already_enrolled left an open one as is, unenrolled cancelled it.

One of the following:
"enrolled"
"already_enrolled"
"unenrolled"
class ResultNothingToCancel: …
contact_id: str

ID of the contact.

enrollment_id: None

Always null.

outcome: Literal["no_active_enrollment"]

The contact had no open enrollment to cancel.