Workflows
Event-driven automations with conditions, branches, waits, goals and 25+ actions — build, activate, preview, run on demand, or trigger from any tool.
A workflow starts when its trigger happens to a record (or on a schedule), checks its conditions, then runs its actions one by one — waiting, branching, creating tasks and deals, sending emails and messages, calling webhooks. Activation validates every step (a send_email needs a template or content, a Slack step a webhook URL…) and answers 400 with what to fix.
/automations/catalogWhat a workflow can use herePOST/automations/checkCheck a workflow before savingGET/automations/templatesWorkflow templatesPOST/automations/from-templateCreate a workflow from a templateGET/automationsList workflowsPOST/automationsCreate a workflowGET/automations/{id}Get a workflow and its runsPATCH/automations/{id}Update, activate or pauseDELETE/automations/{id}Delete a workflowPOST/automations/{id}/duplicateDuplicate a workflowPOST/automations/{id}/runRun a workflow on records nowPOST/automations/{id}/previewWho matches a workflow nowPOST/automations/previewWho matches some conditionsPOST/inbound/{token}Trigger a workflow from any tool/automations/catalogWhat a workflow can use here
Everything needed to build a workflow in this workspace without guessing: triggers (with their config options and the record they start on), steps (with their fields, options and branches), condition fields and operators, merge tags, and the workspace’s own sales_cycles (stages, and the playbook written for each), pipelines, sequences, email_templates, email_campaigns, team and existing workflows — plus templates, the building rules and what is not possible (limits). Made for API clients and AI assistants.
curl "https://meetzy.me/api/v1/automations/catalog" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/automations/catalog", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/automations/catalog",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"triggers": [
{
"type": "contact.email_sent",
"label": "You emailed the contact (any mailbox: Outlook, Gmail…)",
"group": "Contacts",
"record": "contact",
"config": []
}
],
"steps": [
{
"type": "move_cycle_stage",
"label": "Move to a stage of their sales cycle",
"group": "Contact",
"fields": [
{
"key": "stage",
"label": "Stage",
"type": "cycle_stage"
},
{
"key": "forward_only",
"label": "Only move forward",
"type": "select",
"options": [
"yes",
"no"
],
"default": "yes"
}
]
}
],
"conditions": {
"operators": [
"eq",
"neq",
"contains",
"not_contains",
"gt",
"gte",
"lt",
"lte",
"is_set",
"is_not_set",
"in"
]
},
"workspace": {
"sales_cycles": [
{
"id": "default",
"name": "Prospects",
"is_default": true,
"stages": [
{
"id": "new_leads",
"name": "New leads"
},
{
"id": "contacted",
"name": "Contacted",
"playbook": "First reach-out on WhatsApp — best reply rate."
}
]
}
]
},
"rules": [
"Shape: { name, description, trigger: { type, config }, conditions, actions, settings, status }."
],
"limits": [
"No custom code and no loops — chain workflows with \"enroll_workflow\" instead."
]
}/automations/checkCheck a workflow before saving
Send a workflow body: get errors (it would be refused) and warnings (it would be saved, but probably not as meant — an unknown field, a repeating trigger without allow_reenroll…). Nothing is saved. Creating and updating return the same errors (400) and warnings.
Body
namestring- Name.
triggerobject- Trigger.
conditionsobject- Conditions.
actionsobject[]- Steps.
settingsobject- Settings.
statusstringactivechecks it as if turning it on.
curl -X POST "https://meetzy.me/api/v1/automations/check" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Email → Contacted", "trigger": { "type": "contact.email_sent" }, "actions": [ { "type": "move_cycle_stage", "config": { "stage": "Contacted" } } ] }'
const res = await fetch("https://meetzy.me/api/v1/automations/check", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "name": "Email → Contacted", "trigger": { "type": "contact.email_sent" }, "actions": [ { "type": "move_cycle_stage", "config": { "stage": "Contacted" } } ] }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/automations/check",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"name": "Email → Contacted",
"trigger": {
"type": "contact.email_sent"
},
"actions": [
{
"type": "move_cycle_stage",
"config": {
"stage": "Contacted"
}
}
]
},
)
data = res.json(){
"errors": [],
"warnings": [
"This trigger happens many times for the same record: set settings.allow_reenroll = true, or a record runs it only once."
]
}/automations/templatesWorkflow templates
Ready-made recipes available in this workspace: key, category, name, description, trigger, steps and what you choose after creating it (needs).
curl "https://meetzy.me/api/v1/automations/templates" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/automations/templates", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/automations/templates",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"templates": [
{
"key": "email_moves_stage",
"category": "Sales cycle on autopilot",
"name": "First email sent → next stage of their sales cycle",
"trigger": "contact.email_sent",
"steps": [
"move_cycle_stage"
],
"needs": [
"the stage to move to"
]
}
]
}/automations/from-templateCreate a workflow from a template
A template as a new draft. overrides replaces its trigger, conditions, steps or settings (e.g. to set the stage it needs).
Body
keystringrequired- Template key.
namestring- Name (default: the template’s).
overridesobject{ trigger, conditions, actions, settings }.
curl -X POST "https://meetzy.me/api/v1/automations/from-template" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "key": "email_moves_stage", "name": "Email → Contacted", "overrides": { "actions": [ { "type": "move_cycle_stage", "config": { "stage": "Contacted" } } ] } }'
const res = await fetch("https://meetzy.me/api/v1/automations/from-template", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "key": "email_moves_stage", "name": "Email → Contacted", "overrides": { "actions": [ { "type": "move_cycle_stage", "config": { "stage": "Contacted" } } ] } }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/automations/from-template",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"key": "email_moves_stage",
"name": "Email → Contacted",
"overrides": {
"actions": [
{
"type": "move_cycle_stage",
"config": {
"stage": "Contacted"
}
}
]
}
},
)
data = res.json()Empty answer.
/automationsList workflows
Every workflow with its trigger, conditions, actions, settings, status (draft, active, paused) and counters.
curl "https://meetzy.me/api/v1/automations" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/automations", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/automations",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"automations": [
{
"id": "3aba8ed9-a884-4f32-a536-43ec8685e640",
"user_from": "acme",
"name": "Tag inbound leads",
"description": null,
"status": "draft",
"trigger": {
"type": "contact.created"
},
"conditions": {
"match": "all",
"rules": []
},
"actions": [
{
"id": "a0_0_bdf1du",
"type": "add_tag",
"config": {
"tag": "from-api"
}
}
],
"settings": {},
"stats": {
"runs": 0,
"failed": 0,
"completed": 0
},
"template_key": null,
"inbound_token": "8a71b47c499f34f0a3ffb94154523014",
"next_run_at": null,
"last_run_at": null,
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:23:21.971442+00:00",
"updated_at": "2026-10-07T13:23:21.971442+00:00"
},
{
"id": "8729063c-509a-40e2-aa01-f89e98801698",
"user_from": "acme",
"name": "Tag inbound leads (copy)",
"description": null,
"status": "draft",
"trigger": {
"type": "contact.created"
},
"conditions": {
"match": "all",
"rules": []
},
"actions": [
{
"id": "a0_0_649rr7",
"type": "add_tag",
"config": {
"tag": "from-api"
}
}
],
"settings": {
"rr_pointer": 0
},
"stats": {
"runs": 0,
"failed": 0,
"completed": 0
},
"template_key": null,
"inbound_token": "bc497da644d1b9b1234887e06bcc180c",
"next_run_at": null,
"last_run_at": null,
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:20:30.622812+00:00",
"updated_at": "2026-10-07T13:20:30.622812+00:00"
}
]
}/automationsCreate a workflow
Trigger — { "type": "<event>", "config": { … } }. Any event type (contact.created, deal.stage_changed, contact.replied, webhook.received…) with its optional config (e.g. deal.stage_changed: pipeline_id, to; contact.score_changed: above — see trigger config), or a schedule: { "type": "schedule", "config": { "frequency": "daily" | "weekdays" | "weekly", "time": "09:00", "weekday": 1, "timezone": "Europe/Paris" } }. Conditions — who may enter: { "match": "all" | "any", "rules": [{ "field": "lead_score", "op": "gte", "value": 50 }] }. Fields of the contact, deal, company or task, plus related fields (company.industry, deal.amount…) — see condition fields and operators. Actions — the steps, in order: [{ "type": "create_task", "config": { "title": "Call {{contact.name}}", "type": "call", "due_in_days": 1 } }]. Branching steps carry their own lists: if_else → branches: { yes: [...], no: [...] } with config.rules, ab_split → branches: { a: [...], b: [...] }. Every action and its config fields are in the action reference; merge tags work in every text. Settings — goal ({ match, rules }: a run ends as soon as the record matches it), exit_on_events (event types that end the run, e.g. ["contact.meeting_booked"]), allow_reenroll (default false: once per record), max_runs_per_day, continue_on_error, and for inbound triggers create_contact (default true).
Body
namestringrequired- Name.
triggerobjectrequired- What starts it (
typerequired). conditionsobject- Who may enter. Default: everyone.
actionsobject[]- Steps.
settingsobject- Goal, exits, limits.
statusstringdraft(default),activeorpaused.descriptionstring- Description.
curl -X POST "https://meetzy.me/api/v1/automations" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "name": "Smart follow-up", "status": "active", "trigger": { "type": "email.sent" }, "conditions": { "match": "all", "rules": [ { "field": "lifecycle_stage", "op": "in", "value": "lead,mql" } ] }, "actions": [ { "type": "wait_for_event", "config": { "event_type": "contact.replied", "timeout_days": 3 } }, { "type": "if_else", "config": { "match": "all", "rules": [ { "field": "wait.result", "op": "eq", "value": "received" } ] }, "branches": { "yes": [ { "type": "update_contact", "config": { "field": "lifecycle_stage", "value": "sql" } }, { "type": "create_task", "config": { "title": "Call {{contact.name}} — replied", "type": "call", "due_in_days": 0, "priority": "high" } } ], "no": [ { "type": "send_linkedin_invite", "config": {} } ] } } ], "settings": { "exit_on_events": [ "contact.meeting_booked" ] } }'
const res = await fetch("https://meetzy.me/api/v1/automations", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "name": "Smart follow-up", "status": "active", "trigger": { "type": "email.sent" }, "conditions": { "match": "all", "rules": [ { "field": "lifecycle_stage", "op": "in", "value": "lead,mql" } ] }, "actions": [ { "type": "wait_for_event", "config": { "event_type": "contact.replied", "timeout_days": 3 } }, { "type": "if_else", "config": { "match": "all", "rules": [ { "field": "wait.result", "op": "eq", "value": "received" } ] }, "branches": { "yes": [ { "type": "update_contact", "config": { "field": "lifecycle_stage", "value": "sql" } }, { "type": "create_task", "config": { "title": "Call {{contact.name}} — replied", "type": "call", "due_in_days": 0, "priority": "high" } } ], "no": [ { "type": "send_linkedin_invite", "config": {} } ] } } ], "settings": { "exit_on_events": [ "contact.meeting_booked" ] } }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/automations",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"name": "Smart follow-up",
"status": "active",
"trigger": {
"type": "email.sent"
},
"conditions": {
"match": "all",
"rules": [
{
"field": "lifecycle_stage",
"op": "in",
"value": "lead,mql"
}
]
},
"actions": [
{
"type": "wait_for_event",
"config": {
"event_type": "contact.replied",
"timeout_days": 3
}
},
{
"type": "if_else",
"config": {
"match": "all",
"rules": [
{
"field": "wait.result",
"op": "eq",
"value": "received"
}
]
},
"branches": {
"yes": [
{
"type": "update_contact",
"config": {
"field": "lifecycle_stage",
"value": "sql"
}
},
{
"type": "create_task",
"config": {
"title": "Call {{contact.name}} — replied",
"type": "call",
"due_in_days": 0,
"priority": "high"
}
}
],
"no": [
{
"type": "send_linkedin_invite",
"config": {}
}
]
}
}
],
"settings": {
"exit_on_events": ["contact.meeting_booked"]
}
},
)
data = res.json(){
"id": "3aba8ed9-a884-4f32-a536-43ec8685e640",
"user_from": "acme",
"name": "Tag inbound leads",
"description": null,
"status": "draft",
"trigger": {
"type": "contact.created"
},
"conditions": {
"match": "all",
"rules": []
},
"actions": [
{
"id": "a0_0_bdf1du",
"type": "add_tag",
"config": {
"tag": "from-api"
}
}
],
"settings": {},
"stats": {
"runs": 0,
"failed": 0,
"completed": 0
},
"template_key": null,
"inbound_token": "8a71b47c499f34f0a3ffb94154523014",
"next_run_at": null,
"last_run_at": null,
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:23:21.971442+00:00",
"updated_at": "2026-10-07T13:23:21.971442+00:00"
}/automations/{id}Get a workflow and its runs
The workflow, its last 500 runs (status, step reached, waiting until, errors, log) and per-step stats: how many runs reached, completed, failed or wait on each step, and the YES / NO, A / B split of branches.
Path parameters
idstringrequired- Id of the record (UUID).
curl "https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/automations/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/automations/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"automation": {
"id": "3aba8ed9-a884-4f32-a536-43ec8685e640",
"user_from": "acme",
"name": "Tag inbound leads",
"description": null,
"status": "draft",
"trigger": {
"type": "contact.created"
},
"conditions": {
"match": "all",
"rules": []
},
"actions": [
{
"id": "a0_0_bdf1du",
"type": "add_tag",
"config": {
"tag": "from-api"
}
}
],
"settings": {},
"stats": {
"runs": 0,
"failed": 0,
"completed": 0
},
"template_key": null,
"inbound_token": "8a71b47c499f34f0a3ffb94154523014",
"next_run_at": null,
"last_run_at": null,
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:23:21.971442+00:00",
"updated_at": "2026-10-07T13:23:21.971442+00:00"
},
"runs": [],
"step_stats": {},
"run_counts": {}
}/automations/{id}Update, activate or pause
Send what changes. status: "active" validates the steps first; status: "paused" stops waiting runs.
Path parameters
idstringrequired- Id of the record (UUID).
Body
namestring- Name.
triggerobject- Trigger.
conditionsobject- Conditions.
actionsobject[]- Steps (replace all).
settingsobject- Settings.
statusstring- Status.
descriptionstring- Description.
curl -X PATCH "https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "status": "active" }'
const res = await fetch("https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc", { method: "PATCH", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "status": "active" }), }); const data = await res.json();
import os, requests
res = requests.patch(
"https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"status": "active"
},
)
data = res.json(){
"id": "3aba8ed9-a884-4f32-a536-43ec8685e640",
"user_from": "acme",
"name": "Tag inbound leads",
"description": null,
"status": "active",
"trigger": {
"type": "contact.created"
},
"conditions": {
"match": "all",
"rules": []
},
"actions": [
{
"id": "a0_0_bdf1du",
"type": "add_tag",
"config": {
"tag": "from-api"
}
}
],
"settings": {},
"stats": {
"runs": 0,
"failed": 0,
"completed": 0
},
"template_key": null,
"inbound_token": "8a71b47c499f34f0a3ffb94154523014",
"next_run_at": null,
"last_run_at": null,
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:23:21.971442+00:00",
"updated_at": "2026-10-07T13:23:21.971442+00:00"
}/automations/{id}Delete a workflow
Path parameters
idstringrequired- Id of the record (UUID).
curl -X DELETE "https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/automations/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/automations/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"deleted": true
}/automations/{id}/duplicateDuplicate a workflow
Copy as a draft, named “(copy)”.
Path parameters
idstringrequired- Id of the record (UUID).
curl -X POST "https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc/duplicate" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc/duplicate", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` }, }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc/duplicate",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"id": "cf673d76-b486-444a-a4e0-82b63890441b",
"user_from": "acme",
"name": "Tag inbound leads (copy)",
"description": null,
"status": "draft",
"trigger": {
"type": "contact.created"
},
"conditions": {
"match": "all",
"rules": []
},
"actions": [
{
"id": "a0_0_bdf1du",
"type": "add_tag",
"config": {
"tag": "from-api"
}
}
],
"settings": {
"rr_pointer": 0
},
"stats": {
"runs": 0,
"failed": 0,
"completed": 0
},
"template_key": null,
"inbound_token": "b3a90b090bfdafb8b5a7b004f190ad13",
"next_run_at": null,
"last_run_at": null,
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:23:25.031276+00:00",
"updated_at": "2026-10-07T13:23:25.031276+00:00"
}/automations/{id}/runRun a workflow on records now
Enrolls up to 500 contacts or deals right away, ignoring the trigger and conditions (event workflow.enrolled). Re-enrollment is allowed.
Path parameters
idstringrequired- Id of the record (UUID).
Body
contact_idsuuid[]- Contacts to run it on.
deal_idsuuid[]- Deals to run it on.
curl -X POST "https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc/run" \ -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/automations/e43414d6-f56f-42be-a64c-a836d6015efc/run", { 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/automations/e43414d6-f56f-42be-a64c-a836d6015efc/run",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"contact_ids": ["e43414d6-f56f-42be-a64c-a836d6015efc"]
},
)
data = res.json(){
"started": 1,
"results": [
{
"contact_id": "e43414d6-f56f-42be-a64c-a836d6015efc",
"run_id": "0c2f1e3d-5b6a-4c7d-8e9f-a0b1c2d3e4f5"
}
]
}/automations/{id}/previewWho matches a workflow now
How many contacts match the workflow’s conditions (or the conditions you send), with a sample — before you activate it.
Path parameters
idstringrequired- Id of the record (UUID).
Body
conditionsobject- Conditions to test instead of the saved ones.
curl -X POST "https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc/preview" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc/preview", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` }, }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/automations/e43414d6-f56f-42be-a64c-a836d6015efc/preview",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"total": 1,
"matching": 1,
"approximate": false,
"sample": [
{
"id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"name": "Camille Laurent",
"company": "Payfit",
"score": 40
}
]
}/automations/previewWho matches some conditions
Same as above without a saved workflow.
Body
conditionsobjectrequired- Conditions to test.
curl -X POST "https://meetzy.me/api/v1/automations/preview" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "conditions": { "match": "all", "rules": [ { "field": "lead_score", "op": "gte", "value": 60 }, { "field": "company.employees", "op": "gt", "value": 50 } ] } }'
const res = await fetch("https://meetzy.me/api/v1/automations/preview", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "conditions": { "match": "all", "rules": [ { "field": "lead_score", "op": "gte", "value": 60 }, { "field": "company.employees", "op": "gt", "value": 50 } ] } }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/automations/preview",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"conditions": {
"match": "all",
"rules": [
{
"field": "lead_score",
"op": "gte",
"value": 60
},
{
"field": "company.employees",
"op": "gt",
"value": 50
}
]
}
},
)
data = res.json(){
"total": 1840,
"matching": 214,
"approximate": false,
"sample": [
{
"id": "e43414d6-f56f-42be-a64c-a836d6015efc",
"name": "Camille Laurent",
"company": "Payfit"
}
]
}/inbound/{token}Trigger a workflow from any tool
For workflows with the trigger webhook.received or form.submitted: each one has a secret URL https://meetzy.me/api/v1/inbound/{token} (shown in the app). Post JSON or a plain HTML form to it — no API key, the token is the secret. The contact is found by email or created (first name, last name, company, title, phone, source), then the workflow runs with the whole payload available as {{event.*}}. HTML forms can send _redirect (or ?redirect=) to land on a thank-you page.
Path parameters
tokenstringrequired- The workflow’s inbound token (its secret URL).
Body
emailstring- Contact email (also
contact.email,primary_email). contact_iduuid- Or an existing contact.
first_namestring- First name (also
firstName). last_namestring- Last name (also
lastName). companystring- Company.
titlestring- Job title (also
job_title). phonestring- Phone.
sourcestring- Source. Default
webhookorform. …any- Any other field, readable in the workflow.
Answers 202. 404 for an unknown token, 409 when the workflow is not active.
curl -X POST "https://meetzy.me/api/v1/inbound/inb_9f3c2a71e4b84d0c" \ -H "Content-Type: application/json" \ -d '{ "email": "camille@payfit.com", "first_name": "Camille", "company": "Payfit", "plan": "Business", "message": "Can we talk about SAP?" }'
const res = await fetch("https://meetzy.me/api/v1/inbound/inb_9f3c2a71e4b84d0c", { method: "POST", headers: { "Content-Type": "application/json" }, body: JSON.stringify({ "email": "camille@payfit.com", "first_name": "Camille", "company": "Payfit", "plan": "Business", "message": "Can we talk about SAP?" }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/inbound/inb_9f3c2a71e4b84d0c",
json={
"email": "camille@payfit.com",
"first_name": "Camille",
"company": "Payfit",
"plan": "Business",
"message": "Can we talk about SAP?"
},
)
data = res.json(){
"accepted": true,
"run_id": "0c2f1e3d-5b6a-4c7d-8e9f-a0b1c2d3e4f5",
"contact_id": "e43414d6-f56f-42be-a64c-a836d6015efc"
}