/v1/sequences
A sequence is texts with waits between them. Each person added runs through it on their own, and stops when they text back (unless stop_on_reply is off) or text STOP. With send_window, a text due outside it waits for the window to open.
Needs a key with the messages:send scope.
Send an Idempotency-Key so a retry never acts twice.
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
namestringrequiredUp to 120 characters.
descriptionstringUp to 500 characters.
stop_on_replybooleanDefault
true.send_windowobject or nullWhen steps may send, in your time zone. A step due outside it waits for it to open.
Show its 3 fieldsHide its fields
daysarray of stringsrequiredThe days it may send on.
One of
mon,tue,wed,thu,fri,sat,sun.startstringrequiredA time of day as HH:MM in your account’s time zone.
endstringrequiredA time of day as HH:MM in your account’s time zone.
stepsarray of anyrequiredThe steps in order.
Up to 50 items.
Example
/v1/sequencescurl -X POST "https://usebluebot.com/api/v1/sequences" \
-H "Authorization: Bearer $BLUEBOT_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: 0f6d8c2e-5b1a-4c7e-9d3f-2a8b6e1c4d70" \
-d '{
"name": "New lead follow-up",
"steps": [
{
"kind": "text",
"text": "Hi {{first_name|there}}, thanks for asking about {{listing}}. Want to see it?"
},
{
"kind": "wait",
"wait_seconds": 172800
},
{
"kind": "text",
"text": "Just checking in. Still interested in {{listing}}?"
}
],
"send_window": {
"days": [
"mon",
"tue",
"wed",
"thu",
"fri"
],
"start": "09:00",
"end": "18:00"
}
}'Response
201: The sequence.
idstringrequiredA seq_ id.
Starts with
seq_.object"sequence"requirednamestringrequireddescriptionstring or nullrequiredstatestringrequiredactivetakes new people and sends;pausedholds every enrollment where it is;archivedends them.One of
active,paused,archived.stop_on_replybooleanrequiredStop a person’s run when they text back. On unless you turn it off. A stop word always stops it.
send_windowobject or nullrequiredWhen steps may send, in your time zone. A step due outside it waits for it to open.
Show its 3 fieldsHide its fields
daysarray of stringsrequiredThe days it may send on.
One of
mon,tue,wed,thu,fri,sat,sun.startstringrequiredA time of day as HH:MM in your account’s time zone.
endstringrequiredA time of day as HH:MM in your account’s time zone.
stepsarray of SequenceSteprequiredShow its 7 fieldsHide its fields
idstringrequiredA step_ id.
Starts with
step_.positionintegerrequiredIts place in the sequence, from 0.
kindstringrequiredOne of
text,wait.wait_secondsinteger or nullrequiredFor a wait: how long, from a minute to a year.
textstring or nullrequiredFor a text: the words, with
{{variables}}.template_idstring or nullrequiredFor a text: the template it uses instead of
text.servicestringrequiredOne of
auto,imessage,sms.
countsmap of integerrequiredEnrollments by state:
active,completed,stopped,canceled.created_viastringrequiredOne of
dashboard,api,assistant,mcp,zapier,cli.created_attimestamprequiredWhen it was made.
{
"id": "seq_1Hq2LxW9cVbN3mKpRtYs0a",
"object": "sequence",
"name": "New lead follow-up",
"description": "For people who ask about a listing.",
"state": "active",
"stop_on_reply": true,
"send_window": {
"days": [
"mon",
"tue",
"wed",
"thu",
"fri"
],
"start": "09:00",
"end": "18:00"
},
"steps": [
{
"id": "step_1Hq2LxW9cVbN3mKpRtYs0a",
"position": 0,
"kind": "text",
"wait_seconds": null,
"text": "Hi {{first_name|there}}, thanks for asking about {{listing}}. Want to see it?",
"template_id": null,
"service": "auto"
},
{
"id": "step_2Bf8QzD4kJmA6nXwEuTr1c",
"position": 1,
"kind": "wait",
"wait_seconds": 172800,
"text": null,
"template_id": null,
"service": "auto"
},
{
"id": "step_3Lp3VsC7hGqE5tZyKbWn2d",
"position": 2,
"kind": "text",
"wait_seconds": null,
"text": "Just checking in. Still interested in {{listing}}?",
"template_id": null,
"service": "auto"
}
],
"counts": {},
"created_via": "dashboard",
"created_at": "2026-11-01T15:00:00.000Z"
}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 account has as many of something as it may have. | |
| 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.