Engage

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.

In a chat
Copy a ready promptPaste it in any AI: it reads the docs and follows the rules of the API.
Open in Claude or ChatGPTA new conversation with the prompt already written.
This page as MarkdownFor an AI that cannot open links: paste the text itself.
In your editor
Claude Code or CodexAdd this line to CLAUDE.md or AGENTS.md.Meetzy API reference (read before calling the API): https://www.meetzy.ai/llms-full.txt
CursorSettings › Indexing & Docs › Add Doc, then type @Meetzy in the chat.https://www.meetzy.ai/llms-full.txt
Connect Meetzy as tools (MCP)The AI can then read and change your CRM itself — Claude Code:claude mcp add --transport http meetzy https://meetzy.me/api/mcp/mcp
Same for Codexcodex mcp add meetzy --url https://meetzy.me/api/mcp/mcp
GET/sequences

List sequences

Sequences with their stats: enrolled, active, completed, exited, replied, meetings and reply rate.

Scope: read
Request
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()
Response200
{
  "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
      }
    }
  ]
}
POST/sequences

Create 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).

Scope: write

Body

namestringrequired
Name.
descriptionstring
Description.
stepsobject[]
Steps in order.
settingsobject
Exit rules and sending window.
statusstring
draft, active, paused or archived.
owner_emailstring
Owner. Default: the key’s user.
Request
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()
Response201
{
  "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"
}
GET/sequences/{id}

Get a sequence

The sequence with every enrollment (up to 500, newest first) and the enrolled contact.

Scope: read

Path parameters

idstringrequired
Id of the record (UUID).
Request
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()
Response200
{
  "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
      }
    }
  ]
}
PATCH/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.

Scope: write

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.
Request
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()
Response200
{
  "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"
}
DELETE/sequences/{id}

Delete a sequence

Scope: delete

Path parameters

idstringrequired
Id of the record (UUID).
Request
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()
Response200
{
  "deleted": true
}
POST/sequences/{id}/enroll

Enroll 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.

Scope: write

Path parameters

idstringrequired
Id of the record (UUID).

Body

contact_idsuuid[]required
Contacts to enroll. Also accepted as lead_ids.
Request
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()
Response201
{
  "enrolled": 1,
  "skipped": []
}
POST/sequences/{id}/unenroll

Remove contacts from a sequence

Ends their active or paused enrollment (exit_reason: manual). Returns how many were exited.

Scope: write

Path parameters

idstringrequired
Id of the record (UUID).

Body

contact_idsuuid[]required
Contacts to remove.
Request
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()
Response201
{
  "exited": 1
}
PATCH/enrollments/{id}

Pause, resume or end one enrollment

Scope: write

Path parameters

idstringrequired
Id of the record (UUID).

Body

statusstringrequired
active, paused or exited.
Request
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()
Response200
{
  "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"
}