Platform documentation

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)

Custom list statuses

Task lists can define custom status columns in the product UI. The API supports them on create and update when the task belongs to a list.

  • status: legacy values todo, in_progress, or completed (default when no custom status is set).

  • statusId: UUID of a row in task_list_statuses for that list. Copy from the product UI or your automation store.

  • statusName: case-insensitive match on the custom status name within the target list (for example Review).

  • statusId and statusName require the task to be list-assigned, include listCode on create, or PATCH an existing task that already has a list.

  • GET responses include statusId when set; legacy status is derived from the status group (active → in_progress, done → completed).

  • There is no public list-statuses endpoint yet, discover statusId values from the Tasks UI or your integration logs.