Tasks API
Overview
Tasks use short public codes (taskCode, listCode, templateCode, parentCode) - not UUIDs. Responses use camelCase. Discovery endpoints help you find codes before create/update.
Endpoints
GET /tasks - list tasks
GET /tasks/{taskCode} - get one task
POST /tasks - create task (optional listCode, parentCode, templateCode, assignees, OKR/KPI/wiki links)
PATCH /tasks/{taskCode} - update fields, move list/parent, change assignees, link OKR/KPI/wiki
GET /tasks/folders - folder hierarchy with nested lists (listCode on each list)
GET /tasks/lists - flat list of task lists
GET /tasks/lists/{listCode} - list metadata
GET /tasks/lists/{listCode}/tasks - list or create tasks in a list
GET /tasks/templates - list templates
GET /tasks/templates/{templateCode} - template structure preview (no task creation)
POST /tasks/templates/{templateCode}/tasks - instantiate template
GET /tasks/members - assignable workspace members (email, firstName, lastName)
Scopes
tasks:read for GET; tasks:write for POST and PATCH. User needs Tasks page read/create/update permission.
Limits
Up to 7 nesting levels (root depth 0)
Up to 1,000 subtasks per parent (including nested)
Up to 50,000 tasks per list (subtasks count toward the list total)
Recurring settings are removed when a task has 500+ subtasks
List tasks (GET /tasks)
limit, offset - pagination
status - todo | in_progress | completed
listCode - filter by short list code from GET /tasks/lists
assigneeEmail - filter by assignee email
search - match title or description (case-insensitive)
includeSubtasks - when false (default), only top-level tasks
curl "https://api.elevale.app/v1/workspaces/{workspaceId}/tasks?limit=10&listCode=l8k2mnp4x" \
-H "Authorization: Bearer elv_pat_..."Get task (GET /tasks/{taskCode})
Returns task detail with taskCode, listCode, parentCode, assigneeEmails, subtaskCount, and linked okrId / kpiId / wikiPageSlug when set.
curl "https://api.elevale.app/v1/workspaces/{workspaceId}/tasks/t4idqd7wa" \
-H "Authorization: Bearer elv_pat_..."Folders (GET /tasks/folders)
Returns nested folders; each folder includes lists with listCode, name, and orderIndex. Use listCode on create or PATCH to place tasks.
Create body (POST /tasks or POST .../lists/{listCode}/tasks)
title (required unless templateCode) - string
description, status, priority, dueDate - optional
listCode - short list code (optional on POST /tasks; implied when posting under /lists/{listCode}/tasks)
parentCode / parentId - create as subtask under parent taskCode
templateCode - instantiate a template (body fields override template root)
assigneeEmail / assigneeEmails - workspace member email(s)
okrId - link OKR UUID from GET /okrs
kpiId - link KPI UUID from GET /kpis
wikiPageSlug - link wiki page slug from GET /wiki/pages
curl -X POST "https://api.elevale.app/v1/workspaces/{workspaceId}/tasks" \
-H "Authorization: Bearer elv_pat_..." \
-H "Content-Type: application/json" \
-d '{"title":"Follow up","parentCode":"t4idqd7wa","listCode":"l8k2mnp4x","assigneeEmail":"[email protected]"}'Template preview (GET /tasks/templates/{templateCode})
Read-only structure of the template tree (titles, priorities, nested children) before calling POST .../templates/{templateCode}/tasks.
Update body (PATCH /tasks/{taskCode})
title, description, status, priority, dueDate - standard fields
listCode - move task to a list
clearList - true to remove from list
parentCode / parentId - move under another task
clearParent - true to promote to top-level
assigneeEmail / assigneeEmails - replace assignees
clearAssignees - true to remove all assignees
okrId, kpiId, wikiPageSlug - link or unlink (null to clear)
curl -X PATCH "https://api.elevale.app/v1/workspaces/{workspaceId}/tasks/t4idqd7wa" \
-H "Authorization: Bearer elv_pat_..." \
-H "Content-Type: application/json" \
-d '{"status":"in_progress","listCode":"l8k2mnp4x"}'Related
Personal access tokens (PATs) · Scopes and permissions · Reading data (GET API)