Skip to content

Tasks

Create, read, update, archive and restore tasks. Task titles are user content — returned verbatim, never normalised.

GET

/tasks

Lists tasks visible to the key’s user, newest first.

Query parameters

  • projectIdintegeroptionalFilter to one project
  • statusstringoptionaltodo · in_progress · internal_review · client_review · completed
  • prioritystringoptionallow · medium · high
  • assigneeIdstringoptionalFilter to one assignee
  • searchstringoptionalMatches task name or description
  • isArchivedbooleanoptionalArchived tasks are excluded by default; pass true to include them instead
  • limitintegeroptionalPage size, default 25, max 100
  • offsetintegeroptionalNumber of results to skip, default 0
  • fieldsstringoptionalComma-separated field names to trim the response to
  • expandstringoptionalComma-separated relations to include in full — comments
  • scopestringoptionalmine — limit to tasks in projects you own or are a member of, plus any task you follow (even outside those projects). Omit for the default (everything visible in the workspace). If projectId is also given, it takes precedence over follow-based inclusion.
  • minebooleanoptionalBare-parameter alias for scope=mine — ignored whenever scope is also present. A session-JWT caller (e.g. the mobile app) already defaults to mine without either param; an API key/OAuth caller defaults to workspace-wide and needs one of these to narrow.
GET

/tasks/{id}

Gets full details of one task, including its last 10 comments.

Query parameters

  • fieldsstringoptionalComma-separated field names to trim the response to
POST

/tasks

Creates a task in a project.

Body parameters

  • projectIdintegerrequiredProject to create the task in
  • namestringrequiredTask title
  • descriptionstringoptionalRich-text description (HTML)
  • statusstringoptionalDefaults to todo
  • prioritystringoptionallow · medium · high, defaults to medium
  • assigneeIdstringoptionalUser ID to assign
  • categoryIdintegeroptionalJob-role category ID
  • typeIdintegeroptionalOutput/type ID
  • startDatedateoptionalISO 8601 date
  • deadlinedateoptionalISO 8601 date
  • customEstimatedHoursstringoptionalOverrides the category/type default time estimate
PATCH

/tasks/{id}

Updates one or more fields. Omitted fields are left unchanged. Tasks aren’t moved to a different project via this endpoint.

Body parameters

  • namestringoptionalTask title
  • descriptionstringoptionalRich-text description (HTML)
  • statusstringoptionalOne of the five board statuses
  • prioritystringoptionallow · medium · high
  • assigneeIdstringoptionalUser ID to assign, or null to unassign
  • startDatedateoptionalISO 8601 date
  • deadlinedateoptionalISO 8601 date
  • customEstimatedHoursstringoptionalOverrides the category/type default time estimate
POST

/tasks/{id}/archive

Archives a task. Archived tasks are read-only until restored.

POST

/tasks/{id}/unarchive

Restores a previously archived task.

POST

/tasks/{id}/duplicate

Creates a copy of a task ("{name} (copy)"), rescheduling it to the assignee's next free hour that day when the original had a deadline, and carrying over its followers. Takes no request body.

GET

/tasks/{id}/activities

Lists a task's activity log (status changes, assignment changes, comments-added markers, etc.), newest first.

Query parameters

  • limitintegeroptionalPage size, default 25, max 100
  • offsetintegeroptionalNumber of results to skip, default 0
View example
List tasks
curl "https://api.klaarin.com/v1/tasks?projectId=42&status=in_progress&limit=25" \
  -H "Authorization: Bearer kl_live_9f2ac…"
Response
{
  "data": [
    {
      "id": 318,
      "name": "Review homepage copy",
      "status": "in_progress",
      "priority": "high",
      "assignee": { "id": "clx...", "name": "Bayu Pratama", "email": "bayu@floothink.com" },
      "project": { "id": 42, "name": "Website Redesign" },
      "tags": ["urgent", "client-facing"],
      "deadline": "2026-08-07",
      "isArchived": false
    }
  ],
  "meta": { "total": 128, "limit": 25, "offset": 0, "hasMore": true }
}