A unit of work in a project. Carries name, description, status, assignees, labels, subscribers, due/start dates, parent task (for subtasks), list, archived flag, banner image and embed URL. Project-scoped — every task on this API lives inside a project, and the project is the security boundary; personal (project-less) tasks are not addressable here. Deletes are permanent: there is no trash or restore for a task. Setting assignees, labels or subscribers when you update a task replaces the whole set — use the matching sub-resource route, such as POST /tasks/{id}/assignees, to add or remove one at a time.
List Tasks
List tasks. Returns a paginated envelope (data, total, limit, hasMore, nextCursor). Filterable by 22 fields. Ordered by order unless you pass sort.
Required scope: tasks:read
query Parameters
projectIdRestrict the list to one project. Omit to list tasks across every project you can access.
scopeWhich tasks a workspace-wide list returns: project (rows that belong to a project you can access), personal (your own rows, which belong to no project), or both. Ignored when you pass projectId. Default: both.
sortField to sort by. Prefix with - for descending (-createdAt); a createdAt:desc / createdAt:asc suffix works too, but never both markers at once. Default: order. Listing without projectId orders by -updatedAt instead.
cursorOpaque cursor for the next page (the envelope nextCursor).
limitItems per page (1–200, default 50). A larger value is clamped to the cap rather than rejected, so always follow nextCursor instead of assuming one page held everything.
includeTotalWhen true, the response envelope includes the total number of matching rows. Omit it for cheaper pagination.
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
name[eq]Filter where name equals.
name[contains]Filter where name contains.
name[startsWith]Filter where name starts with.
niceId[eq]Filter where niceId equals.
niceId[in]Filter where niceId is one of (comma-separated list).
archived[eq]Filter where archived equals.
completed[eq]Filter where completed equals.
projectId[eq]Filter where projectId equals.
projectId[in]Filter where projectId is one of (comma-separated list).
listId[eq]Filter where listId equals.
listId[in]Filter where listId is one of (comma-separated list).
statusId[eq]Filter where statusId equals.
statusId[in]Filter where statusId is one of (comma-separated list).
parentTaskId[eq]Filter where parentTaskId equals.
parentTaskId[in]Filter where parentTaskId is one of (comma-separated list).
dependencyId[eq]Filter where dependencyId equals.
dependencyId[in]Filter where dependencyId is one of (comma-separated list).
recurringRuleId[eq]Filter where recurringRuleId equals.
recurringRuleId[in]Filter where recurringRuleId is one of (comma-separated list).
createdById[eq]Filter where createdById equals.
createdById[in]Filter where createdById is one of (comma-separated list).
labelId[eq]Filter where labelId equals.
labelId[in]Filter where labelId is one of (comma-separated list).
assigneeId[eq]Filter where assigneeId equals.
assigneeId[in]Filter where assigneeId is one of (comma-separated list).
subscriberId[eq]Filter where subscriberId equals.
subscriberId[in]Filter where subscriberId is one of (comma-separated list).
createdByActorId[eq]Filter where createdByActorId equals.
createdByActorId[in]Filter where createdByActorId is one of (comma-separated list).
updatedByActorId[eq]Filter where updatedByActorId equals.
updatedByActorId[in]Filter where updatedByActorId is one of (comma-separated list).
startAt[gt]Filter where startAt is greater than.
startAt[gte]Filter where startAt is greater than or equal to.
startAt[lt]Filter where startAt is less than.
startAt[lte]Filter where startAt is less than or equal to.
dueAt[gt]Filter where dueAt is greater than.
dueAt[gte]Filter where dueAt is greater than or equal to.
dueAt[lt]Filter where dueAt is less than.
dueAt[lte]Filter where dueAt is less than or equal to.
completedAt[gt]Filter where completedAt is greater than.
completedAt[gte]Filter where completedAt is greater than or equal to.
completedAt[lt]Filter where completedAt is less than.
completedAt[lte]Filter where completedAt is less than or equal to.
archivedAt[gt]Filter where archivedAt is greater than.
archivedAt[gte]Filter where archivedAt is greater than or equal to.
archivedAt[lt]Filter where archivedAt is less than.
archivedAt[lte]Filter where archivedAt is less than or equal to.
createdAt[gt]Filter where createdAt is greater than.
createdAt[gte]Filter where createdAt is greater than or equal to.
createdAt[lt]Filter where createdAt is less than.
createdAt[lte]Filter where createdAt is less than or equal to.
updatedAt[gt]Filter where updatedAt is greater than.
updatedAt[gte]Filter where updatedAt is greater than or equal to.
updatedAt[lt]Filter where updatedAt is less than.
updatedAt[lte]Filter where updatedAt is less than or equal to.
List Tasks › Responses
OK
The page of results.
totalTotal rows matching the query (across pages).
limithasMorenextCursorOpaque cursor for the next page; null on the last page.
Create Task
Create a Task. Server-assigned fields are ignored if sent.
Required scope: tasks:write
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Create Task › Request Body
nameTask name. 1–1024 characters after trimming. Content that reads as promotional (link-farm text, bulk marketing copy) is rejected with a 400.
projectIdProject this task belongs to. Required on create; PATCH-ing it moves the task — and its subtasks — into another project.
descriptionTask description. Supports Markdown formatting.
archivedWhether this resource is archived.
completedWhether this task is marked complete. Set true to mark a task done — Nifty renders completed tasks in a virtual "Completed" column, so prefer this over creating a separate "Done" status. Pairs with completedAt (timestamp) and completedById (who completed it).
listIdThe list this task belongs to. Null when the task is not on a list. Legal ids come from GET /lists.
statusIdThe status column this task sits in. Null when the task has no status (e.g. a backlog item). Legal ids come from GET /statuses.
parentTaskIdThe parent task, when this task is a subtask. Null on top-level tasks. Subtask siblings are ranked by order.
dependencyIdThe single task this one waits on. Nifty models one predecessor per task, so this is an id and not an array. Null when the task has no predecessor.
recurringRuleIdThe recurrence rule that regenerates this task, for recurring tasks. Null otherwise. Legal ids come from GET /recurring-rules.
startAtWhen work on this task is scheduled to start.
dueAtWhen this task is due.
remindAtA single reminder time for this task. Recurring or multiple reminders are separate objects on the reminder resource (GET /reminders?taskId[eq]=…).
storyPointsStory points used for agile estimation; client-supplied.
orderFractional rank of the task in its default ordering. To reposition, send the midpoint of the two neighbours' ranks. Two subtasks under the same parent cannot share a rank.
orderListFractional rank of the task within its list. Same read/write shape and midpoint recipe as order.
bannerCover image URL rendered at the top of the task detail view.
embedUrlExternal URL embedded in the task body (e.g. Loom recording, Figma frame).
Custom-field values on this task. READ: ?expand=customFields returns the values attached to this task. WRITE: include customFields: [{ customFieldId, value }] in the create/update body to set values — each one is checked against its field definition before the write commits (value is always a string; max 50 entries per request; "" clears). Field definitions live on the read-only customField resource.
assigneesTeam-member ids assigned to this task. On create, seeds the set. On update, REPLACES the whole set — members you leave out are unassigned. For additive changes use POST/DELETE /tasks/{id}/assignees. Read the current set with ?expand=assignees.
labelsLabel ids attached to this task. On create, seeds the set. On update, REPLACES the whole set — labels you leave out are detached. For additive changes use POST/DELETE /tasks/{id}/labels. Read the current set with ?expand=labels.
subscribersTeam-member ids subscribed to this task (they receive notifications on changes). On create, seeds the set. On update, REPLACES the whole set — members you leave out are unsubscribed. For additive changes use POST/DELETE /tasks/{id}/subscribers. Read the current set with ?expand=subscribers.
Create Task › Responses
Created
idUnique identifier for this resource.
createdAtCreation timestamp.
archivedWhether this resource is archived.
nameTask name. 1–1024 characters after trimming. Content that reads as promotional (link-farm text, bulk marketing copy) is rejected with a 400.
completedWhether this task is marked complete. Set true to mark a task done — Nifty renders completed tasks in a virtual "Completed" column, so prefer this over creating a separate "Done" status. Pairs with completedAt (timestamp) and completedById (who completed it).
projectIdProject this task belongs to. Required on create; PATCH-ing it moves the task — and its subtasks — into another project.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
archivedAtTimestamp when the task was archived. Server-stamped from the archived boolean — not directly writable.
archivedByIdMember who archived this resource (server-stamped). A member id — resolve it with GET /members/{id}.
niceIdPer-project sequential counter assigned on insert. Compose with project.niceId for human-readable references (e.g. "PROJ-42"). Server-managed — read-only on the wire.
descriptionTask description. Supports Markdown formatting.
listIdThe list this task belongs to. Null when the task is not on a list. Legal ids come from GET /lists.
statusIdThe status column this task sits in. Null when the task has no status (e.g. a backlog item). Legal ids come from GET /statuses.
parentTaskIdThe parent task, when this task is a subtask. Null on top-level tasks. Subtask siblings are ranked by order.
dependencyIdThe single task this one waits on. Nifty models one predecessor per task, so this is an id and not an array. Null when the task has no predecessor.
recurringRuleIdThe recurrence rule that regenerates this task, for recurring tasks. Null otherwise. Legal ids come from GET /recurring-rules.
startAtWhen work on this task is scheduled to start.
dueAtWhen this task is due.
completedAtTimestamp when the task was marked complete. Server-stamped from the completed boolean — not directly writable.
remindAtA single reminder time for this task. Recurring or multiple reminders are separate objects on the reminder resource (GET /reminders?taskId[eq]=…).
storyPointsStory points used for agile estimation; client-supplied.
orderFractional rank of the task in its default ordering. To reposition, send the midpoint of the two neighbours' ranks. Two subtasks under the same parent cannot share a rank.
orderListFractional rank of the task within its list. Same read/write shape and midpoint recipe as order.
bannerCover image URL rendered at the top of the task detail view.
embedUrlExternal URL embedded in the task body (e.g. Loom recording, Figma frame).
createdByIdThe team member who created this task. Server-set. Resolve it with ?expand=createdBy or GET /members/{id}; pairs with archivedById and completedById. This is a member id — createdByActorId is a different identifier space and GET /members/{id} will not accept it.
completedByIdThe team member who marked the task complete. Server-set when completed flips; pairs with completedAt. A member id — resolve it with GET /members/{id}.
The related Project, present only when you pass ?expand=project.
The related Status, present only when you pass ?expand=status.
The related List, present only when you pass ?expand=list.
The related Task, present only when you pass ?expand=parentTask.
The related Task, present only when you pass ?expand=dependency.
The related Recurring Rule, present only when you pass ?expand=recurringRule.
The related Team Member, present only when you pass ?expand=createdBy.
The related Team Member, present only when you pass ?expand=archivedBy.
The related Team Member, present only when you pass ?expand=completedBy.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
The linked Team Member rows, present only when you pass ?expand=assignees.
The linked Label rows, present only when you pass ?expand=labels.
The linked Team Member rows, present only when you pass ?expand=subscribers.
The linked Role rows, present only when you pass ?expand=hiddenFor.
The linked Task rows, present only when you pass ?expand=connectedTasks.
The linked Task rows, present only when you pass ?expand=subtasks.
The linked Message rows, present only when you pass ?expand=messages.
The linked Checklist rows, present only when you pass ?expand=checklists.
The linked File rows, present only when you pass ?expand=files.
The linked attachedCustomField rows, present only when you pass ?expand=customFields.
Get Task
Retrieve a single Task by id.
Required scope: tasks:read
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Get Task › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
archivedWhether this resource is archived.
nameTask name. 1–1024 characters after trimming. Content that reads as promotional (link-farm text, bulk marketing copy) is rejected with a 400.
completedWhether this task is marked complete. Set true to mark a task done — Nifty renders completed tasks in a virtual "Completed" column, so prefer this over creating a separate "Done" status. Pairs with completedAt (timestamp) and completedById (who completed it).
projectIdProject this task belongs to. Required on create; PATCH-ing it moves the task — and its subtasks — into another project.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
archivedAtTimestamp when the task was archived. Server-stamped from the archived boolean — not directly writable.
archivedByIdMember who archived this resource (server-stamped). A member id — resolve it with GET /members/{id}.
niceIdPer-project sequential counter assigned on insert. Compose with project.niceId for human-readable references (e.g. "PROJ-42"). Server-managed — read-only on the wire.
descriptionTask description. Supports Markdown formatting.
listIdThe list this task belongs to. Null when the task is not on a list. Legal ids come from GET /lists.
statusIdThe status column this task sits in. Null when the task has no status (e.g. a backlog item). Legal ids come from GET /statuses.
parentTaskIdThe parent task, when this task is a subtask. Null on top-level tasks. Subtask siblings are ranked by order.
dependencyIdThe single task this one waits on. Nifty models one predecessor per task, so this is an id and not an array. Null when the task has no predecessor.
recurringRuleIdThe recurrence rule that regenerates this task, for recurring tasks. Null otherwise. Legal ids come from GET /recurring-rules.
startAtWhen work on this task is scheduled to start.
dueAtWhen this task is due.
completedAtTimestamp when the task was marked complete. Server-stamped from the completed boolean — not directly writable.
remindAtA single reminder time for this task. Recurring or multiple reminders are separate objects on the reminder resource (GET /reminders?taskId[eq]=…).
storyPointsStory points used for agile estimation; client-supplied.
orderFractional rank of the task in its default ordering. To reposition, send the midpoint of the two neighbours' ranks. Two subtasks under the same parent cannot share a rank.
orderListFractional rank of the task within its list. Same read/write shape and midpoint recipe as order.
bannerCover image URL rendered at the top of the task detail view.
embedUrlExternal URL embedded in the task body (e.g. Loom recording, Figma frame).
createdByIdThe team member who created this task. Server-set. Resolve it with ?expand=createdBy or GET /members/{id}; pairs with archivedById and completedById. This is a member id — createdByActorId is a different identifier space and GET /members/{id} will not accept it.
completedByIdThe team member who marked the task complete. Server-set when completed flips; pairs with completedAt. A member id — resolve it with GET /members/{id}.
The related Project, present only when you pass ?expand=project.
The related Status, present only when you pass ?expand=status.
The related List, present only when you pass ?expand=list.
The related Task, present only when you pass ?expand=parentTask.
The related Task, present only when you pass ?expand=dependency.
The related Recurring Rule, present only when you pass ?expand=recurringRule.
The related Team Member, present only when you pass ?expand=createdBy.
The related Team Member, present only when you pass ?expand=archivedBy.
The related Team Member, present only when you pass ?expand=completedBy.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
The linked Team Member rows, present only when you pass ?expand=assignees.
The linked Label rows, present only when you pass ?expand=labels.
The linked Team Member rows, present only when you pass ?expand=subscribers.
The linked Role rows, present only when you pass ?expand=hiddenFor.
The linked Task rows, present only when you pass ?expand=connectedTasks.
The linked Task rows, present only when you pass ?expand=subtasks.
The linked Message rows, present only when you pass ?expand=messages.
The linked Checklist rows, present only when you pass ?expand=checklists.
The linked File rows, present only when you pass ?expand=files.
The linked attachedCustomField rows, present only when you pass ?expand=customFields.
Delete Task
Permanently delete this Task. This cannot be undone.
Required scope: tasks:delete
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Delete Task › Responses
No Content
Update Task
Partially update a Task. Only the fields you send are changed.
Required scope: tasks:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
query Parameters
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Update Task › Request Body
nameTask name. 1–1024 characters after trimming. Content that reads as promotional (link-farm text, bulk marketing copy) is rejected with a 400.
descriptionTask description. Supports Markdown formatting.
archivedWhether this resource is archived.
completedWhether this task is marked complete. Set true to mark a task done — Nifty renders completed tasks in a virtual "Completed" column, so prefer this over creating a separate "Done" status. Pairs with completedAt (timestamp) and completedById (who completed it).
projectIdProject this task belongs to. Required on create; PATCH-ing it moves the task — and its subtasks — into another project.
listIdThe list this task belongs to. Null when the task is not on a list. Legal ids come from GET /lists.
statusIdThe status column this task sits in. Null when the task has no status (e.g. a backlog item). Legal ids come from GET /statuses.
parentTaskIdThe parent task, when this task is a subtask. Null on top-level tasks. Subtask siblings are ranked by order.
dependencyIdThe single task this one waits on. Nifty models one predecessor per task, so this is an id and not an array. Null when the task has no predecessor.
recurringRuleIdThe recurrence rule that regenerates this task, for recurring tasks. Null otherwise. Legal ids come from GET /recurring-rules.
startAtWhen work on this task is scheduled to start.
dueAtWhen this task is due.
remindAtA single reminder time for this task. Recurring or multiple reminders are separate objects on the reminder resource (GET /reminders?taskId[eq]=…).
storyPointsStory points used for agile estimation; client-supplied.
orderFractional rank of the task in its default ordering. To reposition, send the midpoint of the two neighbours' ranks. Two subtasks under the same parent cannot share a rank.
orderListFractional rank of the task within its list. Same read/write shape and midpoint recipe as order.
bannerCover image URL rendered at the top of the task detail view.
embedUrlExternal URL embedded in the task body (e.g. Loom recording, Figma frame).
Custom-field values on this task. READ: ?expand=customFields returns the values attached to this task. WRITE: include customFields: [{ customFieldId, value }] in the create/update body to set values — each one is checked against its field definition before the write commits (value is always a string; max 50 entries per request; "" clears). Field definitions live on the read-only customField resource.
assigneesTeam-member ids assigned to this task. On create, seeds the set. On update, REPLACES the whole set — members you leave out are unassigned. For additive changes use POST/DELETE /tasks/{id}/assignees. Read the current set with ?expand=assignees.
labelsLabel ids attached to this task. On create, seeds the set. On update, REPLACES the whole set — labels you leave out are detached. For additive changes use POST/DELETE /tasks/{id}/labels. Read the current set with ?expand=labels.
subscribersTeam-member ids subscribed to this task (they receive notifications on changes). On create, seeds the set. On update, REPLACES the whole set — members you leave out are unsubscribed. For additive changes use POST/DELETE /tasks/{id}/subscribers. Read the current set with ?expand=subscribers.
expectedUpdatedAtOptional concurrency guard: the updatedAt you last read. If the resource has changed since, the update is rejected with 409 instead of overwriting the other writer. Re-read, re-derive your change from the current values, and retry with the fresh updatedAt.
Update Task › Responses
OK
idUnique identifier for this resource.
createdAtCreation timestamp.
archivedWhether this resource is archived.
nameTask name. 1–1024 characters after trimming. Content that reads as promotional (link-farm text, bulk marketing copy) is rejected with a 400.
completedWhether this task is marked complete. Set true to mark a task done — Nifty renders completed tasks in a virtual "Completed" column, so prefer this over creating a separate "Done" status. Pairs with completedAt (timestamp) and completedById (who completed it).
projectIdProject this task belongs to. Required on create; PATCH-ing it moves the task — and its subtasks — into another project.
updatedAtLast update timestamp.
createdByActorIdWho created this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records created any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
updatedByActorIdWho last wrote to this record — a person, an agent, an automation or the system itself. Read-only, stamped by the server on writes made through this API, and null on records last written any other way, so treat it as present-or-null rather than always populated. This is an actor id (a UUID), not a member id: look it up with GET /actors/{id}, whose memberId gives you the person to use against /members.
createdByActorTypeThe creator actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type; read-only, not directly writable.
updatedByActorTypeThe last writer actor's type (human, agent, cron, recurringTask, automation, outboxRetry, systemDefault). Server-derived from actors.type via the row's updatedByActorId; read-only, not directly writable.
archivedAtTimestamp when the task was archived. Server-stamped from the archived boolean — not directly writable.
archivedByIdMember who archived this resource (server-stamped). A member id — resolve it with GET /members/{id}.
niceIdPer-project sequential counter assigned on insert. Compose with project.niceId for human-readable references (e.g. "PROJ-42"). Server-managed — read-only on the wire.
descriptionTask description. Supports Markdown formatting.
listIdThe list this task belongs to. Null when the task is not on a list. Legal ids come from GET /lists.
statusIdThe status column this task sits in. Null when the task has no status (e.g. a backlog item). Legal ids come from GET /statuses.
parentTaskIdThe parent task, when this task is a subtask. Null on top-level tasks. Subtask siblings are ranked by order.
dependencyIdThe single task this one waits on. Nifty models one predecessor per task, so this is an id and not an array. Null when the task has no predecessor.
recurringRuleIdThe recurrence rule that regenerates this task, for recurring tasks. Null otherwise. Legal ids come from GET /recurring-rules.
startAtWhen work on this task is scheduled to start.
dueAtWhen this task is due.
completedAtTimestamp when the task was marked complete. Server-stamped from the completed boolean — not directly writable.
remindAtA single reminder time for this task. Recurring or multiple reminders are separate objects on the reminder resource (GET /reminders?taskId[eq]=…).
storyPointsStory points used for agile estimation; client-supplied.
orderFractional rank of the task in its default ordering. To reposition, send the midpoint of the two neighbours' ranks. Two subtasks under the same parent cannot share a rank.
orderListFractional rank of the task within its list. Same read/write shape and midpoint recipe as order.
bannerCover image URL rendered at the top of the task detail view.
embedUrlExternal URL embedded in the task body (e.g. Loom recording, Figma frame).
createdByIdThe team member who created this task. Server-set. Resolve it with ?expand=createdBy or GET /members/{id}; pairs with archivedById and completedById. This is a member id — createdByActorId is a different identifier space and GET /members/{id} will not accept it.
completedByIdThe team member who marked the task complete. Server-set when completed flips; pairs with completedAt. A member id — resolve it with GET /members/{id}.
The related Project, present only when you pass ?expand=project.
The related Status, present only when you pass ?expand=status.
The related List, present only when you pass ?expand=list.
The related Task, present only when you pass ?expand=parentTask.
The related Task, present only when you pass ?expand=dependency.
The related Recurring Rule, present only when you pass ?expand=recurringRule.
The related Team Member, present only when you pass ?expand=createdBy.
The related Team Member, present only when you pass ?expand=archivedBy.
The related Team Member, present only when you pass ?expand=completedBy.
The related Actor, present only when you pass ?expand=createdByActor.
The related Actor, present only when you pass ?expand=updatedByActor.
The linked Team Member rows, present only when you pass ?expand=assignees.
The linked Label rows, present only when you pass ?expand=labels.
The linked Team Member rows, present only when you pass ?expand=subscribers.
The linked Role rows, present only when you pass ?expand=hiddenFor.
The linked Task rows, present only when you pass ?expand=connectedTasks.
The linked Task rows, present only when you pass ?expand=subtasks.
The linked Message rows, present only when you pass ?expand=messages.
The linked Checklist rows, present only when you pass ?expand=checklists.
The linked File rows, present only when you pass ?expand=files.
The linked attachedCustomField rows, present only when you pass ?expand=customFields.
Search Tasks
Full-text ranked search across tasks. Ranked by relevance; pages are capped at 200 results. Filterable by 22 fields.
Required scope: tasks:read
query Parameters
qFull-text search query. Trimmed before matching; URLs, e-mail addresses and HTML markup are rejected.
projectIdThe project to search within. Required — tasks are project-scoped and search has no workspace-wide mode.
cursorOpaque cursor for the next page (the envelope nextCursor).
limitItems per page (1–200, default 50). A larger value is clamped to the cap rather than rejected, so always follow nextCursor instead of assuming one page held everything.
includeTotalWhen true, the response envelope includes the total number of matching rows. Omit it for cheaper pagination.
expandComma-separated relations to inline (see Expanding objects above). Valid values are listed in the enum.
name[eq]Filter where name equals.
name[contains]Filter where name contains.
name[startsWith]Filter where name starts with.
niceId[eq]Filter where niceId equals.
niceId[in]Filter where niceId is one of (comma-separated list).
archived[eq]Filter where archived equals.
completed[eq]Filter where completed equals.
projectId[eq]Filter where projectId equals.
projectId[in]Filter where projectId is one of (comma-separated list).
listId[eq]Filter where listId equals.
listId[in]Filter where listId is one of (comma-separated list).
statusId[eq]Filter where statusId equals.
statusId[in]Filter where statusId is one of (comma-separated list).
parentTaskId[eq]Filter where parentTaskId equals.
parentTaskId[in]Filter where parentTaskId is one of (comma-separated list).
dependencyId[eq]Filter where dependencyId equals.
dependencyId[in]Filter where dependencyId is one of (comma-separated list).
recurringRuleId[eq]Filter where recurringRuleId equals.
recurringRuleId[in]Filter where recurringRuleId is one of (comma-separated list).
createdById[eq]Filter where createdById equals.
createdById[in]Filter where createdById is one of (comma-separated list).
labelId[eq]Filter where labelId equals.
labelId[in]Filter where labelId is one of (comma-separated list).
assigneeId[eq]Filter where assigneeId equals.
assigneeId[in]Filter where assigneeId is one of (comma-separated list).
subscriberId[eq]Filter where subscriberId equals.
subscriberId[in]Filter where subscriberId is one of (comma-separated list).
createdByActorId[eq]Filter where createdByActorId equals.
createdByActorId[in]Filter where createdByActorId is one of (comma-separated list).
updatedByActorId[eq]Filter where updatedByActorId equals.
updatedByActorId[in]Filter where updatedByActorId is one of (comma-separated list).
startAt[gt]Filter where startAt is greater than.
startAt[gte]Filter where startAt is greater than or equal to.
startAt[lt]Filter where startAt is less than.
startAt[lte]Filter where startAt is less than or equal to.
dueAt[gt]Filter where dueAt is greater than.
dueAt[gte]Filter where dueAt is greater than or equal to.
dueAt[lt]Filter where dueAt is less than.
dueAt[lte]Filter where dueAt is less than or equal to.
completedAt[gt]Filter where completedAt is greater than.
completedAt[gte]Filter where completedAt is greater than or equal to.
completedAt[lt]Filter where completedAt is less than.
completedAt[lte]Filter where completedAt is less than or equal to.
archivedAt[gt]Filter where archivedAt is greater than.
archivedAt[gte]Filter where archivedAt is greater than or equal to.
archivedAt[lt]Filter where archivedAt is less than.
archivedAt[lte]Filter where archivedAt is less than or equal to.
createdAt[gt]Filter where createdAt is greater than.
createdAt[gte]Filter where createdAt is greater than or equal to.
createdAt[lt]Filter where createdAt is less than.
createdAt[lte]Filter where createdAt is less than or equal to.
updatedAt[gt]Filter where updatedAt is greater than.
updatedAt[gte]Filter where updatedAt is greater than or equal to.
updatedAt[lt]Filter where updatedAt is less than.
updatedAt[lte]Filter where updatedAt is less than or equal to.
Search Tasks › Responses
OK
The page of results.
totalTotal rows matching the query (across pages).
limithasMorenextCursorOpaque cursor for the next page; null on the last page.
Add assignees to a Task
Link the given ids to this Task as assignees. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete assignees set afterwards.
Required scopes: tasks:write tasks:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Add assignees to a Task › Responses
OK
The complete assignees set after the change.
affectedIdsThe ids that were actually linked (ones already linked are omitted).
missingIdsIds you sent that do not exist or are not visible to this token.
Remove assignees from a Task
Unlink the given ids from this Task's assignees. Removing one that is not linked changes nothing. Returns the complete assignees set afterwards.
Required scopes: tasks:write tasks:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Remove assignees from a Task › Request Body
idsTeam Members to add or remove, by id.
Remove assignees from a Task › Responses
OK
The complete assignees set after the change.
affectedIdsThe ids that were actually unlinked (ones not linked are omitted).
Add labels to a Task
Link the given ids to this Task as labels. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete labels set afterwards.
Required scopes: tasks:write tasks:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Add labels to a Task › Responses
OK
The complete labels set after the change.
affectedIdsThe ids that were actually linked (ones already linked are omitted).
missingIdsIds you sent that do not exist or are not visible to this token.
Remove labels from a Task
Unlink the given ids from this Task's labels. Removing one that is not linked changes nothing. Returns the complete labels set afterwards.
Required scopes: tasks:write tasks:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Remove labels from a Task › Responses
OK
The complete labels set after the change.
affectedIdsThe ids that were actually unlinked (ones not linked are omitted).
Add subscribers to a Task
Link the given ids to this Task as subscribers. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete subscribers set afterwards.
Required scopes: tasks:write tasks:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Add subscribers to a Task › Request Body
idsTeam Members to add or remove, by id.
Add subscribers to a Task › Responses
OK
The complete subscribers set after the change.
affectedIdsThe ids that were actually linked (ones already linked are omitted).
missingIdsIds you sent that do not exist or are not visible to this token.
Remove subscribers from a Task
Unlink the given ids from this Task's subscribers. Removing one that is not linked changes nothing. Returns the complete subscribers set afterwards.
Required scopes: tasks:write tasks:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Remove subscribers from a Task › Request Body
idsTeam Members to add or remove, by id.
Remove subscribers from a Task › Responses
OK
The complete subscribers set after the change.
affectedIdsThe ids that were actually unlinked (ones not linked are omitted).
Add hidden for to a Task
Link the given ids to this Task as hiddenFor. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete hiddenFor set afterwards.
Required scopes: tasks:write tasks:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Add hidden for to a Task › Responses
OK
The complete hiddenFor set after the change.
affectedIdsThe ids that were actually linked (ones already linked are omitted).
missingIdsIds you sent that do not exist or are not visible to this token.
Remove hidden for from a Task
Unlink the given ids from this Task's hiddenFor. Removing one that is not linked changes nothing. Returns the complete hiddenFor set afterwards.
Required scopes: tasks:write tasks:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Remove hidden for from a Task › Responses
OK
The complete hiddenFor set after the change.
affectedIdsThe ids that were actually unlinked (ones not linked are omitted).
Add connected tasks to a Task
Link the given ids to this Task as connectedTasks. Adds to the existing set rather than replacing it, and adding one that is already linked changes nothing. Returns the complete connectedTasks set afterwards.
Required scopes: tasks:write tasks:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Add connected tasks to a Task › Responses
OK
The complete connectedTasks set after the change.
affectedIdsThe ids that were actually linked (ones already linked are omitted).
missingIdsIds you sent that do not exist or are not visible to this token.
Remove connected tasks from a Task
Unlink the given ids from this Task's connectedTasks. Removing one that is not linked changes nothing. Returns the complete connectedTasks set afterwards.
Required scopes: tasks:write tasks:link
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Remove connected tasks from a Task › Request Body
idsTasks to add or remove, by id.
Remove connected tasks from a Task › Responses
OK
The complete connectedTasks set after the change.
affectedIdsThe ids that were actually unlinked (ones not linked are omitted).
Create tree (Task)
Create a task with its subtasks and their checklists in one atomic call — no id-threading, no half-built trees.
Required scope: tasks:write
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Create tree (Task) › Request Body
nameprojectIddescriptionassigneeslabelsstartAtdueAtcompletedstatusIdCreate tree (Task) › Responses
OK
idniceIdAttach document (Task)
Attach an existing document to this task (id = the task, documentId = the document; both must already exist in the same workspace). Idempotent — re-attaching is a no-op. Task assignees gain access to the document.
Required scope: tasks:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Attach document (Task) › Responses
OK
taskIddocumentIdDetach document (Task)
Detach a previously attached document from this task (id = the task, documentId = the document). Idempotent.
Required scope: tasks:write
path Parameters
id^[0-9A-Za-z_!]+$ · requiredId of the Task.
Headers
Idempotency-KeyOptional replay key (see Idempotent requests above).
Detach document (Task) › Responses
OK
taskIddocumentId