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.