---
title: "The owner’s list, including what the AI handed over"
method: GET
path: "/api/v1/tasks"
tags: ["Desk"]
---

# The owner’s list, including what the AI handed over

`GET /api/v1/tasks`

## Request

- Base URL: `http://localhost:5180`
- URL: `http://localhost:5180/api/v1/tasks`
- Auth: API key in cookie `better-auth.session_token`

Every task carries provenance, so a task the AI created can be traced back to the run that created it and the reason it could not finish the job itself. One page at a time: `total` says how many the filter matches and `offset` reaches all of them, while `open` is counted over the whole list rather than the page.

## Query parameters

- `status` 'open' | 'in_progress' | 'blocked' | 'done' | 'cancelled'
- `limit` integer
- `offset` integer

## Response `200`

One page of tasks.

- object
  - `ok` unknown, required
  - `data` object, required
    - `tasks` object[], required
      - `id` string, required: Stable record id, e.g. `lse_012`.
      - `title` string, required
      - `description` string
      - `status` 'open' | 'in_progress' | 'blocked' | 'done' | 'cancelled', required
      - `priority` 'high' | 'medium' | 'low', required
      - `dueDate` string: A calendar date, `YYYY-MM-DD`.
      - `assigneeId` string: Stable record id, e.g. `lse_012`.
      - `origin` 'ai' | 'owner' | 'workflow', required: `ai` marks something Dardaris could not do itself and handed to the owner.
      - `category` 'rent_collection' | 'arrears' | 'lease_lifecycle' | 'maintenance' | 'compliance' | 'move_in_out' | 'communication' | 'vacancy' | 'finance' | 'short_stay' | 'reporting' | 'other', required
      - `relatedTo` object
        - `kind` string, required: Which kind of record this points at, for example `lease`, `unit` or `invoice`.
        - `id` string, required: Stable record id, e.g. `lse_012`.
        - `label` string, required: How the record reads to a person, so a trail can be followed without a second lookup.
      - `workflowRunId` string: Stable record id, e.g. `lse_012`.
      - `completedAt` string: ISO 8601 timestamp.
      - `provenance` object, required
        - `actor` object, required
          - `kind` 'owner' | 'ai' | 'tenant' | 'contractor' | 'system' | 'channel', required: `ai` is Dardaris acting on the owner’s behalf. Everything it touches is marked.
          - `id` string: Stable record id, e.g. `lse_012`.
          - `name` string, required
        - `at` string, required: ISO 8601 timestamp.
        - `workflowRunId` string: Set when an automated run produced this, linking the record back to the run.
        - `reasoning` string: The rationale the AI recorded at the moment it acted.
      - `assigneeName` string, required: Who the task sits with. "None" when it is unassigned.
    - `open` number, required: How many are open or in progress, whatever `status` filtered to and whatever page this is.
    - `total` number, required: Every task the filter matches, not just the ones returned. Every one of them is reachable through `offset`.
    - `limit` number, required: The page size actually used, which is smaller than the one asked for once it passes the cap.
    - `offset` number, required: The offset this page was read at.
  - `meta` object, required
    - `requestId` string, required: Echoed in the x-request-id header. Quote it in a bug report.

## Other responses

- `400`: `status` was not one of the documented states, or `limit` or `offset` is out of range.

---

[API](https://skmtc.dev/dardaris/apis/dardaris-api.md) · [All operations](https://skmtc.dev/dardaris/apis/dardaris-api/llms.txt) · [OpenAPI document](https://skmtc.dev/dardaris/apis/dardaris-api/revisions/4aff33835c73?raw)
