Sequences
Multichannel cadences — emails, LinkedIn steps, calls and tasks on a schedule — and the people enrolled in them.
A sequence is a list of steps run for each enrolled contact, on business days within a send window. Automated steps (emails, LinkedIn) run on their own; manual steps (calls, tasks, manual emails) create a task for the owner. A contact leaves the sequence when they reply, book a meeting or reach an exit stage — or when you unenroll them.
/sequencesList sequencesPOST/sequencesCreate a sequenceGET/sequences/{id}Get a sequencePATCH/sequences/{id}Update a sequenceDELETE/sequences/{id}Delete a sequencePOST/sequences/{id}/enrollEnroll contactsPOST/sequences/{id}/unenrollRemove contacts from a sequencePATCH/enrollments/{id}Pause, resume or end one enrollment/sequencesList sequences
Sequences with their stats: enrolled, active, completed, exited, replied, meetings and reply rate.
curl "https://meetzy.me/api/v1/sequences" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/sequences", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/sequences",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"sequences": [
{
"id": "8ff666e1-a95c-4b4a-ad4b-250fa13794be",
"user_from": "acme",
"name": "Outbound — Heads of Sales",
"description": null,
"status": "draft",
"steps": [
{
"id": "step_1_3gbp5",
"body": "",
"note": "",
"type": "task",
"title": "Intro call",
"subject": "",
"priority": "medium",
"delay_days": 0,
"delay_hours": 0
},
{
"id": "step_2_wzkst",
"body": "Hello",
"note": "",
"type": "email",
"title": "",
"subject": "Hi {{contact.first_name}}",
"priority": "medium",
"delay_days": 2,
"delay_hours": 0
}
],
"settings": {
"timezone": "Europe/Paris",
"send_window": {
"end": 18,
"start": 8
},
"exit_on_reply": true,
"exit_on_stages": [
"won",
"lost",
"customer"
],
"exit_on_meeting": true,
"business_days_only": true
},
"owner_email": "olivia@acme.com",
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:23:06.369597+00:00",
"updated_at": "2026-10-07T13:23:06.369597+00:00",
"stats": {
"total": 0,
"active": 0,
"completed": 0,
"replied": 0,
"exited": 0,
"meetings": 0,
"reply_rate": 0
}
}
]
}/sequencesCreate a sequence
Created as draft unless you send a status. Each step: type (email, manual_email, linkedin_invite, linkedin_message, call, task), delay_days (after the previous step; default 0 for the first, 2 for the others), delay_hours, and for emails subject and body (merge tags allowed), for messages body, for tasks title, note and priority. Settings (merged with the defaults): exit_on_reply (true), exit_on_meeting (true), exit_on_stages (CRM stages that end the sequence, default ["won","lost","customer"]), business_days_only (true), send_window ({ start: 8, end: 18 }, hours), timezone (Europe/Paris).
Body
namestringrequired- Name.
descriptionstring- Description.
stepsobject[]- Steps in order.
settingsobject- Exit rules and sending window.
statusstringdraft,active,pausedorarchived.owner_emailstring- Owner. Default: the key’s user.
curl -X POST "https://meetzy.me/api/v1/sequences" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Outbound — Heads of Sales", "status": "active", "steps": [ { "type": "email", "subject": "Quick question, {{contact.first_name}}", "body": "Hi {{contact.first_name}},\n\n…" }, { "type": "linkedin_invite", "delay_days": 2 }, { "type": "email", "delay_days": 3, "subject": "Re: Quick question", "body": "Bumping this up…" }, { "type": "call", "delay_days": 2, "title": "Call {{contact.name}}" } ], "settings": { "send_window": { "start": 9, "end": 17 } } }'
const res = await fetch("https://meetzy.me/api/v1/sequences", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "name": "Outbound — Heads of Sales", "status": "active", "steps": [ { "type": "email", "subject": "Quick question, {{contact.first_name}}", "body": "Hi {{contact.first_name}},\n\n…" }, { "type": "linkedin_invite", "delay_days": 2 }, { "type": "email", "delay_days": 3, "subject": "Re: Quick question", "body": "Bumping this up…" }, { "type": "call", "delay_days": 2, "title": "Call {{contact.name}}" } ], "settings": { "send_window": { "start": 9, "end": 17 } } }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/sequences",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"name": "Outbound — Heads of Sales",
"status": "active",
"steps": [
{
"type": "email",
"subject": "Quick question, {{contact.first_name}}",
"body": "Hi {{contact.first_name}},\n\n…"
},
{
"type": "linkedin_invite",
"delay_days": 2
},
{
"type": "email",
"delay_days": 3,
"subject": "Re: Quick question",
"body": "Bumping this up…"
},
{
"type": "call",
"delay_days": 2,
"title": "Call {{contact.name}}"
}
],
"settings": {
"send_window": {
"start": 9,
"end": 17
}
}
},
)
data = res.json(){
"id": "8ff666e1-a95c-4b4a-ad4b-250fa13794be",
"user_from": "acme",
"name": "Outbound — Heads of Sales",
"description": null,
"status": "draft",
"steps": [
{
"id": "step_1_3gbp5",
"body": "",
"note": "",
"type": "task",
"title": "Intro call",
"subject": "",
"priority": "medium",
"delay_days": 0,
"delay_hours": 0
},
{
"id": "step_2_wzkst",
"body": "Hello",
"note": "",
"type": "email",
"title": "",
"subject": "Hi {{contact.first_name}}",
"priority": "medium",
"delay_days": 2,
"delay_hours": 0
}
],
"settings": {
"timezone": "Europe/Paris",
"send_window": {
"end": 18,
"start": 8
},
"exit_on_reply": true,
"exit_on_stages": [
"won",
"lost",
"customer"
],
"exit_on_meeting": true,
"business_days_only": true
},
"owner_email": "olivia@acme.com",
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:23:06.369597+00:00",
"updated_at": "2026-10-07T13:23:06.369597+00:00"
}/sequences/{id}Get a sequence
The sequence with every enrollment (up to 500, newest first) and the enrolled contact.
Path parameters
idstringrequired- Id of the record (UUID).
curl "https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"sequence": {
"id": "8ff666e1-a95c-4b4a-ad4b-250fa13794be",
"user_from": "acme",
"name": "Outbound — Heads of Sales",
"description": null,
"status": "active",
"steps": [
{
"id": "step_1_3gbp5",
"body": "",
"note": "",
"type": "task",
"title": "Intro call",
"subject": "",
"priority": "medium",
"delay_days": 0,
"delay_hours": 0
},
{
"id": "step_2_wzkst",
"body": "Hello",
"note": "",
"type": "email",
"title": "",
"subject": "Hi {{contact.first_name}}",
"priority": "medium",
"delay_days": 2,
"delay_hours": 0
}
],
"settings": {
"timezone": "Europe/Paris",
"send_window": {
"end": 18,
"start": 8
},
"exit_on_reply": true,
"exit_on_stages": [
"won",
"lost",
"customer"
],
"exit_on_meeting": true,
"business_days_only": true
},
"owner_email": "olivia@acme.com",
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:23:06.369597+00:00",
"updated_at": "2026-10-07T13:23:07.931478+00:00"
},
"enrollments": [
{
"id": "7be8416d-3e67-4ec7-a1ed-c590f7d02299",
"user_from": "acme",
"sequence_id": "8ff666e1-a95c-4b4a-ad4b-250fa13794be",
"lead_id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"status": "active",
"current_step": 0,
"next_run_at": "2026-10-07T13:23:08.834+00:00",
"last_step_at": null,
"exit_reason": null,
"enrolled_by": "olivia@acme.com",
"history": [
{
"at": "2026-10-07T13:23:08.835Z",
"by": "olivia@acme.com",
"type": "enrolled",
"replies_baseline": 0
}
],
"created_at": "2026-10-07T13:23:08.863888+00:00",
"updated_at": "2026-10-07T13:23:08.863888+00:00",
"contact": {
"id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"display_name": "Camille Laurent",
"primary_email": "camille@payfit.com",
"company": "Payfit",
"title": "Head of Sales",
"avatar_url": null,
"lead_score": 40
}
}
]
}/sequences/{id}Update a sequence
Pausing the sequence pauses its active enrollments; activating it resumes them. Each step: type (email, manual_email, linkedin_invite, linkedin_message, call, task), delay_days (after the previous step; default 0 for the first, 2 for the others), delay_hours, and for emails subject and body (merge tags allowed), for messages body, for tasks title, note and priority.
Path parameters
idstringrequired- Id of the record (UUID).
Body
namestring- Name.
descriptionstring- Description.
stepsobject[]- Steps (replace the current ones).
settingsobject- Settings to change.
statusstring- Status.
owner_emailstring- Owner.
curl -X PATCH "https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "status": "paused" }'
const res = await fetch("https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc", { method: "PATCH", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "status": "paused" }), }); const data = await res.json();
import os, requests
res = requests.patch(
"https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"status": "paused"
},
)
data = res.json(){
"id": "8ff666e1-a95c-4b4a-ad4b-250fa13794be",
"user_from": "acme",
"name": "Outbound — Heads of Sales",
"description": null,
"status": "active",
"steps": [
{
"id": "step_1_3gbp5",
"body": "",
"note": "",
"type": "task",
"title": "Intro call",
"subject": "",
"priority": "medium",
"delay_days": 0,
"delay_hours": 0
},
{
"id": "step_2_wzkst",
"body": "Hello",
"note": "",
"type": "email",
"title": "",
"subject": "Hi {{contact.first_name}}",
"priority": "medium",
"delay_days": 2,
"delay_hours": 0
}
],
"settings": {
"timezone": "Europe/Paris",
"send_window": {
"end": 18,
"start": 8
},
"exit_on_reply": true,
"exit_on_stages": [
"won",
"lost",
"customer"
],
"exit_on_meeting": true,
"business_days_only": true
},
"owner_email": "olivia@acme.com",
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:23:06.369597+00:00",
"updated_at": "2026-10-07T13:23:07.931478+00:00"
}/sequences/{id}Delete a sequence
Path parameters
idstringrequired- Id of the record (UUID).
curl -X DELETE "https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc", { method: "DELETE", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` }, }); const data = await res.json();
import os, requests
res = requests.delete(
"https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"deleted": true
}/sequences/{id}/enrollEnroll contacts
Starts the sequence for each contact (the first step is planned in the next send window). Contacts already in it or marked do-not-contact are returned in skipped with the reason. A paused sequence enrolls them as paused.
Path parameters
idstringrequired- Id of the record (UUID).
Body
contact_idsuuid[]required- Contacts to enroll. Also accepted as
lead_ids.
curl -X POST "https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc/enroll" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "contact_ids": [ "e43414d6-f56f-42be-a64c-a836d6015efc" ] }'
const res = await fetch("https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc/enroll", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "contact_ids": [ "e43414d6-f56f-42be-a64c-a836d6015efc" ] }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc/enroll",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"contact_ids": ["e43414d6-f56f-42be-a64c-a836d6015efc"]
},
)
data = res.json(){
"enrolled": 1,
"skipped": []
}/sequences/{id}/unenrollRemove contacts from a sequence
Ends their active or paused enrollment (exit_reason: manual). Returns how many were exited.
Path parameters
idstringrequired- Id of the record (UUID).
Body
contact_idsuuid[]required- Contacts to remove.
curl -X POST "https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc/unenroll" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "contact_ids": [ "e43414d6-f56f-42be-a64c-a836d6015efc" ] }'
const res = await fetch("https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc/unenroll", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "contact_ids": [ "e43414d6-f56f-42be-a64c-a836d6015efc" ] }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/sequences/e43414d6-f56f-42be-a64c-a836d6015efc/unenroll",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"contact_ids": ["e43414d6-f56f-42be-a64c-a836d6015efc"]
},
)
data = res.json(){
"exited": 1
}/enrollments/{id}Pause, resume or end one enrollment
Path parameters
idstringrequired- Id of the record (UUID).
Body
statusstringrequiredactive,pausedorexited.
curl -X PATCH "https://meetzy.me/api/v1/enrollments/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "status": "paused" }'
const res = await fetch("https://meetzy.me/api/v1/enrollments/e43414d6-f56f-42be-a64c-a836d6015efc", { method: "PATCH", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "status": "paused" }), }); const data = await res.json();
import os, requests
res = requests.patch(
"https://meetzy.me/api/v1/enrollments/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"status": "paused"
},
)
data = res.json(){
"id": "7be8416d-3e67-4ec7-a1ed-c590f7d02299",
"user_from": "acme",
"sequence_id": "8ff666e1-a95c-4b4a-ad4b-250fa13794be",
"lead_id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"status": "paused",
"current_step": 1,
"next_run_at": "2026-10-09T13:23:10.054+00:00",
"last_step_at": "2026-10-07T13:23:10.054+00:00",
"exit_reason": null,
"enrolled_by": "olivia@acme.com",
"history": [
{
"at": "2026-10-07T13:23:08.835Z",
"by": "olivia@acme.com",
"type": "enrolled",
"replies_baseline": 0
},
{
"at": "2026-10-07T13:23:10.054Z",
"ok": true,
"step": 1,
"type": "task",
"detail": "task created"
}
],
"created_at": "2026-10-07T13:23:08.863888+00:00",
"updated_at": "2026-10-07T13:23:10.498153+00:00"
}