API reference
Tasks
Tasks are the work to be done: a title, a status, dates, an owner and assignees, optionally linked to a contact, a deal or a project. Every plan includes them.
- Scopes
tasks:read·tasks:write- Plan
- Every plan
- Events
task.*
A task lives in a task space — a board with its own columns. status is the simple, portable state; status_category tells you what the task’s column means on its board.
Attributes
Unique identifier of the task.
- titlestring
What needs doing.
More detail.
- statusenum
Progress. Writing it also moves the task to a matching column on its board.
One of
todoin_progressdone The kind of board column the task is in. Boards can have their own columns; this tells you what a column means.
nullwhen the task is not on a board column.One of
backlogunstartedstartedcompletedcanceledPriority:
low,medium,high, or one of the workspace’s own priority keys;nullfor none.When the task is due (UTC). A date alone (
YYYY-MM-DD) is accepted and stored as midnight UTC.When work starts (UTC). A date alone is accepted, as for
due_date.When the status became
done.The project the task belongs to.
The task space (board) that holds the task. Defaults to the workspace’s default space.
The parent task, for subtasks.
A related contact.
A related deal.
- owner_iduuid
The user who owns the record. On create it defaults to the API key’s owner. See Users.
- assignee_idsuuid[]
Users the task is assigned to. Writing it replaces the list.
- custom_fieldsobject
Custom-field values keyed by field key. Updates merge into the stored values; send
nullfor a key to clear it. See Custom fields. When the record was created (UTC).
When the record last changed (UTC).
{
"id": "c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26",
"title": "Send the renewal proposal",
"description": "Two options: annual at 40 seats, or a 24-month term with onboarding included.",
"status": "in_progress",
"status_category": "started",
"priority": "high",
"due_date": "2026-10-15T15:00:00Z",
"start_date": "2026-10-10T08:00:00Z",
"completed_at": null,
"project_id": null,
"space_id": "e1b7d3f9-5a2c-4e8b-9d6f-3a5c7e9b1d48",
"parent_task_id": null,
"contact_id": "3f1c9a7e-2b4d-4c8e-9f60-1a2b3c4d5e6f",
"deal_id": "8f2d6c1a-4b7e-4f0a-9c3d-2e1b5a6f7c80",
"owner_id": "0c4f8e2a-7b3d-4a1f-9e6c-5d2b8a1f3e47",
"assignee_ids": [
"6a2d9c4e-1f8b-4e3a-b7d5-9c0e2f4a6b18"
],
"custom_fields": {},
"created_at": "2026-10-09T15:42:10Z",
"updated_at": "2026-10-10T08:05:37Z"
}Boards can have columns of their own, such as “In review” or “Blocked”. The API speaks three statuses, and keeps the board in step: writing status moves the task to a matching column, and moving it on the board changes status.
status | Board column kind (status_category) |
|---|---|
todo | backlog or unstarted |
in_progress | started |
done | completed or canceled |
When a task becomes done — its status set to done, or the task moved to a done column — completed_at is filled and Nextora sends task.completed.
A subtask is a task with parent_task_id. Set it when you create the subtask; it cannot change afterwards. Lists include subtasks — filter with parent_task_id=null for top-level tasks only, or parent_task_id=<id> for the subtasks of one task.
curl -G https://acme.nextora.co/api/v1/tasks \
-H "Authorization: Bearer $NEXTORA_API_KEY" \
-d parent_task_id=c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26GET/api/v1/tasks
Requires tasks:read
Returns the tasks the key’s owner can see, newest first — subtasks included. Filter on the fields below, combine them with q, and follow meta.next_cursor for more.
Query parameters
- limitinteger
Page size, from 1 to 100.
Default
50 - cursorstring
The
meta.next_cursorof the previous page. Omit it for the first page. - qstring
Search by title.
- sortenum
The field to sort by. Any other value is a
400 validation_failed.One of
created_atupdated_attitledue_datestart_dateprioritycompleted_atDefault
created_at - orderenum
Sort direction.
One of
ascdescDefault
desc - filterstring (JSON)
An advanced filter: conditions joined with
andoror. See the JSON filter.
Filters
Add ?field=value or ?field[operator]=value — operators.
- statusenum
Exact match, or several values with
[in].One of
todoin_progressdone - prioritystring
Exact match.
[like]matches a case-insensitive substring. - owner_iduuid
Exact match, or several IDs with
[in]. - contact_iduuid
Exact match, or several IDs with
[in]. - deal_iduuid
Exact match, or several IDs with
[in]. - project_iduuid
Exact match, or several IDs with
[in]. - space_iduuid
Exact match, or several IDs with
[in]. - parent_task_iduuid
nullreturns top-level tasks only. Exact match, or several IDs with[in]. - due_datedate-time
An ISO 8601 timestamp. Use a range:
[gt],[gte],[lt],[lte]. - start_datedate-time
An ISO 8601 timestamp. Use a range:
[gt],[gte],[lt],[lte]. - created_atdate-time
An ISO 8601 timestamp. Use a range:
[gt],[gte],[lt],[lte]. - updated_atdate-time
An ISO 8601 timestamp. Use a range:
[gt],[gte],[lt],[lte].
Returns
A list of task objects and meta. meta.next_cursor is null on the last page.
curl -G https://acme.nextora.co/api/v1/tasks \
-H "Authorization: Bearer $NEXTORA_API_KEY" \
-d owner_id=0c4f8e2a-7b3d-4a1f-9e6c-5d2b8a1f3e47 \
-d status=in_progress \
-d 'due_date[lte]=2026-10-17' \
-d sort=due_date \
-d order=asc{
"data": [
{
"id": "c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26",
"title": "Send the renewal proposal",
"description": "Two options: annual at 40 seats, or a 24-month term with onboarding included.",
"status": "in_progress",
"status_category": "started",
"priority": "high",
"due_date": "2026-10-15T15:00:00Z",
"start_date": "2026-10-10T08:00:00Z",
"completed_at": null,
"project_id": null,
"space_id": "e1b7d3f9-5a2c-4e8b-9d6f-3a5c7e9b1d48",
"parent_task_id": null,
"contact_id": "3f1c9a7e-2b4d-4c8e-9f60-1a2b3c4d5e6f",
"deal_id": "8f2d6c1a-4b7e-4f0a-9c3d-2e1b5a6f7c80",
"owner_id": "0c4f8e2a-7b3d-4a1f-9e6c-5d2b8a1f3e47",
"assignee_ids": [
"6a2d9c4e-1f8b-4e3a-b7d5-9c0e2f4a6b18"
],
"custom_fields": {},
"created_at": "2026-10-09T15:42:10Z",
"updated_at": "2026-10-10T08:05:37Z"
}
],
"meta": {
"limit": 50,
"has_more": false,
"next_cursor": null
}
}POST/api/v1/tasks
Requires tasks:write
Creates a task. It goes through the same path as the app, so workflows, the activity log and webhooks behave as they do for a task created by hand.
Body parameters
What needs doing.
More detail.
- statusenum
Progress. Writing it also moves the task to a matching column on its board.
One of
todoin_progressdoneDefault
todo Priority:
low,medium,high, or one of the workspace’s own priority keys;nullfor none.When the task is due (UTC). A date alone (
YYYY-MM-DD) is accepted and stored as midnight UTC.When work starts (UTC). A date alone is accepted, as for
due_date.The project the task belongs to.
Makes the task a subtask of this task. Set on create only.
The task space (board) that holds the task. Defaults to the workspace’s default space.
A related contact.
A related deal.
- owner_iduuid
The user who owns the record. On create it defaults to the API key’s owner. See Users.
- assignee_idsuuid[]
Users the task is assigned to. Writing it replaces the list.
Returns
The new task, with 201 Created.
curl -X POST https://acme.nextora.co/api/v1/tasks \
-H "Authorization: Bearer $NEXTORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"title": "Send the renewal proposal",
"description": "Two options: annual at 40 seats, or a 24-month term with onboarding included.",
"priority": "high",
"due_date": "2026-10-15",
"start_date": "2026-10-10",
"contact_id": "3f1c9a7e-2b4d-4c8e-9f60-1a2b3c4d5e6f",
"deal_id": "8f2d6c1a-4b7e-4f0a-9c3d-2e1b5a6f7c80",
"assignee_ids": [
"6a2d9c4e-1f8b-4e3a-b7d5-9c0e2f4a6b18"
]
}'{
"data": {
"id": "c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26",
"title": "Send the renewal proposal",
"description": "Two options: annual at 40 seats, or a 24-month term with onboarding included.",
"status": "todo",
"status_category": "unstarted",
"priority": "high",
"due_date": "2026-10-15T15:00:00Z",
"start_date": "2026-10-10T08:00:00Z",
"completed_at": null,
"project_id": null,
"space_id": "e1b7d3f9-5a2c-4e8b-9d6f-3a5c7e9b1d48",
"parent_task_id": null,
"contact_id": "3f1c9a7e-2b4d-4c8e-9f60-1a2b3c4d5e6f",
"deal_id": "8f2d6c1a-4b7e-4f0a-9c3d-2e1b5a6f7c80",
"owner_id": "0c4f8e2a-7b3d-4a1f-9e6c-5d2b8a1f3e47",
"assignee_ids": [
"6a2d9c4e-1f8b-4e3a-b7d5-9c0e2f4a6b18"
],
"custom_fields": {},
"created_at": "2026-10-10T08:05:37Z",
"updated_at": "2026-10-10T08:05:37Z"
}
}GET/api/v1/tasks/{id}
Requires tasks:read
Returns one task by ID.
Path parameters
The task’s ID.
Returns
The task. 404 not_found when it does not exist or the key’s owner cannot see it.
curl https://acme.nextora.co/api/v1/tasks/c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26 \
-H "Authorization: Bearer $NEXTORA_API_KEY"{
"data": {
"id": "c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26",
"title": "Send the renewal proposal",
"description": "Two options: annual at 40 seats, or a 24-month term with onboarding included.",
"status": "in_progress",
"status_category": "started",
"priority": "high",
"due_date": "2026-10-15T15:00:00Z",
"start_date": "2026-10-10T08:00:00Z",
"completed_at": null,
"project_id": null,
"space_id": "e1b7d3f9-5a2c-4e8b-9d6f-3a5c7e9b1d48",
"parent_task_id": null,
"contact_id": "3f1c9a7e-2b4d-4c8e-9f60-1a2b3c4d5e6f",
"deal_id": "8f2d6c1a-4b7e-4f0a-9c3d-2e1b5a6f7c80",
"owner_id": "0c4f8e2a-7b3d-4a1f-9e6c-5d2b8a1f3e47",
"assignee_ids": [
"6a2d9c4e-1f8b-4e3a-b7d5-9c0e2f4a6b18"
],
"custom_fields": {},
"created_at": "2026-10-09T15:42:10Z",
"updated_at": "2026-10-10T08:05:37Z"
}
}PATCH/api/v1/tasks/{id}
Requires tasks:write
Changes the fields you send and leaves the rest as they are. PUT does the same as PATCH.
Path parameters
The task’s ID.
Body parameters
- titlestring
What needs doing.
More detail.
- statusenum
Progress. Writing it also moves the task to a matching column on its board.
One of
todoin_progressdone Priority:
low,medium,high, or one of the workspace’s own priority keys;nullfor none.When the task is due (UTC). A date alone (
YYYY-MM-DD) is accepted and stored as midnight UTC.When work starts (UTC). A date alone is accepted, as for
due_date.The project the task belongs to.
The task space (board) that holds the task. Defaults to the workspace’s default space.
A related contact.
A related deal.
- owner_iduuid
The user who owns the record. On create it defaults to the API key’s owner. See Users.
- assignee_idsuuid[]
Users the task is assigned to. Writing it replaces the list.
Returns
The updated task.
curl -X PATCH https://acme.nextora.co/api/v1/tasks/c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26 \
-H "Authorization: Bearer $NEXTORA_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"status": "done"
}'{
"data": {
"id": "c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26",
"title": "Send the renewal proposal",
"description": "Two options: annual at 40 seats, or a 24-month term with onboarding included.",
"status": "done",
"status_category": "completed",
"priority": "high",
"due_date": "2026-10-15T15:00:00Z",
"start_date": "2026-10-10T08:00:00Z",
"completed_at": "2026-10-10T16:20:12Z",
"project_id": null,
"space_id": "e1b7d3f9-5a2c-4e8b-9d6f-3a5c7e9b1d48",
"parent_task_id": null,
"contact_id": "3f1c9a7e-2b4d-4c8e-9f60-1a2b3c4d5e6f",
"deal_id": "8f2d6c1a-4b7e-4f0a-9c3d-2e1b5a6f7c80",
"owner_id": "0c4f8e2a-7b3d-4a1f-9e6c-5d2b8a1f3e47",
"assignee_ids": [
"6a2d9c4e-1f8b-4e3a-b7d5-9c0e2f4a6b18"
],
"custom_fields": {},
"created_at": "2026-10-09T15:42:10Z",
"updated_at": "2026-10-10T16:20:12Z"
}
}DELETE/api/v1/tasks/{id}
Requires tasks:write
Moves the task to the workspace Trash, as deleting it in the app does. It disappears from lists; restore it to bring it back.
Path parameters
The task’s ID.
Returns
{ "data": { "id": "…", "deleted": true } }. 404 not_found when there is nothing to delete.
curl -X DELETE https://acme.nextora.co/api/v1/tasks/c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26 \
-H "Authorization: Bearer $NEXTORA_API_KEY"{
"data": {
"id": "c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26",
"deleted": true
}
}POST/api/v1/tasks/{id}/restore
Requires tasks:write
Brings a task back from Trash, with its fields and links as they were.
Path parameters
The task’s ID.
Returns
The restored task.
curl -X POST https://acme.nextora.co/api/v1/tasks/c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26/restore \
-H "Authorization: Bearer $NEXTORA_API_KEY"{
"data": {
"id": "c5a3e7f1-9d2b-4c6a-8e4f-1b3d5f7a9c26",
"title": "Send the renewal proposal",
"description": "Two options: annual at 40 seats, or a 24-month term with onboarding included.",
"status": "in_progress",
"status_category": "started",
"priority": "high",
"due_date": "2026-10-15T15:00:00Z",
"start_date": "2026-10-10T08:00:00Z",
"completed_at": null,
"project_id": null,
"space_id": "e1b7d3f9-5a2c-4e8b-9d6f-3a5c7e9b1d48",
"parent_task_id": null,
"contact_id": "3f1c9a7e-2b4d-4c8e-9f60-1a2b3c4d5e6f",
"deal_id": "8f2d6c1a-4b7e-4f0a-9c3d-2e1b5a6f7c80",
"owner_id": "0c4f8e2a-7b3d-4a1f-9e6c-5d2b8a1f3e47",
"assignee_ids": [
"6a2d9c4e-1f8b-4e3a-b7d5-9c0e2f4a6b18"
],
"custom_fields": {},
"created_at": "2026-10-09T15:42:10Z",
"updated_at": "2026-10-10T08:05:37Z"
}
}