Tasks

Tasks represent units of work within a project. They support assignment, priority levels, dependencies, and project-defined statuses.

List Tasks

GET /v1/projects/:projectId/tasks

Retrieve tasks for a project. Tasks are always scoped to a project within an organization (the organization is taken from your access token).

Query Parameters

ParameterTypeDescription
spec_idUUIDFilter by the spec a task belongs to
statusstringFilter by status key (statuses are defined per project)
assignee_idUUIDFilter by assigned user
limitintegerMax results (1–100)
offsetintegerPagination offset

Response

{
  "success": true,
  "data": [
    {
      "id": "...",
      "project_id": "...",
      "spec_id": "...",
      "title": "Implement login flow",
      "status_key": "in_progress",
      "status_name": "In Progress",
      "priority": "high",
      "assigned_to": "...",
      "due_date": null,
      "created_at": "2026-04-10T08:00:00Z",
      "updated_at": "2026-04-12T14:30:00Z"
    }
  ],
  "pagination": {
    "total": 42,
    "limit": 50,
    "offset": 0,
    "has_more": true
  }
}

Create Task

POST /v1/projects/:projectId/tasks

Request Body

{
  "title": "Implement login flow",
  "description": "Add email/password login with MFA support",
  "spec_id": "...",
  "priority": "high",
  "assignee_id": "...",
  "depends_on": ["..."]
}

Only title is required. All other fields are optional; depends_on is a list of task IDs this task depends on. Do not send id, org_id, created_at, or updated_at; these are assigned by the server. The organization is taken from your access token, and the task is scoped to the project in the path.

Response

On success the new task’s ID is returned in the standard envelope; fetch the full record with GET /v1/tasks/:taskId.

{
  "success": true,
  "data": "..."
}

Response Codes

StatusMeaning
201 CreatedTask created; the new task ID is returned
400 Bad RequestInvalid project ID, malformed JSON, or request body validation failure
401 UnauthorizedMissing or invalid access token
403 ForbiddenCaller lacks permission to create tasks in this project
404 Not FoundThe referenced project does not exist in your organization
500 Internal Server ErrorUnexpected server error

Get Task

GET /v1/tasks/:taskId

Response

{
  "success": true,
  "data": {
    "id": "...",
    "project_id": "...",
    "spec_id": "...",
    "title": "Implement login flow",
    "description": "Add email/password login with MFA support",
    "status_id": "...",
    "status_key": "in_progress",
    "status_name": "In Progress",
    "priority": "high",
    "assigned_to": "...",
    "due_date": null,
    "parent_task_id": null,
    "created_at": "2026-04-10T08:00:00Z",
    "updated_at": "2026-04-12T14:30:00Z"
  }
}

Update Task

PUT /v1/tasks/:taskId

Update one or more fields on a task. Only provided fields are modified; at least one field must be supplied.

Request Body

{
  "status": "done",
  "priority": "medium",
  "assignee_id": "...",
  "depends_on": ["..."]
}

Delete Task

DELETE /v1/tasks/:taskId

Deletes the task.

Task Activity

GET /v1/tasks/:taskId/activity

List the activity log for a task (status changes, assignments, edits).

Task Statuses

Task statuses are not a fixed list; status keys are defined per organization and can be scoped to a single project. The status field accepted on update references one of these status keys, and updating a task to a status key that is not defined is rejected as a validation error.

Task Priorities

PriorityDescription
criticalBlocking issue requiring immediate attention
highImportant work for the current sprint
mediumStandard priority
lowNon-urgent, can be deferred