Outbound follow-up
Run an email follow-up sequence.
Enroll a contact or thread into a controlled sequence, stop on reply, and keep the history attached to the inbox.
Token first
Make sure the agent has these scopes.
Create a new token or update the agent's current token before trying the calls below.
Required token scopes
contacts:read
contacts:write
sequences:write
email:send
Outcome
What this gives you.
Follow-up happens reliably without a human manually tracking every thread.
Use when
The operational shape.
- A lead, customer, vendor, or applicant needs timed follow-ups.
- You want follow-up to stop when a person replies.
- You need message history, contact state, and workflow rules in one place.
API sequence
The calls to make.
01
Create or update the contact
POST/v1/contacts/
Attach the email address, name, labels, and source context.
Default example
Use this as the default shape for this step.
{
"inbox_id": "inb_123",
"full_name": "Avery Chen",
"emails": [{"label": "work", "address": "buyer@example.com"}],
"notes": "Source message: msg_123. Labels to apply after creation: lead, proposal-open."
}
02
Create the sequence
POST/v1/sequences/
Define the timing, email bodies or prompts, and reply exit behavior.
Default example
Use a saved sequence when the same cadence should run across many contacts.
{
"name": "Proposal follow-up",
"sender_inbox_id": "inb_123",
"exit_on_reply": true,
"emails": [
{
"delay_days": 2,
"subject": "Following up on the proposal",
"body": "Checking whether you had a chance to review the proposal."
},
{
"delay_days": 5,
"subject": "Any questions on the proposal?",
"body": "Happy to answer questions or adjust timing if useful."
}
],
"exit_condition_prompt": "Exit if the contact replies, declines, or says the request is no longer relevant."
}
Prompt-assisted sequence
Use this when the email should adapt from the enrollment source at send time.
{
"name": "Contextual client nudge",
"sender_inbox_id": "inb_123",
"exit_on_reply": true,
"emails": [
{
"delay_days": 4,
"subject": "Following up",
"prompt": "Write a concise follow-up based on the source message and latest thread context."
}
],
"exit_condition_prompt": "Exit if the contact replies or clearly declines."
}
03
Enroll the contact
POST/v1/sequences/enrollments/
Start a saved sequence or an ad-hoc email series for the contact.
Default example
Use template enrollment when your app already knows the inbox, contact, and sequence to start.
{
"inbox_id": "inb_123",
"sequence_id": "seq_123",
"recipient": {"contact_id": "ctc_123"},
"source": {
"type": "email",
"message_id": "msg_123",
"thread_id": "thr_123",
"subject": "Proposal for review",
"from_address": "buyer@example.com"
}
}
Ad-hoc enrollment
Use this for a one-off follow-up where the emails belong only to this recipient.
{
"inbox_id": "inb_123",
"recipient": {"email": "buyer@example.com"},
"exit_on_reply": true,
"source": {
"type": "email",
"message_id": "msg_123",
"thread_id": "thr_123"
},
"emails": [
{
"delay_days": 2,
"subject": "Following up",
"body": "Checking whether this is still useful."
}
]
}
Automation-triggered enrollment
Use this when a label should start the saved sequence without a separate enrollment call.
{
"inbox_id": "inb_123",
"recipient": {"contact_id": "ctc_123"},
"sequence_id": "seq_123",
"exit_on_reply": true,
"source": {
"type": "email",
"message_id": "msg_123",
"thread_id": "thr_123",
"subject": "Proposal follow-up trigger"
}
}
04
Cancel when needed
PATCH/v1/sequences/enrollments/{enrollment_id}/
Replies exit automatically when exit_on_reply is true; cancel manually when work changes.
Default example
Use this as the default shape for this step.
{
"action": "cancel"
}
Controls
Review points.
- Sequence enrollment can be direct API work or triggered by an workflow rule.
- Keep unsubscribe and suppression behavior separate from internal reminders.