Workspace & team
Who the key belongs to, the team and invitations, hand-overs, email signatures, company profile, widget boards, saved views, custom properties, search and engine health.
An API key acts as the teammate who created it, inside their workspace: it sees what they see, and what it creates is signed with their name. Team management (invites, removals, hand-overs) needs the workspace owner.
/meWho am IGET/searchSearch everythingGET/healthHealth checkGET/engine/healthAutomation engine healthPOST/engine/runRun the automation engine nowGET/onboarding/statusSetup checklistGET/workspace/setupWorkspace profilePATCH/workspace/profileUpdate your profilePATCH/workspace/companyUpdate the company profileGET/teamTeamPOST/team/invitesInvite a teammatePOST/team/invites/{id}/resendResend an invitationDELETE/team/invites/{id}Cancel an invitationPOST/team/hand-overHand over someone’s workDELETE/team/members/{email}Remove a teammateGET/signatureYour email signaturePUT/signatureSave your email signaturePOST/signature/logoUpload a signature logoPOST/signature/previewPreview a signatureGET/boards/widgetsWidgets for boardsGET/boards/{board}A boardPATCH/boards/{board}Arrange a boardGET/viewsSaved viewsPOST/viewsSave a viewDELETE/views/{id}Delete a viewGET/propertiesCustom propertiesPOST/propertiesCreate a custom propertyDELETE/properties/{id}Delete a custom property/meWho am I
The key’s user (id, email, name, organization, plan, scopes, auth: "api_key"), the team and the pipelines — a good first call to check a key.
curl "https://meetzy.me/api/v1/me" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/me", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/me",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"user": {
"id": "5361d582-7a57-41ce-a448-38c41851565b",
"email": "olivia@acme.com",
"name": "Olivia Martin",
"organization": "acme",
"plan": null,
"auth": "api_key",
"scopes": [
"read",
"write",
"delete",
"webhooks",
"mcp"
]
},
"team": [
{
"email": "olivia@acme.com",
"name": "Olivia Martin",
"memoji": null,
"role": "owner"
}
],
"pipelines": [
{
"id": "cacafee6-6c63-407f-a948-5d6570c20143",
"user_from": "acme",
"name": "Sales pipeline",
"is_default": true,
"position": 0,
"stages": [
{
"id": "qualification",
"name": "Qualification",
"type": "open",
"color": "#6366F1",
"rot_days": 14,
"probability": 10
},
{
"id": "discovery",
"name": "Discovery call",
"type": "open",
"color": "#3B82F6",
"rot_days": 14,
"probability": 20
},
{
"id": "demo",
"name": "Demo / Meeting",
"type": "open",
"color": "#06B6D4",
"rot_days": 10,
"probability": 40
}
],
"currency": "EUR",
"created_at": "2026-10-07T13:09:25.305055+00:00",
"updated_at": "2026-10-07T13:09:25.305055+00:00"
}
]
}/searchSearch everything
Everything matching a text (2 characters minimum), searched in parallel: contacts (8), companies, deals, tasks, order_forms, proformas, quotes, documents (ERP invoices, orders, credit notes — with company_name), products (name, SKU, brand, barcode) — 6 each — and workflows, sequences, campaigns, templates (5 each). A kind with nothing comes back as an empty list.
Query parameters
qstringrequired- Text to find.
curl "https://meetzy.me/api/v1/search?q=payfit" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/search?q=payfit", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/search?q=payfit",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"contacts": [
{
"id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"display_name": "Camille Laurent",
"first_name": "Camille",
"last_name": "Laurent",
"primary_email": "camille@payfit.com",
"phone": "+33612345678",
"title": "Head of Sales",
"company": "Payfit",
"company_id": "166c436d-a874-4730-a0d8-c8d7fa090268",
"avatar_url": null,
"lead_score": 40,
"lead_status": "cold",
"pipeline_stage": "new_leads",
"lifecycle_stage": "mql",
"assigned_to": null,
"primary_source": "manual",
"last_contact_at": "2026-10-07T13:22:57.247+00:00",
"created_at": "2026-10-07T13:22:38.585893+00:00",
"linkedin_profile_url": null,
"country": null,
"city": null,
"tags": [
"inbound"
]
}
],
"companies": [],
"deals": []
}/healthHealth check
ok: true when the CRM tables are reachable. Use it for uptime monitoring.
curl "https://meetzy.me/api/v1/health" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/health", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/health",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"ok": true,
"migration_required": false,
"error": null
}/engine/healthAutomation engine health
Whether the background engine runs (last tick, errors), the event backlog, workflow runs and emails this week, active workflows and enrollments, mailbox status, recent failures, and issues to fix (level, text).
curl "https://meetzy.me/api/v1/engine/health" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/engine/health", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/engine/health",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"status": "warning",
"engine": {
"background": true,
"last_tick": "2026-10-07T13:23:26.164Z",
"last_error": null
},
"backlog": {
"pending_events": 0,
"oldest_minutes": 0
},
"week": {
"workflow_runs": 0,
"emails_sent": 0
},
"active": {
"workflows": 0,
"sequence_enrollments": 0
},
"mailbox": null,
"failures": {
"emails": [],
"workflow_runs": []
},
"issues": [
{
"level": "warning",
"text": "No mailbox: email steps of sequences, campaigns and workflows cannot send."
}
]
}/engine/runRun the automation engine now
Processes pending events, workflow steps, sequence steps, scheduled campaigns and webhook retries immediately instead of waiting for the next tick.
Returns counters of what was processed.
curl -X POST "https://meetzy.me/api/v1/engine/run" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/engine/run", { 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/engine/run",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json()See the notes on the left.
/onboarding/statusSetup checklist
The setup steps (profile, company, mailbox, LinkedIn, first contacts, pipeline…) with what is done.
curl "https://meetzy.me/api/v1/onboarding/status" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/onboarding/status", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/onboarding/status",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"steps": [
{
"id": "profile",
"done": false,
"count": 0,
"title": "Pick your memoji",
"text": "Your teammates see it on leads, deals and the leaderboard.",
"event": "meetzy:onboarding",
"cta": "Pick one"
},
{
"id": "company",
"done": false,
"count": 0,
"title": "Teach Meetzy your company",
"text": "The AI writes emails and next steps with your offer and tone.",
"event": "meetzy:onboarding",
"cta": "Set up"
}
],
"done": 6,
"total": 11
}/workspace/setupWorkspace profile
Your profile, the company profile the AI writes with, the sales cycles, mailbox and LinkedIn status.
curl "https://meetzy.me/api/v1/workspace/setup" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/workspace/setup", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/workspace/setup",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"profile": {
"first_name": "Olivia",
"last_name": "Martin",
"memoji": null,
"email": "olivia@acme.com"
},
"company": null,
"cycles": {
"configured": false,
"multi_supported": true,
"cycles": [
{
"id": "default",
"name": "Main pipeline",
"color": "#007AFF",
"is_default": true,
"stages": [
{
"id": "new_leads",
"name": "New leads",
"color": "#8E8E93",
"fixed": true
},
{
"id": "in_discussion",
"name": "In discussion",
"description": null,
"color": "#5856D6",
"won": false
},
{
"id": "negotiation",
"name": "Negotiation",
"description": null,
"color": "#007AFF",
"won": false
}
],
"count": 1
}
]
},
"mailbox": {
"connected": false,
"sending_as": null,
"mode": "personal",
"mailboxes": [],
"all": []
},
"linkedin": {
"connected": false
}
}/workspace/profileUpdate your profile
Body
first_namestring- First name.
last_namestring- Last name.
memojistring- Avatar id.
curl -X PATCH "https://meetzy.me/api/v1/workspace/profile" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "first_name": "Olivia", "last_name": "Martin" }'
const res = await fetch("https://meetzy.me/api/v1/workspace/profile", { method: "PATCH", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "first_name": "Olivia", "last_name": "Martin" }), }); const data = await res.json();
import os, requests
res = requests.patch(
"https://meetzy.me/api/v1/workspace/profile",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"first_name": "Olivia",
"last_name": "Martin"
},
)
data = res.json(){
"ok": true,
"first_name": "Olivia",
"last_name": "Martin"
}/workspace/companyUpdate the company profile
What the AI knows about your company — used to write emails, AI lines and next steps in your offer and tone.
Body
company_namestring- Your company.
company_descriptionstring- What you do.
industrystring- Your sector.
target_audiencestring- Who you sell to.
key_productsstring- Products and services.
tonestring- How you write (friendly, formal…).
website_urlstring- Website.
Returns the saved company profile.
curl -X PATCH "https://meetzy.me/api/v1/workspace/company" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "company_name": "Acme", "company_description": "Distribution of premium fashion brands to retailers in Europe and Africa.", "target_audience": "Independent retailers and department stores", "tone": "warm and concise" }'
const res = await fetch("https://meetzy.me/api/v1/workspace/company", { method: "PATCH", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "company_name": "Acme", "company_description": "Distribution of premium fashion brands to retailers in Europe and Africa.", "target_audience": "Independent retailers and department stores", "tone": "warm and concise" }), }); const data = await res.json();
import os, requests
res = requests.patch(
"https://meetzy.me/api/v1/workspace/company",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"company_name": "Acme",
"company_description": "Distribution of premium fashion brands to retailers in Europe and Africa.",
"target_audience": "Independent retailers and department stores",
"tone": "warm and concise"
},
)
data = res.json()See the notes on the left.
/teamTeam
Plan, seats used and available, members (role, last login, how many leads, deals and tasks each owns) and pending invitations.
curl "https://meetzy.me/api/v1/team" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/team", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/team",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"plan": "starter",
"seats": 1,
"used": 1,
"can_manage": true,
"me": "olivia@acme.com",
"company": "Acme",
"members": [
{
"id": "5361d582-7a57-41ce-a448-38c41851565b",
"email": "olivia@acme.com",
"name": "Olivia Martin",
"first_name": "Olivia",
"last_name": "Martin",
"memoji": null,
"role": "owner",
"last_login": null,
"joined_at": "2026-10-07T13:07:47.072553+00:00",
"is_me": true,
"work": {
"leads": 0,
"deals": 1,
"tasks": 10
}
}
],
"invites": []
}/team/invitesInvite a teammate
Emails an invitation valid 7 days. Owner only. 402 when every seat of the plan is used, 409 when the email already has an account or a pending invitation.
Body
emailstringrequired- Their email.
curl -X POST "https://meetzy.me/api/v1/team/invites" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "email": "paul@acme.com" }'
const res = await fetch("https://meetzy.me/api/v1/team/invites", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "email": "paul@acme.com" }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/team/invites",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"email": "paul@acme.com"
},
)
data = res.json(){
"id": "6a5b4c3d-2e1f-4a0b-9c8d-7e6f5a4b3c2d",
"email": "paul@acme.com",
"link": "https://meetzy.me/app/join/9f8e…",
"inviter_name": "Olivia Martin",
"company": "Acme"
}/team/invites/{id}/resendResend an invitation
New email, new 7-day validity.
Path parameters
idstringrequired- Id of the record (UUID).
curl -X POST "https://meetzy.me/api/v1/team/invites/e43414d6-f56f-42be-a64c-a836d6015efc/resend" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/team/invites/e43414d6-f56f-42be-a64c-a836d6015efc/resend", { 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/team/invites/e43414d6-f56f-42be-a64c-a836d6015efc/resend",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"id": "6a5b4c3d-2e1f-4a0b-9c8d-7e6f5a4b3c2d",
"email": "paul@acme.com",
"link": "https://meetzy.me/app/join/9f8e…",
"inviter_name": "Olivia Martin",
"company": "Acme"
}/team/invites/{id}Cancel an invitation
Path parameters
idstringrequired- Id of the record (UUID).
curl -X DELETE "https://meetzy.me/api/v1/team/invites/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/team/invites/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/team/invites/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"ok": true
}/team/hand-overHand over someone’s work
Moves every lead, open deal and open task of one teammate to another (holidays, departure, new territory). Owner only.
Body
from_emailstringrequired- Whose work moves.
to_emailstringrequired- Who takes it.
curl -X POST "https://meetzy.me/api/v1/team/hand-over" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "from_email": "paul@acme.com", "to_email": "olivia@acme.com" }'
const res = await fetch("https://meetzy.me/api/v1/team/hand-over", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "from_email": "paul@acme.com", "to_email": "olivia@acme.com" }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/team/hand-over",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"from_email": "paul@acme.com",
"to_email": "olivia@acme.com"
},
)
data = res.json(){
"moved": {
"leads": 214,
"deals": 9,
"tasks": 31
}
}/team/members/{email}Remove a teammate
Removes their account after handing their work over (to hand_over_to, or the owner). The owner cannot be removed.
Path parameters
emailstringrequired- Email of the teammate.
Body
hand_over_tostring- Who takes their leads, deals and tasks. Default: the owner.
curl -X DELETE "https://meetzy.me/api/v1/team/members/paul@acme.com" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/team/members/paul@acme.com", { 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/team/members/paul@acme.com",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"ok": true,
"moved": {
"leads": 214,
"deals": 9,
"tasks": 31
}
}/signatureYour email signature
The available designs (classic, compact, minimal), your saved configuration and the rendered HTML appended to emails sent from your mailbox.
curl "https://meetzy.me/api/v1/signature" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/signature", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/signature",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"templates": [
{
"id": "classic",
"name": "Classic",
"description": "Two columns with logo and address block"
},
{
"id": "compact",
"name": "Compact",
"description": "Logo on the left, single-line details on the right"
}
],
"config": null,
"html": null,
"updated_at": null
}/signatureSave your email signature
From a design (config), from your own HTML (mode: "html"), or remove it (mode: "clear").
Body
configobjecttemplate(classic,compact,minimal),name,jobTitle,address(lines),logoUrl,logoLinkUrl,socials([{ kind: "linkedin", url }]),colors({ text, accent, socials }),fontFamily.modestringhtmlorclear.htmlstring- Your signature HTML (with
mode: "html").
Returns { config, html }.
curl -X PUT "https://meetzy.me/api/v1/signature" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "config": { "template": "compact", "name": "Olivia Martin", "jobTitle": "Head of Sales", "address": [ "Acme", "12 rue de la Paix, Paris" ], "logoUrl": "https://acme.com/logo.png", "socials": [ { "kind": "linkedin", "url": "https://www.linkedin.com/in/olivia" } ], "colors": { "accent": "#0071E3" } } }'
const res = await fetch("https://meetzy.me/api/v1/signature", { method: "PUT", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "config": { "template": "compact", "name": "Olivia Martin", "jobTitle": "Head of Sales", "address": [ "Acme", "12 rue de la Paix, Paris" ], "logoUrl": "https://acme.com/logo.png", "socials": [ { "kind": "linkedin", "url": "https://www.linkedin.com/in/olivia" } ], "colors": { "accent": "#0071E3" } } }), }); const data = await res.json();
import os, requests
res = requests.put(
"https://meetzy.me/api/v1/signature",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"config": {
"template": "compact",
"name": "Olivia Martin",
"jobTitle": "Head of Sales",
"address": ["Acme", "12 rue de la Paix, Paris"],
"logoUrl": "https://acme.com/logo.png",
"socials": [
{
"kind": "linkedin",
"url": "https://www.linkedin.com/in/olivia"
}
],
"colors": {
"accent": "#0071E3"
}
}
},
)
data = res.json()See the notes on the left.
/signature/logoUpload a signature logo
Stores an image and returns its public URL for config.logoUrl.
Body
data_urlstringrequired- The image as a data URL (
data:image/png;base64,…). namestring- File name.
curl -X POST "https://meetzy.me/api/v1/signature/logo" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/signature/logo", { 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/signature/logo",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"url": "https://…/signature-logos/acme.png"
}/signature/previewPreview a signature
Renders a configuration to HTML without saving it.
Body
configobjectrequired- Signature configuration.
curl -X POST "https://meetzy.me/api/v1/signature/preview" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/signature/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/signature/preview",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"html": "<table role=\"presentation\" …>…</table>"
}/boards/widgetsWidgets for boards
Every widget that can go on the Sales cockpit or Home: id, category, title, description, allowed sizes (xs ¼, s ⅓, m ½, l ⅔, xl full width), default size and what data it needs (deals, erp…).
Query parameters
categorystringfocus,leads,deals,erp,marketing,teamortools.
curl "https://meetzy.me/api/v1/boards/widgets" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/boards/widgets", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/boards/widgets",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"sizes": [
"xs",
"s",
"m",
"l",
"xl"
],
"widgets": [
{
"id": "focus.tasks",
"category": "focus",
"title": "Tasks for today",
"description": "Open tasks due today, and how many are late",
"sizes": [
"xs",
"s"
],
"default_size": "xs",
"needs": null
},
{
"id": "focus.followups",
"category": "focus",
"title": "Follow-ups due",
"description": "CRM reminders due today or late",
"sizes": [
"xs",
"s"
],
"default_size": "xs",
"needs": null
}
]
}/boards/{board}A board
board is cockpit (Sales cockpit) or home. The widgets in order with their size and key, and whether the arrangement is yours, the team’s or the default one (then widgets is null: the app builds it from your data).
Path parameters
boardstringrequiredcockpit(Sales cockpit) orhome.
curl "https://meetzy.me/api/v1/boards/cockpit" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/boards/cockpit", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/boards/cockpit",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"board": "home",
"source": "yours",
"can_set_team": true,
"widgets": [
{
"position": 1,
"key": "ymf530d",
"widget": "deals.forecast",
"title": "Forecast",
"size": "l"
},
{
"position": 2,
"key": "djnlsgl",
"widget": "focus.today",
"title": "Your day",
"size": "m"
}
]
}/boards/{board}Arrange a board
Replace the whole board with widgets, or change it with add, remove, resize, move (widgets referred to by id or key). reset: true goes back to the team / default board. for_team: true (admins) saves it as everyone’s default. Saved on the server — the same on every device.
Path parameters
boardstringrequiredcockpit(Sales cockpit) orhome.
Body
widgetsobject[]- Full list, top to bottom:
[{ widget, size? }]. addobject[][{ widget, size?, position? }](position from 1).removestring[]- Widget ids or keys.
resizeobject[][{ widget, size }].moveobject[][{ widget, position }].resetboolean- Drop the arrangement.
for_teamboolean- Apply to the team default.
curl -X PATCH "https://meetzy.me/api/v1/boards/cockpit" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "widgets": [ { "widget": "focus.today", "size": "m" }, { "widget": "deals.forecast" }, { "widget": "erp.invoiced", "size": "s" } ] }'
const res = await fetch("https://meetzy.me/api/v1/boards/cockpit", { method: "PATCH", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "widgets": [ { "widget": "focus.today", "size": "m" }, { "widget": "deals.forecast" }, { "widget": "erp.invoiced", "size": "s" } ] }), }); const data = await res.json();
import os, requests
res = requests.patch(
"https://meetzy.me/api/v1/boards/cockpit",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"widgets": [
{
"widget": "focus.today",
"size": "m"
},
{
"widget": "deals.forecast"
},
{
"widget": "erp.invoiced",
"size": "s"
}
]
},
)
data = res.json(){
"board": "home",
"source": "yours",
"widgets": [
{
"position": 1,
"key": "djnlsgl",
"widget": "focus.today",
"title": "Your day",
"size": "m"
},
{
"position": 2,
"key": "ymf530d",
"widget": "deals.forecast",
"title": "Forecast",
"size": "l"
},
{
"position": 3,
"key": "q8p2v1a",
"widget": "erp.invoiced",
"title": "Invoiced",
"size": "s"
}
]
}/viewsSaved views
Saved filters of the lists (yours and the shared ones).
Query parameters
object_typestringcontact,company,deal,task…
curl "https://meetzy.me/api/v1/views?object_type=contact" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/views?object_type=contact", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/views?object_type=contact",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"views": [
{
"id": "ec753b7f-59bc-4713-aec9-404fabcbf10b",
"user_from": "acme",
"object_type": "contact",
"name": "Hot",
"filters": {
"min_score": 50
},
"columns": [],
"sort": {},
"is_shared": true,
"owner_email": "olivia@acme.com",
"created_at": "2026-10-07T13:23:42.979489+00:00"
}
]
}/viewsSave a view
Body
object_typestringrequired- List it applies to.
namestringrequired- Name.
filtersobject- Filters (same keys as the list endpoint’s query).
columnsstring[]- Visible columns.
sortobject- Sort.
is_sharedboolean- Visible to the team.
curl -X POST "https://meetzy.me/api/v1/views" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "object_type": "contact", "name": "Hot MQLs", "filters": { "lifecycle_stage": "mql", "min_score": 60 }, "is_shared": true }'
const res = await fetch("https://meetzy.me/api/v1/views", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "object_type": "contact", "name": "Hot MQLs", "filters": { "lifecycle_stage": "mql", "min_score": 60 }, "is_shared": true }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/views",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"object_type": "contact",
"name": "Hot MQLs",
"filters": {
"lifecycle_stage": "mql",
"min_score": 60
},
"is_shared": True
},
)
data = res.json(){
"id": "ec753b7f-59bc-4713-aec9-404fabcbf10b",
"user_from": "acme",
"object_type": "contact",
"name": "Hot",
"filters": {
"min_score": 50
},
"columns": [],
"sort": {},
"is_shared": true,
"owner_email": "olivia@acme.com",
"created_at": "2026-10-07T13:23:42.979489+00:00"
}curl -X DELETE "https://meetzy.me/api/v1/views/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/views/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/views/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"deleted": true
}/propertiesCustom properties
Extra fields defined for contacts, companies or deals. Their values live in custom_properties (contacts) or custom (companies, deals), under the property key.
Query parameters
object_typestringcontact,companyordeal.
curl "https://meetzy.me/api/v1/properties" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/properties", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/properties",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"properties": [
{
"id": "2d88f4ee-0f91-43a3-aded-4dbd80f50d18",
"user_from": "acme",
"object_type": "contact",
"key": "shoe_size",
"label": "Shoe size",
"field_type": "number",
"options": [],
"group_name": null,
"required": false,
"position": 0,
"created_at": "2026-10-07T13:09:53.215782+00:00"
},
{
"id": "01823011-c6f7-4f9b-a4c8-0f174ed0409c",
"user_from": "acme",
"object_type": "contact",
"key": "shoe_size_1791379423679",
"label": "Shoe size 1791379423679",
"field_type": "number",
"options": [],
"group_name": null,
"required": false,
"position": 0,
"created_at": "2026-10-07T13:23:44.389568+00:00"
}
]
}/propertiesCreate a custom property
The key is made from the label (Shoe size → shoe_size). 409 if it already exists.
Body
object_typestringrequiredcontact,companyordeal.labelstringrequired- Label.
keystring- Key (default from the label).
field_typestringtext,number,date,boolean,select,multiselect,url…optionsstring[]- Choices for selects.
group_namestring- Section it shows in.
requiredboolean- Required in forms.
positioninteger- Order.
curl -X POST "https://meetzy.me/api/v1/properties" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "object_type": "company", "label": "Distribution channel", "field_type": "select", "options": [ "Retail", "Wholesale", "E-commerce" ] }'
const res = await fetch("https://meetzy.me/api/v1/properties", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "object_type": "company", "label": "Distribution channel", "field_type": "select", "options": [ "Retail", "Wholesale", "E-commerce" ] }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/properties",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"object_type": "company",
"label": "Distribution channel",
"field_type": "select",
"options": ["Retail", "Wholesale", "E-commerce"]
},
)
data = res.json(){
"id": "01823011-c6f7-4f9b-a4c8-0f174ed0409c",
"user_from": "acme",
"object_type": "contact",
"key": "shoe_size_1791379423679",
"label": "Shoe size 1791379423679",
"field_type": "number",
"options": [],
"group_name": null,
"required": false,
"position": 0,
"created_at": "2026-10-07T13:23:44.389568+00:00"
}/properties/{id}Delete a custom property
Path parameters
idstringrequired- Id of the record (UUID).
curl -X DELETE "https://meetzy.me/api/v1/properties/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/properties/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/properties/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"deleted": true
}