Skip to main content
API reference sections

Schema

TaskQueryResponse

What the query answers with.

Type object

Shape

FieldTypeDescription
rowsrequiredarray of TaskRow

The matching tasks, one row each, in the requested order.

definitionsrequiredarray of AttributeDefinition

Every attribute definition in play: the system registry always, plus the scoped workspaces' custom definitions - so a surface draws a value from its type rather than guessing.

tagsrequiredarray of AttributeTag

The scoped workspaces' tag tables (live tags only, merge tombstones resolved away), so a koru.tag value resolves to a name and a chip color without another request.

groupsarray of TaskGroup

Corpus-wide counts per group - per list, or per bucket - when the query asked for them with group_by. Empty otherwise.

Names are not repeated here. A group carries its key - a ListId, or a bucket token - with the count and the overdue share; the name, the swatch and the rail order live in the workspace's list table, which a client reads from its own workspace rather than from this response. Two spellings of one name in one answer is a drift waiting to happen - the same rule tags follows above.

Default []

projectedrequiredboolean

Whether every workspace in scope has reached the read model at all. false is "still indexing" - the projector is debounced, so a task created a moment ago may not be a row yet.

updating_workspacesarray of WorkspaceId

The workspaces the answer may be behind on, by the same rule search and the attribute query use: named rather than waited for.

Default []

limitrequiredinteger (uint, >= 0)

The page size actually applied, after the store's cap.

next_afterstring or null

The task: reference to pass as the next request's [TaskQuery::after], or absent when this page is the end of the list.

Default null

restartedboolean

The after this request carried named a row the filter no longer matches - completed, removed or binned between pages - so the answer is page one again. A client can tell a fresh list from a continuation instead of silently drawing page one twice.

Default false

coveredboolean or null

Whether the rows and counts include every write in [TaskQuery::covering].

`None` means this server cannot tell - an older store that never read the requirement. A client must read None as unknown, never as coverage: it records the capability as absent, falls back to its ordinary schedule and stops sending requirements, so an old server is never asked again quickly for an answer it cannot give. A server that understands the field always answers Some, true when nothing was required.

A different question from [projected](Self::projected), which says whether the workspace has been indexed at all; both are worth having.

Default null

Example
{
  "rows": [
    {
      "workspace": "00000000-0000-4000-8000-000000000000",
      "document": "00000000-0000-4000-8000-000000000000",
      "node": "string",
      "task": "string",
      "node_kind": "string",
      "lifecycle": "string",
      "document_trashed": false,
      "in_trash": false,
      "breadcrumb": "string",
      "title": "string",
      "attributes": [
        {
          "id": "string",
          "role": "string",
          "kind": "string",
          "value": "string",
          "zone": "string",
          "label": "string"
        }
      ]
    }
  ],
  "definitions": [
    {
      "id": "string",
      "key": "string",
      "label": "string",
      "value_type": "string",
      "cardinality": "string",
      "scope": "string",
      "system": false,
      "options": [],
      "filterable": false,
      "sortable": false,
      "groupable": false
    }
  ],
  "tags": [
    {
      "id": "string",
      "name": "string",
      "color": "string",
      "workspace": {}
    }
  ],
  "groups": [],
  "projected": false,
  "updating_workspaces": [],
  "limit": 0,
  "next_after": "string",
  "restarted": false,
  "covered": false
}

The contract has no example values, so example bodies are generated from each schema: every field is shown with a placeholder of its type.

Used by

Generated from contract version 1. Last updated .

Privacy choices

Choose which optional tools Koru may use on this site. Your choice is saved in a cookie in this browser for 12 months. Privacy policy

Privacy choices

Keep you signed in, protect forms and remember your language and this choice.

Always on

PostHog and Google Analytics 4 measure page views and actions such as downloads, using cookies or local storage.

PostHog records how pages are used, with form inputs masked and private pages excluded. Needs Analytics.

Ahrefs Web Analytics measures visits and where they come from, and Google Ads measures whether our ads led to a visit or download.