Tasks

Record-scoped tasks can be created, listed, updated, marked done, and commented on via the public API. Standalone tasks (not attached to a record) remain session-only — API keys trying to reach them get Task is not on a record.

All endpoints require an API key with read access to the task's workspace. Write operations additionally require the key to not be read-only.

Create a task on a record

POST /api/tasks/onRecord/<table_id>/<record_id>/create

Request body

{
  "title": "Send proposal",
  "details": "Draft is attached to the record",
  "assignee_email": "sam@example.com",
  "due_date": "2026-05-01",
  "due_time": "09:00",
  "reminder_offset_mins": 30
}
Field Type Notes
title string Required.
details string Optional long text.
assignee_user_id int Takes precedence if both id and email are given.
assignee_email string Must be a current space member.
due_date YYYY-MM-DD Optional.
due_time HH:MM Optional, only valid alongside due_date.
reminder_offset_mins int Minutes before the due datetime. Requires due_time.
reminder_time HH:MM Time of day on due_date (date-only tasks). Mutually exclusive with reminder_offset_mins.

Response

{
  "id": 19,
  "creator_user_id": 4,
  "assignee_user_id": 9,
  "account_id": 1,
  "space_id": 2,
  "table_id": 101,
  "record_id": 42,
  "title": "Send proposal",
  "details": "Draft is attached to the record",
  "due_date": "2026-05-01",
  "due_time": "09:00:00",
  "reminder_offset_mins": 30,
  "reminder_time": null,
  "reminder_at": "2026-05-01 08:30:00",
  "reminder_sent_at": null,
  "status": "open",
  "completed_at": null,
  "completed_by_user_id": null,
  "created_at": "2026-04-15 14:32:01",
  "updated_at": "2026-04-15 14:32:01"
}

List tasks on a record

GET /api/tasks/onRecord/<table_id>/<record_id>/list

Query parameters

  • statusopen or done. Omit for all.
  • limit (default 50, max 200)
  • offset (default 0)

Get a single task

GET /api/task/<task_id>/get

Returns the task row plus comment_count, subscribers (user ids), subscribed (boolean for the calling key's owning user), table_name, record_title, and a recent_comments array with the latest 20 comments.

Update a task

POST /api/task/<task_id>/update

Any of title, details, due_date, due_time, reminder_offset_mins, reminder_time, assignee_user_id, assignee_email. Reassignment fires a single TASK_ASSIGNED notification to the new assignee.

Delete a task

POST /api/task/<task_id>/delete

Mark done / undone

POST /api/task/<task_id>/markDone
POST /api/task/<task_id>/markUndone

Both return {"ok": true|false, "status": "done"|"open"}. ok is false when the call is idempotent (e.g. marking an already-done task done again).

Subscribe / unsubscribe

POST /api/task/<task_id>/subscribe
POST /api/task/<task_id>/unsubscribe

Comments

GET  /api/task/<task_id>/comments/get        (limit, offset)
POST /api/task/<task_id>/comments/create     {content}
POST /api/task/<task_id>/comment/<comment_id>/update   {content}
POST /api/task/<task_id>/comment/<comment_id>/delete

Comments created via an API key have user_id = 0, user_name = "API: <key name>", and api_key_id set — same convention as record comments. Authors can edit their own comments for 15 minutes after creation.

Permission errors

Error Meaning
Task is not on a record API key tried to reach a standalone task.
API key not authorized for this workspace Key's space whitelist excludes this task's space.
API key is read-only Read-only key attempted a write operation.
Not authorized Record-linked task whose space the key cannot read, or non-creator/non-assignee trying to edit.