Skip to content

Dashboard

Aggregate, read-only views that power the Klaarin dashboard — stat cards, the active task list, client comments, and team workload. Every endpoint is scoped to the active workspace and further trimmed by the caller's role, matching the web dashboard's own visibility rules exactly. All four accept the shared filter set below; a parameter is only listed on an endpoint where it changes the result.

GET

/dashboard/stats

The four stat-card counts: projects, overdue, due today, due this week.

Query parameters

  • searchstringoptionalMatches task name or description
  • fromdateoptionalEarliest task deadline to include (YYYY-MM-DD, inclusive). Intersects with each tile's own window rather than replacing it
  • todateoptionalLatest task deadline to include (YYYY-MM-DD, inclusive)
  • teamIdintegeroptionalFilter to the members of one or more teams, including their sub-teams (comma-separated). Combined with assigneeId it intersects, it does not widen
  • assigneeIdstringoptionalFilter to one or more assignees (comma-separated)
  • taskIdintegeroptionalFilter to one task
  • projectIdintegeroptionalFilter to one project
  • projectStatusstringoptionalFilter to projects whose status matches this value exactly, e.g. in-progress
  • statusstringoptionalFilter to one task status. Replaces the default not-completed baseline, so a completed status can be counted
  • localDatedateoptionalCaller's local date (YYYY-MM-DD), defaults to server today — pass this to avoid a timezone-boundary mismatch on overdue/due-today/due-this-week
View example
Filtered dashboard stats
curl "https://api.klaarin.com/v1/dashboard/stats?from=2026-09-01&to=2026-09-30&teamId=4,7" \
  -H "Authorization: Bearer kl_live_9f2ac…"
Response
{ "projects": 3, "overdue": 2, "dueToday": 1, "dueThisWeek": 4 }
GET

/dashboard/tasks

The Active Tasks list — lean task rows for the dashboard, not the full task shape GET /tasks/{id} returns.

Query parameters

  • searchstringoptionalMatches task name or description
  • fromdateoptionalEarliest task deadline to include (YYYY-MM-DD, inclusive)
  • todateoptionalLatest task deadline to include (YYYY-MM-DD, inclusive)
  • teamIdintegeroptionalFilter to the members of one or more teams, including their sub-teams (comma-separated). Combined with assigneeId it intersects, it does not widen
  • assigneeIdstringoptionalFilter to one or more assignees (comma-separated). Never widens past what the caller's role may see
  • taskIdintegeroptionalFilter to one task
  • projectIdintegeroptionalFilter to one project
  • projectStatusstringoptionalFilter to projects whose status matches this value exactly, e.g. in-progress
  • statusstringoptionalFilter to one status value
  • sortstringoptionaldue (default), created, name, or status. status sorts by a fixed pipeline order (todo, in-progress, internal-review, client-review); a status outside that list sorts last
  • localDatedateoptionalCaller's local date (YYYY-MM-DD), for due-state labeling
  • limitintegeroptionalPage size, default 25, max 100
  • offsetintegeroptionalNumber of results to skip, default 0
View example
Request
curl "https://api.klaarin.com/v1/dashboard/tasks?limit=1" \
  -H "Authorization: Bearer kl_live_9f2ac…"
Response
{
  "data": [
    {
      "id": 501,
      "title": "Update homepage copy",
      "project": { "id": 12, "name": "Marketing Site" },
      "status": { "value": "in-progress", "label": "In Progress", "color": "#88B6FF" },
      "tags": ["urgent"],
      "assignee": { "id": "clx...", "name": "Bayu Pratama", "image": null, "initials": "BP" },
      "category": { "id": 4, "key": "design", "value": "Design" },
      "type": { "id": 9, "key": "ui", "value": "UI" },
      "deadline": "2026-07-10",
      "dueState": "overdue",
      "dueLabel": "Overdue 3d",
      "daysDiff": -3
    }
  ],
  "meta": { "total": 12, "limit": 1, "offset": 0, "hasMore": true }
}
GET

/dashboard/comments

Client Comments & Mentions. Returns an empty page (not an error) for a role that can't see client comments — currently client.

Query parameters

  • searchstringoptionalMatches the comment's own content
  • fromdateoptionalEarliest comment date to include (YYYY-MM-DD, inclusive). Unlike the other endpoints this filters when the comment was posted, not a task deadline
  • todateoptionalLatest comment date to include (YYYY-MM-DD, inclusive)
  • teamIdintegeroptionalFilter to comments on tasks assigned to the members of one or more teams, including their sub-teams (comma-separated)
  • assigneeIdstringoptionalFilter to comments on tasks assigned to one or more people (comma-separated). This matches the task's assignee, not the comment's author
  • projectIdintegeroptionalFilter to one project
  • projectStatusstringoptionalFilter to projects whose status matches this value exactly, e.g. in-progress
  • limitintegeroptionalPage size, default 25, max 100
  • offsetintegeroptionalNumber of results to skip, default 0
GET

/dashboard/workload

Per-person capacity/utilization gauge plus a 6-row breakdown, for the whole team visible in the active workspace. Not paginated — one object covering everyone the caller's role allows onto the roster. Returns empty workloads for a role that can't see workload — currently client.

Query parameters

  • fromdateoptionalStart of an explicit window (YYYY-MM-DD). Overrides the mode's implicit window for capacity, the completed window, and the daily due-window
  • todateoptionalEnd of the explicit window (YYYY-MM-DD). Defaults to from, i.e. a single day
  • teamIdintegeroptionalLimit the roster to the members of one or more teams, including their sub-teams (comma-separated)
  • assigneeIdstringoptionalLimit the roster to one or more people (comma-separated). Someone picked here appears at 0% rather than being dropped when they have no active task in scope
  • projectIdintegeroptionalFilter to one project
  • projectStatusstringoptionalFilter to projects whose status matches this value exactly, e.g. in-progress
  • modestringoptionaldaily (default) or monthly