Tasks and time blocks
A task list with protected time on every calendar.
Base URL https://api.meetsynced.com/functions/v1/api. Each endpoint calls the MCP tool named below and behaves exactly like it.
GET/tasks
Tasks with their status and time blocks
List my tasks with their status (todo, scheduled, done) and their time blocks, including which calendars each block was written to. Done tasks are left out unless include_done is true.
MCP tool: list_tasks
Query parameters
| Parameter | Type | Description |
|---|---|---|
include_done | boolean | Include completed tasks (default false) |
curl "https://api.meetsynced.com/functions/v1/api/tasks" \
-H "x-api-key: $SYNCED_API_KEY"POST/tasks
Add a task
Add a task to my to-do list. It has no time on the calendar until schedule_task gives it a block.
MCP tool: create_task
JSON body
| Parameter | Type | Description |
|---|---|---|
titlerequired | string | What the task is, e.g. 'Write Q1 board deck' |
notes | string | Optional details. Shown in the description of its calendar blocks. |
duration_minutes | number | How long the task takes, 5 to 720 minutes. Default 60. Used as the block length when scheduling. |
due_date | string | Optional due date, YYYY-MM-DD |
project | string | Optional project or list name to group tasks |
curl -X POST https://api.meetsynced.com/functions/v1/api/tasks \
-H "x-api-key: $SYNCED_API_KEY" \
-H "content-type: application/json" \
-d '{"title":"…"}'POST/tasks/capture
Add a task from a sentence and suggest times
Capture something the user needs time for and suggest when to do it. Pass the user's own words as `text` (e.g. 'write the Q1 deck by Friday, 2h') and Synced reads the title, length and due date, or pass the fields yourself. Creates the task and returns free times before its due date; nothing is put on the calendar. Show the suggestions, then call schedule_task with the chosen start. If `kind` comes back 'meeting', the text sounds like a meeting with people: ask who, and use find_meeting_time instead (the task is not created).
MCP tool: capture_task
JSON body
| Parameter | Type | Description |
|---|---|---|
text | string | What the user said, in their words |
title | string | What the task is, e.g. 'Write Q1 board deck' |
notes | string | Optional details. Shown in the description of its calendar blocks. |
duration_minutes | number | How long the task takes, 5 to 720 minutes. Default 60. Used as the block length when scheduling. |
due_date | string | Optional due date, YYYY-MM-DD |
project | string | Optional project or list name to group tasks |
suggestions | number | How many free times to return, default 3, max 20 |
curl -X POST https://api.meetsynced.com/functions/v1/api/tasks/capture \
-H "x-api-key: $SYNCED_API_KEY" \
-H "content-type: application/json" \
-d '{}'POST/tasks/plan
Plan open tasks (dry run, then commit)
Lay out my open tasks in free time: earliest due date first, each before it's due, none overlapping each other or anything on my calendar, inside working hours. Without commit, nothing is written: it returns the plan and a plan_id. Show the plan to the user; when they agree, call again with commit: true and that plan_id. Committing twice is safe (the same plan never books twice), and any item whose time has since become busy is skipped and reported. At most 10 tasks per plan.
MCP tool: plan_tasks
JSON body
| Parameter | Type | Description |
|---|---|---|
task_ids | string[] | Only these tasks. Default: every task not yet scheduled. |
from | string | First day, YYYY-MM-DD. Default today. |
to | string | Last day, YYYY-MM-DD. Default a week after from, at most two weeks. |
commit | boolean | Write the plan given by plan_id. Only after the user agreed to it. |
plan_id | string | The plan_id from a dry run, required with commit |
curl -X POST https://api.meetsynced.com/functions/v1/api/tasks/plan \
-H "x-api-key: $SYNCED_API_KEY" \
-H "content-type: application/json" \
-d '{}'PATCH/tasks/:id
Change a task
Change a task's title, notes, duration, due date or project. A new title is also applied to its upcoming calendar blocks.
MCP tool: update_task · :id is the task_id
JSON body
| Parameter | Type | Description |
|---|---|---|
title | string | What the task is, e.g. 'Write Q1 board deck' |
notes | string | Optional details. Shown in the description of its calendar blocks. |
duration_minutes | number | How long the task takes, 5 to 720 minutes. Default 60. Used as the block length when scheduling. |
due_date | string | Optional due date, YYYY-MM-DD |
project | string | Optional project or list name to group tasks |
curl -X PATCH https://api.meetsynced.com/functions/v1/api/tasks/ID \
-H "x-api-key: $SYNCED_API_KEY" \
-H "content-type: application/json" \
-d '{}'DELETE/tasks/:id
Delete a task and its upcoming blocks
Delete a task and remove its upcoming time blocks from every calendar. Cannot be undone.
MCP tool: delete_task · :id is the task_id
curl -X DELETE "https://api.meetsynced.com/functions/v1/api/tasks/ID" \
-H "x-api-key: $SYNCED_API_KEY"POST/tasks/:id/complete
Mark a task done
Mark a task done. Its upcoming time blocks are removed from every calendar unless keep_future_blocks is true; past blocks stay as a record.
MCP tool: complete_task · :id is the task_id
JSON body
| Parameter | Type | Description |
|---|---|---|
keep_future_blocks | boolean | Keep upcoming blocks on the calendar (default false) |
curl -X POST https://api.meetsynced.com/functions/v1/api/tasks/ID/complete \
-H "x-api-key: $SYNCED_API_KEY" \
-H "content-type: application/json" \
-d '{}'GET/tasks/:id/suggestions
Free times for a task
Suggest free times for a task, inside my working hours and avoiding busy time on all my calendars. The length is the task's duration. Returns start/end as ISO (pass one to schedule_task) plus local times in my timezone.
MCP tool: suggest_task_times · :id is the task_id
Query parameters
| Parameter | Type | Description |
|---|---|---|
from | string | First day to look, YYYY-MM-DD. Default today. |
to | string | Last day to look, YYYY-MM-DD. Default a week after from. |
preferred_time | "morning" | "afternoon" | "evening" | "any" | Preferred part of the day |
count | number | How many suggestions, default 5, max 20 |
curl "https://api.meetsynced.com/functions/v1/api/tasks/ID/suggestions" \
-H "x-api-key: $SYNCED_API_KEY"POST/tasks/:id/schedule
Block time for a task
Block time for a task on my calendars. Writes one private, busy event to every account that allows time blocks (set in Settings → Calendars), or only to calendar_accounts when given. If start is omitted, nothing is scheduled: free-time suggestions are returned instead, so confirm one with the user and call again with its start. The result reports each calendar copy; failed copies can be retried with retry_task_block.
MCP tool: schedule_task · :id is the task_id
JSON body
| Parameter | Type | Description |
|---|---|---|
start | string | When the block starts, ISO date-time with offset (e.g. a suggestion's start). Omit to get suggestions. |
end | string | Optional ISO end. Default start + the task's duration. |
calendar_accounts | string[] | Optional account emails to write the block to, instead of the Settings default |
busy | boolean | Show as busy (default true). False makes the block free time. |
request_id | string | Optional id for this request. Repeating a call with the same request_id returns the block already made instead of booking twice. |
curl -X POST https://api.meetsynced.com/functions/v1/api/tasks/ID/schedule \
-H "x-api-key: $SYNCED_API_KEY" \
-H "content-type: application/json" \
-d '{}'PATCH/task-blocks/:id
Move a time block
Move a task's time block on every calendar it was written to.
MCP tool: reschedule_task_block · :id is the block_id
JSON body
| Parameter | Type | Description |
|---|---|---|
startrequired | string | New start, ISO date-time with offset |
end | string | Optional new end. Default keeps the block's length. |
curl -X PATCH https://api.meetsynced.com/functions/v1/api/task-blocks/ID \
-H "x-api-key: $SYNCED_API_KEY" \
-H "content-type: application/json" \
-d '{"start":"…"}'DELETE/task-blocks/:id
Remove a time block
Remove a task's time block from every calendar. The task stays on the list; with no upcoming blocks left it goes back to 'todo'.
MCP tool: unschedule_task_block · :id is the block_id
curl -X DELETE "https://api.meetsynced.com/functions/v1/api/task-blocks/ID" \
-H "x-api-key: $SYNCED_API_KEY"POST/task-blocks/:id/retry
Retry calendar copies that failed
Write the calendar copies of a time block that failed earlier (schedule_task reports failures per account).
MCP tool: retry_task_block · :id is the block_id
curl -X POST https://api.meetsynced.com/functions/v1/api/task-blocks/ID/retry \
-H "x-api-key: $SYNCED_API_KEY" \
-H "content-type: application/json" \
-d '{}'