Add a person to a sequence
Starts the sequence for one person, by to (added as a contact when new) or contact_id.
/v1/sequences/{id}/enrollments
Starts the sequence for one person, by to (added as a contact when new) or contact_id. A person can be in a sequence once at a time: adding somebody already in it answers conflict, and so does adding somebody on your stop list or a sequence that is archived.
Needs a key with the messages:send scope.
Send an Idempotency-Key so a retry never acts twice.
Path parameters
idstringrequiredThe sequence’s id.
Starts with
seq_.
Headers
Idempotency-KeystringAny string of up to 255 characters, new for each request. A retry with the same key gets the first answer back for 24 hours, with
Idempotent-Replayed: true.Up to 255 characters.
Request body
tostringThe person to add. Send
toorcontact_id.3 to 320 characters.
contact_idstringA ct_ id.
Starts with
ct_.first_namestringSaved on the contact when it has no first name yet.
Up to 100 characters.
last_namestringUp to 100 characters.
variablesmap of stringValues for the steps’
{{variables}}.
Example
/v1/sequences/seq_1Hq2LxW9cVbN3mKpRtYs0a/enrollmentscurl -X POST "https://usebluebot.com/api/v1/sequences/seq_1Hq2LxW9cVbN3mKpRtYs0a/enrollments" \
-H "Authorization: Bearer $BLUEBOT_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 0f6d8c2e-5b1a-4c7e-9d3f-2a8b6e1c4d70" \
-d '{
"to": "+15555550123",
"first_name": "Maria",
"variables": {
"listing": "412 Oak St"
}
}'Response
201: Their run.
idstringrequiredA enr_ id.
Starts with
enr_.object"enrollment"requiredsequence_idstringrequiredA seq_ id.
Starts with
seq_.contact_idstringrequiredA ct_ id.
Starts with
ct_.handlestringrequiredA phone number in E.164 (
+15555550123) or an email address an Apple ID uses (iMessage only).statestringrequiredOne of
active,completed,stopped,canceled.current_stepintegerrequiredThe position of the next step.
next_run_attimestamp or nullrequiredWhen the next step happens, while active.
stop_reasonstring or nullrequiredWhy it ended early, when it did.
One of
replied,stopped,canceled,sequence_archived,failed.enrolled_viastringrequiredOne of
dashboard,api,zapier,make,n8n,pipedream,cli,hook,keyword,mcp,assistant,widget.variablesmap of stringrequiredValues for the steps’
{{variables}}.enrolled_attimestamprequiredWhen the person was added.
completed_attimestamp or nullrequiredWhen it ended, by finishing or stopping.
timelinearray of objectWhat happened, oldest first. Only on
GET /v1/enrollments/{id}.Show its 6 fieldsHide its fields
typestringrequiredOne of
enrolled,text_queued,text_skipped,waiting,window,stopped,completed,canceled.positioninteger or nullrequiredThe step it is about.
message_idstring or nullrequiredA msg_ id.
Starts with
msg_.untiltimestamp or nullrequiredFor a wait, when it ends.
detailstring or nullrequiredWhat happened, in words.
attimestamprequiredWhen.
{
"id": "enr_1Hq2LxW9cVbN3mKpRtYs0a",
"object": "enrollment",
"sequence_id": "seq_1Hq2LxW9cVbN3mKpRtYs0a",
"contact_id": "ct_1Hq2LxW9cVbN3mKpRtYs0a",
"handle": "+15555550123",
"state": "active",
"current_step": 0,
"next_run_at": "2026-11-13T19:41:00.000Z",
"stop_reason": null,
"enrolled_via": "api",
"variables": {
"listing": "412 Oak St"
},
"enrolled_at": "2026-11-13T19:41:00.000Z",
"completed_at": null
}Errors
Every refusal has the same envelope and a page of its own. These are the ones this operation can give.
| Code | Status | What it means |
|---|---|---|
| 401 | The request carried no key, or a key BlueBot doesn’t know: mistyped, revoked, or a test key sent to the live API. | |
| 403 | The key doesn’t carry the scope the endpoint needs. Each endpoint’s reference names its scope. | |
| 429 | Too many requests. A key may make 120 requests a minute. The RateLimit header says how many are left, and Retry-After how long to wait. | |
| 500 | Something went wrong on BlueBot’s side. It was reported. Send the request again; with an Idempotency-Key that is always safe. | |
| 400 | Something in the request doesn’t fit: a missing or malformed field, a bad id, or a combination the endpoint refuses. details names each field. | |
| 404 | There is no such thing on this account. Ids are prefixed by kind, so a message id starts with msg_. | |
| 409 | The request doesn’t fit the thing’s current state, or another request with the same Idempotency-Key is still running. | |
| 402 | The account’s plan isn’t active, so BlueBot isn’t taking new texts. Texts already queued wait and go once the plan is active again. | |
| 409 | The Idempotency-Key was used in the last 24 hours with a different request. A key stands for one request. |
Try it
Call this operation from the page with your own key. The key stays in this tab and is forgotten when you leave.