Platform

Reference

Every event type, workflow trigger, condition field, operator, action, sequence step, merge tag, stage and period — the values the API accepts.

The same lists are served by GET /catalog (no API key needed), so an integration can build its pickers from 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

API scopes

ScopeAllows
readRead CRM data
writeCreate & update records
deleteDelete records
webhooksManage webhooks
mcpUse as MCP token (Codex, Cursor, …)

Event types

EventWhenGroup
contact.createdContact createdContacts
contact.stage_changedContact pipeline stage changedContacts
contact.status_changedContact status changedContacts
contact.lifecycle_changedLifecycle stage changedContacts
contact.score_changedLead score changedContacts
contact.owner_changedContact owner changedContacts
contact.repliedContact replied (email, LinkedIn, WhatsApp)Contacts
contact.email_sentYou emailed the contact (any mailbox: Outlook, Gmail…)Contacts
contact.email_receivedThe contact emailed you (any mailbox)Contacts
contact.message_receivedWhatsApp / LinkedIn message receivedContacts
contact.message_sentYou sent a WhatsApp / LinkedIn message (any device)Contacts
contact.email_openedEmail openedContacts
contact.email_clickedEmail link clickedContacts
contact.website_visitVisited the websiteContacts
contact.meeting_bookedMeeting bookedContacts
contact.linkedin_connectedLinkedIn invitation acceptedContacts
contact.tags_changedLabels / tags changedContacts
contact.note_addedNote addedContacts
contact.property_changedContact property changedContacts
contact.deletedContact deletedContacts
deal.createdDeal createdDeals
deal.stage_changedDeal stage changedDeals
deal.wonDeal wonDeals
deal.lostDeal lostDeals
deal.reopenedDeal reopenedDeals
deal.amount_changedDeal amount changedDeals
deal.owner_changedDeal owner changedDeals
deal.rottingDeal stuck in stage too longDeals
deal.overdueDeal past its close dateDeals
deal.property_changedDeal property changedDeals
company.createdCompany createdCompanies
company.lifecycle_changedCompany lifecycle changedCompanies
task.createdTask createdTasks
task.completedTask completedTasks
task.overdueTask overdueTasks
quote.sentQuote sentQuotes
quote.viewedQuote viewedQuotes
quote.acceptedQuote acceptedQuotes
quote.declinedQuote declinedQuotes
sequence.enrolledEnrolled in sequenceSequences
sequence.completedSequence completedSequences
sequence.exitedExited sequenceSequences
email.sentEmail sent (campaign or workflow)Email
email.openedEmail openedEmail
email.clickedLink clicked in an emailEmail
email.failedEmail could not be sentEmail
contact.unsubscribedContact unsubscribedEmail
webhook.receivedInbound webhook (n8n, Zapier, forms…)External
form.submittedForm submittedExternal
workflow.enrolledEnrolled manually (CRM, another workflow, API, Claude)External

Trigger config

Optional settings of a workflow trigger, in trigger.config. Every event type can be a trigger; a schedule trigger is { "type": "schedule", "config": { "frequency": "daily" | "weekdays" | "weekly", "time": "09:00", "weekday": 1, "timezone": "Europe/Paris" } }.

TriggerConfig
email.sentcampaign_id — Campaign
email.openedcampaign_id — Campaign
email.clickedcampaign_id — Campaign
contact.stage_changedto — New stage is
contact.score_changedabove — Score crosses above
contact.lifecycle_changedto — New lifecycle is
contact.website_visitmin_visits — Min. total visits
contact.property_changedproperty — Property
deal.property_changedproperty — Property
deal.stage_changedpipeline_id — Pipeline · to — New stage is
deal.amount_changedabove — Amount above
deal.rottingdays — Days in stage (overrides stage rot)

Fields watched by contact.property_changed: pipeline_stage, lead_status, lifecycle_stage, lead_score, assigned_to, title, company, company_id, phone, primary_email, country, city, tags, do_not_contact, custom_properties. By deal.property_changed: stage_id, status, amount, close_date, owner_email, priority, next_step, probability, company_id, custom.

Condition fields

Contact
FieldLabelType
lead_scoreLead scorenumber
sales_cycle_idSales cyclesales_cycle
pipeline_stageStage (in their sales cycle)contact_stage
lifecycle_stageLifecycle stagelifecycle
lead_statusStatustext
assigned_toOwnerowner
primary_emailEmailtext
companyCompany nametext
titleJob titletext
senioritySenioritytext
countryCountrytext
organization_industryIndustrytext
organization_num_employeesCompany sizenumber
primary_sourceSourcetext
total_email_repliesEmail repliesnumber
total_emails_openedEmails openednumber
total_website_visitsWebsite visitsnumber
linkedin_connection_statusLinkedIn statustext
tagsTagsarray
do_not_contactDo not contactboolean
days_since_last_contactDays since last contacted (computed)number
days_since_createdDays since created (computed)number
open_deals_countOpen deals (computed)number
open_deals_amountOpen deals amount (computed)number
won_deals_countWon deals (computed)number
active_sequencesActive sequences (computed)number
open_tasksOpen tasks (computed)number
email_domainEmail domain (computed)text
Deal
FieldLabelType
amountAmountnumber
stage_idStagedeal_stage
pipeline_idPipelinepipeline
statusStatustext
owner_emailOwnerowner
priorityPrioritytext
deal_typeDeal typetext
sourceSourcetext
tagsTagsarray
Company
FieldLabelType
nameNametext
industryIndustrytext
employeesEmployeesnumber
countryCountrytext
lifecycle_stageLifecyclelifecycle
tierTiertext
Task
FieldLabelType
typeTypetext
priorityPrioritytext
owner_emailOwnerowner
Related records and workflow state
FieldLabelType
company.nameCompany: nametext
company.industryCompany: industrytext
company.employeesCompany: employeesnumber
company.tierCompany: ABM tiertext
company.lifecycle_stageCompany: lifecyclelifecycle
company.countryCompany: countrytext
deal.amountDeal: amountnumber
deal.stage_idDeal: stagedeal_stage
deal.statusDeal: statustext
deal.days_in_stageDeal: days in stagenumber
deal.days_to_closeDeal: days to close datenumber
wait.resultWorkflow: last wait result (received / timeout)text
split.variantWorkflow: A/B variant (a / b)text
event.fromTrigger: previous valuetext
event.toTrigger: new valuetext
event.subjectEmail: subjecttext
event.snippetEmail / message: text (beginning)text
event.channelMessage: channel (whatsapp, linkedin, email)text
event.nthEmail: how many emails you sent them (this one included)number
event.in_copyEmail: they were only in copy (true / false)text
event.mailboxEmail: mailbox it went throughtext

Condition operators

OperatorMeans
eqis
neqis not
containscontains
not_containsdoes not contain
gtgreater than
gteat least
ltless than
lteat most
is_setis known
is_not_setis unknown
inis any of (comma separated)

Workflow actions

Each step is { "type": "<action>", "config": { … } }; if_else and ab_split carry branches.

ActionDoesConfig
delayPause before the next step.amount, unit (minutes, hours, days, business_days)
wait_untilPause until the contact matches a condition (checked every run, with timeout).field, op, value, timeout_days
if_elseSplit the flow into a YES path and a NO path based on conditions.branches: yes, no
ab_splitRandomly send records down path A or B (e.g. test two emails).percent_a · branches: a, b
wait_for_eventPause until something happens (reply, meeting, stage change…) or a timeout. Then branch on "wait.result".event_type, timeout_days
stopEnd the run here.—
move_cycle_stageThe contact stays in their sales cycle and goes to this stage (matched by name, so one workflow works for every cycle that has it). Forward only by default: never moves someone back.stage, forward_only (yes, no), cycle
update_contactSet stage, status, lifecycle, score or any field.field, value
adjust_scoreIncrease or decrease the lead score.points
assign_ownerAssign to a teammate or rotate (round-robin).mode (specific, round_robin, least_loaded), owner
add_tagTag the contact.tag
remove_tagRemove a tag.tag
add_noteWrite a note on the record (merge tags supported).note
associate_companyFind or create the company from the contact email domain / company name.—
create_taskCreate a to-do, call, email or LinkedIn task.title, type (todo, call, email, meeting, linkedin, follow_up), due_in_days, priority (low, medium, high), owner
create_dealOpen a deal for this contact.name, pipeline_id, stage_id, amount
update_dealMove stage / set property on the triggering deal (or the contact's open deal).field (stage_id, status, amount, priority, owner_email, close_date, next_step), value
enroll_sequenceStart a nurturing sequence.sequence_id
unenroll_sequenceStop all (or one) active sequences.sequence_id
update_companySet a property on the associated company.field (lifecycle_stage, company_type, tier, owner_email, industry, health_score), value
enroll_workflowHand the record over to another workflow (chain automations).automation_id
send_emailSend an email from the connected mailbox — pick a template or write it, with variables, tracking and optional AI personalisation.template_id, subject, body, track (yes, no), unsubscribe_link (no, yes), ai_instructions
add_to_mailingSubscribe the contact to a recurring email campaign (e.g. a daily or weekly mailing).campaign_id
remove_from_mailingStop sending a recurring campaign to this contact.campaign_id
send_linkedin_inviteBlank connection request via the connected LinkedIn account.—
send_linkedin_messageOnly works if already connected.message
send_slackMessage a Slack channel via an incoming webhook URL.webhook_url, text
send_teamsMessage a Teams channel via an incoming webhook URL.webhook_url, text
notifyIn-app (and desktop) notification to the owner or a teammate.title, body, recipient
http_requestPOST the record + event as JSON to any URL.url, method (POST, PUT, PATCH, GET), headers, body
log_activityWrite a timeline entry.type (note, call, meeting, email, system), subject, body

Sequence step types

StepWhat it isRuns
emailAutomated emailAutomatically
manual_emailManual email (task)Creates a task
linkedin_inviteLinkedIn invitationAutomatically
linkedin_messageLinkedIn messageAutomatically
callCall taskCreates a task
taskGeneric taskCreates a task

Merge tags

Usable in emails, sequences, workflow texts and task titles. Fallbacks with {{contact.first_name | there}}, conditions with {{#if …}}…{{else}}…{{/if}}. In workflows, {{deal.*}} and {{event.*}} are available too ({{deal.name}}, {{deal.amount}}, {{deal.stage}}, {{event.type}}).

TagGivesGroup
{{contact.first_name}}First name — e.g. CamilleContact
{{contact.last_name}}Last name — e.g. LaurentContact
{{contact.name}}Full name — e.g. Camille LaurentContact
{{contact.email}}Email — e.g. camille@payfit.comContact
{{contact.title}}Job title — e.g. Head of SalesContact
{{contact.company}}Company — e.g. PayfitContact
{{contact.city}}City — e.g. ParisContact
{{contact.country}}Country — e.g. FranceContact
{{contact.lead_score}}Lead score — e.g. 72Contact
{{contact.lifecycle_stage}}Lifecycle stage — e.g. mqlContact
{{contact.custom.your_field}}Custom property — e.g. …Contact
{{company.name}}Company name — e.g. PayfitCompany
{{company.industry}}Industry — e.g. SoftwareCompany
{{company.domain}}Website — e.g. payfit.comCompany
{{owner.first_name}}Sender first name — e.g. OliviaSender
{{owner.name}}Sender name — e.g. Olivia OwnerSender
{{owner.email}}Sender email — e.g. olivia@acme.comSender
{{today}}Today — e.g. 05/10/2026Dates
{{weekday}}Weekday — e.g. lundiDates
{{month}}Month — e.g. octobreDates
{{contact.first_name | there}}With fallback — e.g. CamilleSmart
{{#if contact.company}}at {{contact.company}}{{else}}at your company{{/if}}If / else block — e.g. at PayfitSmart
{{ai.line}}AI personalised line — e.g. Congrats on the Series B last month!Smart
{{unsubscribe_url}}Unsubscribe link — e.g. https://…Smart

Lifecycle stages

IdLabel
subscriberSubscriber
leadLead
mqlMarketing Qualified
sqlSales Qualified
opportunityOpportunity
customerCustomer
evangelistEvangelist
churnedChurned
otherOther

Default deal pipeline

Stage idNameProbabilityTypeStuck after
qualificationQualification10%open14 days
discoveryDiscovery call20%open14 days
demoDemo / Meeting40%open10 days
proposalProposal sent60%open10 days
negotiationNegotiation80%open7 days
wonClosed won100%won—
lostClosed lost0%lost—

Task types, activity types, call outcomes

Task typeActivity typeCall outcome
todonoteconnected Connected
callcallpositive Positive / interested
emailmeetingnegative Not interested
meetingemailscheduled Meeting scheduled
linkedinlinkedinno_answer No answer
follow_upwhatsappvoicemail Left voicemail
stage_changebusy Busy
taskwrong_number Wrong number
quote
system

Lost reasons

Price too high · Chose a competitor · No budget · No decision / stalled · Bad timing · Missing feature · Unresponsive · Not a fit · Other

Periods

ValueMeans
weekThis week
monthThis month
quarterThis quarter
yearThis year
last_monthLast month
last_quarterLast quarter
last_yearLast year
d30Last 30 days
d90Last 90 days
m12Last 12 months
allAll time

Data source objects

ObjectWhatLands in
productsCatalog with prices, stock and every detailProduct catalog
companiesCustomer and prospect accountsCompanies
contactsPeople at those companiesContacts
dealsOpportunities in progressDeals pipeline
quotesQuotations sent to customersCompany history
ordersSales ordersCompany history
invoicesInvoices and what is still unpaidCompany history
credit_notesRefunds and returnsCompany history
price_rulesCustomer price scales (coefficient per brand), supplier currencies, incoming stock and tester itemsOrder forms
GET/catalog

Catalog of types and values

Event types, trigger types and their config fields, action types with their fields, condition fields and operators, lifecycle stages, task and activity types, call outcomes, lost reasons, pipeline templates, sequence step types, merge tags and API scopes. Public: no key required.

No API key

The tables below are this answer, rendered.

Request
curl "https://meetzy.me/api/v1/catalog"
const res = await fetch("https://meetzy.me/api/v1/catalog");
const data = await res.json();
import os, requests

res = requests.get("https://meetzy.me/api/v1/catalog")
data = res.json()
Response202

See the notes on the left.