Tasks & activities
The daily queue of calls, emails and to-dos, and the timeline of everything logged on contacts, deals and companies.
Tasks are what someone has to do; activities are what happened (a call, a meeting, a note, an email, a stage change). Completing a task logs an activity on the timeline automatically, with its outcome.
/tasksList tasks
Open tasks by default, soonest first, each with its contact, deal and company and an is_overdue flag.
Query parameters
statusstringopen(default),doneorall.ownerstringmeor a teammate’s email.duestringoverdue,today,upcomingorno_date.typestring- Task type.
lead_iduuid- Tasks of a contact.
deal_iduuid- Tasks of a deal.
company_iduuid- Tasks of a company.
limitinteger- Page size, 1–1000. Default 300.
offsetinteger- Rows to skip.
curl "https://meetzy.me/api/v1/tasks?owner=me&due=today" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/tasks?owner=me&due=today", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/tasks?owner=me&due=today",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"tasks": [
{
"id": "c1538a0c-ffff-4229-a25a-9f84ae863bc8",
"user_from": "acme",
"title": "Call Camille",
"description": null,
"type": "call",
"priority": "medium",
"status": "open",
"due_at": "2026-10-08T13:22:53.656+00:00",
"completed_at": null,
"owner_email": "olivia@acme.com",
"lead_id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"deal_id": null,
"company_id": null,
"sequence_enrollment_id": null,
"source": "manual",
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:22:54.323282+00:00",
"updated_at": "2026-10-07T13:22:54.323282+00:00",
"contact": {
"id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"display_name": "Camille Laurent",
"primary_email": "camille@payfit.com",
"phone": "+33612345678",
"title": "Head of Sales",
"company": "Payfit",
"avatar_url": null,
"linkedin_profile_url": null
},
"deal": null,
"company_ref": null,
"is_overdue": false
},
{
"id": "010c6058-d8ee-49f9-ae8d-2bb84f48ceb9",
"user_from": "acme",
"title": "Send deck",
"description": null,
"type": "todo",
"priority": "medium",
"status": "open",
"due_at": null,
"completed_at": null,
"owner_email": "olivia@acme.com",
"lead_id": "30bd93b4-7fef-4b9b-ae22-979d87a26ee2",
"deal_id": null,
"company_id": null,
"sequence_enrollment_id": null,
"source": "manual",
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:09:38.341206+00:00",
"updated_at": "2026-10-07T13:09:38.341206+00:00",
"contact": null,
"deal": null,
"company_ref": null,
"is_overdue": null
}
],
"total": 10
}/tasksCreate a task
Body
titlestringrequired- What to do.
descriptionstring- Details.
typestringtodo,call,email,meeting,linkedinorfollow_up.prioritystringlow,mediumorhigh.statusstringopenordone.due_atdatetime- Due date and time (ISO 8601).
owner_emailstring- Who does it. Default: the key’s user.
lead_iduuid- Contact the task is about.
deal_iduuid- Deal the task is about.
company_iduuid- Company the task is about.
sourcestring- Where the task comes from (
api,zapier…).
curl -X POST "https://meetzy.me/api/v1/tasks" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "title": "Call Camille about the pricing", "type": "call", "priority": "high", "due_at": "2026-10-08T09:30:00+02:00", "lead_id": "e43414d6-f56f-42be-a64c-a836d6015efc" }'
const res = await fetch("https://meetzy.me/api/v1/tasks", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "title": "Call Camille about the pricing", "type": "call", "priority": "high", "due_at": "2026-10-08T09:30:00+02:00", "lead_id": "e43414d6-f56f-42be-a64c-a836d6015efc" }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/tasks",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"title": "Call Camille about the pricing",
"type": "call",
"priority": "high",
"due_at": "2026-10-08T09:30:00+02:00",
"lead_id": "e43414d6-f56f-42be-a64c-a836d6015efc"
},
)
data = res.json(){
"id": "c1538a0c-ffff-4229-a25a-9f84ae863bc8",
"user_from": "acme",
"title": "Call Camille",
"description": null,
"type": "call",
"priority": "medium",
"status": "open",
"due_at": "2026-10-08T13:22:53.656+00:00",
"completed_at": null,
"owner_email": "olivia@acme.com",
"lead_id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"deal_id": null,
"company_id": null,
"sequence_enrollment_id": null,
"source": "manual",
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:22:54.323282+00:00",
"updated_at": "2026-10-07T13:22:54.323282+00:00"
}/tasks/bulkCreate many tasks
Creates several tasks in one call (each needs a title). Returns how many were created.
Body
tasksobject[]required- Tasks, same fields as
POST /tasks.
curl -X POST "https://meetzy.me/api/v1/tasks/bulk" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "tasks": [ { "title": "Send the deck", "lead_id": "e43414d6-f56f-42be-a64c-a836d6015efc" }, { "title": "Book the onsite", "type": "meeting", "due_at": "2026-10-15T10:00:00Z" } ] }'
const res = await fetch("https://meetzy.me/api/v1/tasks/bulk", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "tasks": [ { "title": "Send the deck", "lead_id": "e43414d6-f56f-42be-a64c-a836d6015efc" }, { "title": "Book the onsite", "type": "meeting", "due_at": "2026-10-15T10:00:00Z" } ] }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/tasks/bulk",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"tasks": [
{
"title": "Send the deck",
"lead_id": "e43414d6-f56f-42be-a64c-a836d6015efc"
},
{
"title": "Book the onsite",
"type": "meeting",
"due_at": "2026-10-15T10:00:00Z"
}
]
},
)
data = res.json(){
"created": 1
}/tasks/{id}Update or complete a task
Set status: "done" to complete it: the completion time is saved and an activity is logged (a call for call tasks, a meeting for meetings) with outcome and completion_note. status: "open" reopens it.
Path parameters
idstringrequired- Id of the record (UUID).
Body
titlestring- What to do.
descriptionstring- Details.
typestringtodo,call,email,meeting,linkedinorfollow_up.prioritystringlow,mediumorhigh.statusstringopenordone.due_atdatetime- Due date and time (ISO 8601).
owner_emailstring- Who does it. Default: the key’s user.
lead_iduuid- Contact the task is about.
deal_iduuid- Deal the task is about.
company_iduuid- Company the task is about.
sourcestring- Where the task comes from (
api,zapier…). outcomestring- When completing a call:
connected,positive,negative,scheduled,no_answer,voicemail,busy,wrong_number. completion_notestring- When completing: what happened.
curl -X PATCH "https://meetzy.me/api/v1/tasks/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "status": "done", "outcome": "scheduled", "completion_note": "Demo booked for Thursday" }'
const res = await fetch("https://meetzy.me/api/v1/tasks/e43414d6-f56f-42be-a64c-a836d6015efc", { method: "PATCH", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "status": "done", "outcome": "scheduled", "completion_note": "Demo booked for Thursday" }), }); const data = await res.json();
import os, requests
res = requests.patch(
"https://meetzy.me/api/v1/tasks/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"status": "done",
"outcome": "scheduled",
"completion_note": "Demo booked for Thursday"
},
)
data = res.json(){
"id": "c1538a0c-ffff-4229-a25a-9f84ae863bc8",
"user_from": "acme",
"title": "Call Camille",
"description": null,
"type": "call",
"priority": "medium",
"status": "done",
"due_at": "2026-10-08T13:22:53.656+00:00",
"completed_at": "2026-10-07T13:22:56.47+00:00",
"owner_email": "olivia@acme.com",
"lead_id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"deal_id": null,
"company_id": null,
"sequence_enrollment_id": null,
"source": "manual",
"created_by": "olivia@acme.com",
"created_at": "2026-10-07T13:22:54.323282+00:00",
"updated_at": "2026-10-07T13:22:56.496051+00:00"
}curl -X DELETE "https://meetzy.me/api/v1/tasks/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/tasks/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/tasks/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"deleted": true
}/activitiesList activities (timeline)
Timeline entries, newest first. Without a contact / deal / company filter, the feed also includes notes and stage moves made on the CRM board.
Query parameters
lead_iduuid- Activities of a contact.
deal_iduuid- Activities of a deal.
company_iduuid- Activities of a company.
typestringnote,call,meeting,email,linkedin,whatsapp,stage_change,task,quoteorsystem.actorstring- Who logged it (email).
sincedatetime- Only activities after this date.
include_crmstringfalseto leave out CRM board notes and moves.limitinteger- Default 100.
curl "https://meetzy.me/api/v1/activities?type=call&since=2026-10-01" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/activities?type=call&since=2026-10-01", {
headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}` },
});
const data = await res.json();import os, requests
res = requests.get(
"https://meetzy.me/api/v1/activities?type=call&since=2026-10-01",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"activities": [
{
"id": "238b537f-c5c1-43c6-a882-dc25d67c8527",
"user_from": "acme",
"type": "call",
"subject": "Discovery",
"body": null,
"outcome": "connected",
"direction": null,
"duration_sec": 600,
"occurred_at": "2026-10-07T13:22:57.247+00:00",
"actor_email": "olivia@acme.com",
"lead_id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"deal_id": null,
"company_id": null,
"metadata": {},
"created_at": "2026-10-07T13:22:57.274612+00:00"
},
{
"id": "26868ee3-f0fb-4302-afc3-9a32952648bd",
"user_from": "acme",
"type": "call",
"subject": "Completed: Call Camille",
"body": null,
"outcome": "positive",
"direction": null,
"duration_sec": null,
"occurred_at": "2026-10-07T13:22:56.515+00:00",
"actor_email": "olivia@acme.com",
"lead_id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"deal_id": null,
"company_id": null,
"metadata": {
"task_id": "c1538a0c-ffff-4229-a25a-9f84ae863bc8",
"task_type": "call"
},
"created_at": "2026-10-07T13:22:56.539869+00:00"
}
]
}/activitiesLog an activity
Writes an entry on the timeline of a contact, deal and/or company. Calls, meetings, emails and messages also update “last contacted” on the contact and “last activity” on the deal and company — the way to bring calls from a phone system or meetings from a calendar into Meetzy.
Body
typestringrequired- Activity type (see
GET /activities). subjectstring- Title.
bodystring- Details.
outcomestring- Result (for calls, see task outcomes).
directionstringinboundoroutbound.duration_secinteger- Duration in seconds.
occurred_atdatetime- When it happened. Default: now.
actor_emailstring- Who did it. Default: the key’s user.
lead_iduuid- Contact.
deal_iduuid- Deal.
company_iduuid- Company.
metadataobject- Anything else (recording URL, call id…).
curl -X POST "https://meetzy.me/api/v1/activities" \ -H "Authorization: Bearer $MEETZY_API_KEY" \ -H "Content-Type: application/json" \ -d '{ "type": "call", "direction": "outbound", "subject": "Discovery call", "outcome": "connected", "duration_sec": 640, "lead_id": "e43414d6-f56f-42be-a64c-a836d6015efc", "metadata": { "recording_url": "https://calls.example.com/r/8812" } }'
const res = await fetch("https://meetzy.me/api/v1/activities", { method: "POST", headers: { Authorization: `Bearer ${process.env.MEETZY_API_KEY}`, "Content-Type": "application/json" }, body: JSON.stringify({ "type": "call", "direction": "outbound", "subject": "Discovery call", "outcome": "connected", "duration_sec": 640, "lead_id": "e43414d6-f56f-42be-a64c-a836d6015efc", "metadata": { "recording_url": "https://calls.example.com/r/8812" } }), }); const data = await res.json();
import os, requests
res = requests.post(
"https://meetzy.me/api/v1/activities",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
json={
"type": "call",
"direction": "outbound",
"subject": "Discovery call",
"outcome": "connected",
"duration_sec": 640,
"lead_id": "e43414d6-f56f-42be-a64c-a836d6015efc",
"metadata": {
"recording_url": "https://calls.example.com/r/8812"
}
},
)
data = res.json(){
"id": "238b537f-c5c1-43c6-a882-dc25d67c8527",
"user_from": "acme",
"type": "call",
"subject": "Discovery",
"body": null,
"outcome": "connected",
"direction": null,
"duration_sec": 600,
"occurred_at": "2026-10-07T13:22:57.247+00:00",
"actor_email": "olivia@acme.com",
"lead_id": "8028ff76-1da4-451f-a0e7-dd91db772c20",
"deal_id": null,
"company_id": null,
"metadata": {},
"created_at": "2026-10-07T13:22:57.274612+00:00"
}/activities/{id}Delete an activity
Path parameters
idstringrequired- Id of the record (UUID).
curl -X DELETE "https://meetzy.me/api/v1/activities/e43414d6-f56f-42be-a64c-a836d6015efc" \ -H "Authorization: Bearer $MEETZY_API_KEY"
const res = await fetch("https://meetzy.me/api/v1/activities/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/activities/e43414d6-f56f-42be-a64c-a836d6015efc",
headers={"Authorization": f"Bearer {os.environ['MEETZY_API_KEY']}"},
)
data = res.json(){
"deleted": true
}