Skip to content

Sequences

Timed series of emails and tasks for one Contact at a time, enrolled by one call, stopped on any reply, and ended by an unsubscribe.

System
Sequences
Nouns
3
Verbs
8
Events
6
Contact.enroll
You, to your agent

Put Maya Chen at Cedar Hollow Rentals on the personal first touch, the first of today’s 12.

curl -X POST "https://api.sb/leaseline.app/contacts/enroll?mode=try" \
  -H "Authorization: Bearer $SB_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"contact":"contact_Mc7yH2kD9s","sequence":"sequence_Ft2mR6hW8c"}'
npx startup-builder do Contact.enroll --try --data '{"contact":"contact_Mc7yH2kD9s","sequence":"sequence_Ft2mR6hW8c"}'
{
  "name": "do",
  "arguments": {
    "mode": "try",
    "code": "return await $.Contact.enroll({ contact: 'contact_Mc7yH2kD9s', sequence: 'sequence_Ft2mR6hW8c' })"
  }
}
import { $ } from 'startup-builder'

const result = await $.try.Contact.enroll({ contact: 'contact_Mc7yH2kD9s', sequence: 'sequence_Ft2mR6hW8c' })
Response
{
  "api": "https://api.sb/leaseline.app",
  "contact": {
    "$id": "https://api.sb/leaseline.app/contacts/contact_Mc7yH2kD9s",
    "$type": "Contact",
    "name": "Maya Chen",
    "email": "maya@cedar-hollow-rentals.example"
  },
  "enrollment": {
    "$type": "Enrollment",
    "sequence": "https://api.sb/leaseline.app/sequences/sequence_Ft2mR6hW8c",
    "status": "active",
    "step": "email-1",
    "nextAt": "2026-10-27T14:12:00Z",
    "branches": [],
    "exitReason": null
  },
  "firstStep": {
    "from": "dana@tryleaseline.app",
    "subject": "64 new units at Cedar Hollow",
    "body": "Maya, saw Cedar Hollow added 64 units this month. Are renewal notices for the new leases still tracked by hand? Leaseline sends each one 60 days out, per owner. Worth a look?"
  },
  "action": {
    "operation": "Contact.enroll",
    "mode": "try",
    "status": "done"
  }
}
Try mode reads, stores nothing and spends nothingAPI referenceIts Nouns

Nouns

NounWhat it is
SequenceA Sequence is a timed series of steps run for one Contact at a time: send a Message, wait, branch, or stop.
EnrollmentAn Enrollment is one person’s run through one Sequence: the current step, when the next fires, the branches taken, and why it ended.
FunnelA Funnel is a designed path to an offer: a landing page, an opt-in that makes a lead, a Sequence, then the offer.

Properties

The hub defines each Noun’s core Properties; Sequences adds the ones a sale needs.

Sequence

PropertyTypeWhat it holdsDefined by
stepsjsonThe steps, waits, and branches.The hub
exitOnstringThe Events that end it from any step, such as a reply or a purchase.The hub
fromMailbox[]The Mailboxes it sends from; a cold Sequence takes only warmed second-domain Mailboxes.Sequences
sendDaysstring[]The days a step may send, such as Monday to Thursday.Sequences
stopOnstring[]What ends every run at once: any reply, a booked Meeting, an unsubscribe.Sequences

Enrollment

PropertyTypeWhat it holdsDefined by
statusstringWhere the run stands.The hub
stepstringThe Sequence step the person is on.The hub
nextAtdatetimeWhen the next step fires; empty while paused or exited.The hub
branchesstring[]The branches taken so far, in order.The hub
exitReasonstringWhy the run ended.The hub
mailboxMailboxThe one Mailbox every step of this run sends from, so the thread holds.Sequences
openedbooleanNever used to time a step: opens are unreliable, so steps wait on days, not opens.Sequences

Funnel

PropertyTypeWhat it holdsDefined by
stepsjsonThe pages, Forms, and Sequences in order.The hub

Lifecycle

Every move names the Verb that makes it, or the Event it waits on.

Enrollment

StateWhat it meansMoves to
active (first)The Contact is on a step, and the next one fires at nextAt.paused by Enrollment.pause; exited by Enrollment.cancel; exited on Message.created; exited on Order.placed; exited on Contact.unsubscribed; exited on Contact.suppressed; exited on Enrollment.finished
pausedNo step fires, and nextAt stays empty until it resumes.active by Enrollment.resume; exited by Enrollment.cancel; exited on Contact.suppressed
exitedEnded, with its exitReason; enrolling the Contact again starts a new Enrollment.None: it ends here.

Verbs

VerbWhat it doesApproval
Contact.enrollStarts one person on a Sequence that sends from your Mailbox and stops the moment they reply.Goes out on its own On each site Gmail, LinkedIn, Outlook Limits Cold first touches send only from a warmed second domain: 2 Mailboxes at 25 a day each after a 14-day ramp, 50 a day in all. Warm intros and replies send from your primary domain.
Enrollment.pauseHolds one person’s run through a Sequence at its current step, without ending it.Runs on its own
Enrollment.resumeRestarts a paused run at the step it stopped on and sets when that step sends.Runs on its own
Enrollment.cancelEnds one person’s run through a Sequence for good, with the reason.Runs on its own
Lead.nurtureTakes a lead that is not ready to buy off its owner’s queue and onto a Sequence, until it raises a hand again.Goes out on its own
Sequence.createSaves a timed series of emails and tasks: the steps, the waits between them and what ends a run.Runs on its own
Sequence.updateChanges a Sequence’s steps or waits; a run under way keeps the step it is on.Runs on its own
Funnel.createSaves your path from landing page to opt-in to Sequence to offer, so each drop between steps is one number.Runs on its own

Events

EventEmitted by
Contact.enrolledContact.enroll
Enrollment.pausedEnrollment.pause
Enrollment.resumedEnrollment.resume
Enrollment.canceledEnrollment.cancel
Lead.nurturedLead.nurture
Sequence.createdSequence.create

A Trigger can start a Workflow on any of them, and a Watch delivers each to your endpoint, signed (Events and webhooks).

Who operates it

PartSequences
AccountableProspector
Also calls its VerbsMarketing lead, Success Manager
SeatAn agent holds each seat until you seat a person in it.
Asks you firstNone of its Verbs: each runs within its seat’s Limits

Integrations

Gmail · Outlook · LinkedIn

Import and export

DirectionWhatHow
ImportA Sequence written elsewhereSequence.create with its steps; each step’s copy is checked for unresolved claims before it sends
ExportEach run and why it endedCollection.export of Enrollments, with exitReason

Example

Three touches that stop on the first reply.

  1. Sequence.create saves three emails: day 0, day 3 and day 8, Monday to Thursday, from the 2 warmed Mailboxes on tryleaseline.app.
  2. Contact.enroll starts 50 verified people; at 25 a day a Mailbox, the first touches go out over one sending day.
  3. Two reply on day 3. Each reply ends that run, exitReason: replied, before the next step sends.
  4. One asks to be left alone. Contact.unsubscribe ends the run and every future send to her.

Contents