Sequences

Enroll leads in a sequence

Enrolls contacts into an email sequence. Contacts are resolved to lead records automatically — you do not create leads directly. Send times are staggered across the sequence's sending window rather than fired at once.

Provide exactly one audience: contactIds, listId, or listIds.

Leads already active in another sequence are skipped, not enrolled. This is deliberate — it stops the same person receiving two campaigns at once. They are reported in skippedActiveElsewhere. Set allowConcurrent: true only if you genuinely want overlapping campaigns.

Contacts without a valid email come back in noEmail; unsubscribed or suppressed contacts in suppressed. Neither is an error.

Very large audiences: enrolling tens of thousands of leads in one call can exceed the proxy timeout. Enroll by listId in batches, or split the audience across calls.

post/v1/enrollments

Request

  • Base URL: https://api.automatedclientacquisition.com
  • URL: https://api.automatedclientacquisition.com/v1/enrollments
  • Auth: HTTP bearer

Request body

sequenceIdstring uuid required

Sequence to enroll into.

contactIdsstring[]

Enroll specific contacts.

listIdstring uuid

Enroll every member of one lead list.

listIdsstring[]

Enroll the union of several lead lists.

delayHoursnumber

Hold the first email for this many hours.

allowConcurrentboolean

Opt out of one-active-sequence-per-lead.

customDataByContactIdobject

Per-contact merge-variable overrides, keyed by crm_contact id (not lead id), written to the enrollment's custom_data.

Use custom_email_N_subject / custom_email_N_body (N is 1-indexed per step) to give each lead its own subject and body, resolving {{email_subject_N}} / {{email_body_N}}. This is how per-lead AI-written sequences are delivered.

Re-enrolling a contact that is already enrolled keeps the existing custom_data rather than overwriting it.

Example request

{
  "delayHours": 24
}

Response

Enrollment processed. Skips are normal, not failures.

enrolledinteger

Leads enrolled.

skippedinteger

Already enrolled in this sequence.

noEmailinteger

No valid email address.

suppressedinteger

Unsubscribed, bounced or suppressed.

skippedActiveElsewhereinteger

Active in another sequence, so left alone.

Example response

{
  "enrolled": 240,
  "skipped": 12,
  "noEmail": 3,
  "suppressed": 1,
  "skippedActiveElsewhere": 8
}

Changes

No recorded changes to this operation across all 1 revision of this API.