Skip to main content
Plan availability: Standard or higher (requires both Sequences and API Access). See Plans & Billing.
The Sequences API lets you trigger a fully personalized outbound campaign for a single contact from your own backend. In one call, Clarky will:
  1. Upsert the contact in your workspace (matched by primary email, falling back to phone).
  2. Append the notes you send (Speaks Spanish. Located in Madrid.) to the contact’s record so they survive across calls.
  3. Generate a bespoke sequence from a saved template using a two-stage LLM pipeline — emails are written for the specific recipient, in their language, referencing real context. SMS / voice scripts are generated the same way.
  4. Optionally launch immediately — with auto_approve: true, the first step (call or email) fires within seconds of generation completing, no human review required.
Templates encode which channels are allowed (email, voice, sms), so the API itself does not expose a channel selector — pick a template that uses the channels you want.
Generation takes time. The endpoint responds with 202 Accepted after a few hundred milliseconds, but the LLM pipeline runs in the background and takes ~30–90s before the first outbound action goes out. Poll the status endpoint to know when it has shipped.

Start a sequence

POST
POST /api/v1/sequences/start

Request body

string
required
ID of a sequence template in your workspace. The template defines the goal prompt, allowed channels, pacing, and (optionally) the bot identity.
string
Required only if the template has no bot_id. The bot whose email/phone identity will be used as the sender.
object
required
The contact to upsert.At least one of emails or phone_numbers is required.
boolean
default:"false"
When true, skips the human review gate. After generation, step 1’s scheduled_for is forced to now and the dispatcher fires immediately — the contact’s phone rings (or inbox dings) within seconds. Use this for trusted automation.When false (the default), the sequence is generated and parked in pending_approval. Workspace admins receive an email with a review link.
string
A stable identifier (e.g. your internal lead ID). Calling the endpoint a second time with the same key returns the original sequence_id and enrollment_id — no duplicate sequence is created.
string
Display name for the sequence. Defaults to the template’s name.

Response — 202 Accepted

Example — call back a Spanish-speaking lead immediately

Errors


Get enrollment status

GET
GET /api/v1/sequences/enrollments/{enrollment_id}
Use this to poll for generation progress, see the generated steps, and check delivery state.

Status values

Example response


Notes & limits

  • Latency floor: ~30–90s from API call to first outbound action. Two LLM calls run in the background; this can’t be made faster while still producing language-matched, personalized content.
  • Channels are template-driven. If the template’s allowed_channels is ["email", "voice"], no SMS will be sent regardless of what the contact has on file.
  • Concurrent enrollments are allowed — calling the endpoint while the contact is in another active sequence will not be rejected.
  • Suppressed contacts (unsubscribed email, opted-out phone) cause the enrollment to fail with no_usable_channels. Polling the status endpoint will reflect this.