Skip to content

Dashboards ​

The answers of the Ask cards on a dashboard. These two routes sit under /api/v1; they are described here because a token can call them.

Read an Ask card's answer ​

GET /api/v1/ai/ask/card/:dashboardId/:cardUid · beta

Returns the answer kept for the caller on one Ask card of a dashboard.

An answer is built from what its asker can open, so each viewer of a dashboard has their own. This never returns anyone else's.

AuthSession or API token with the read scope
Token limited to projectsRefused

Path parameters

NameTypeDescription
dashboardIdidThe dashboard.
cardUidstringThe card's uid on that dashboard.

Request

http
GET /api/v1/ai/ask/card/<dashboardId>/<cardUid>
Authorization: Bearer <token>
companyid: <company id>

Response

json
{
  "status": true,
  "data": {
    "stored": {
      "question": "What is overdue this week?",
      "projectId": "",
      "answer": "Two tasks are overdue [WEB-12] [WEB-15].",
      "cited": [
        {
          "kind": "task",
          "id": "<task id>",
          "ref": "WEB-12",
          "title": "Write the release notes",
          "project": "Website",
          "projectId": "<project id>",
          "available": true
        }
      ],
      "askedAt": 1759311000000
    },
    "stale": false,
    "refreshDue": false
  }
}
FieldDescription
storednull when the caller has no kept answer for the card. askedAt is a time in milliseconds. cited lists only the sources the caller can still open.
staleThe answer is older than the card's refresh setting.
refreshDueThe answer is stale and nothing has asked for it again within that time.

Errors

StatusWhen
401No token, a token that is invalid, expired or revoked, or no valid companyid header.
403The token lacks the read scope, or its person is no longer a member of the workspace. A token limited to projects is refused here.
404The card does not exist, is not an Ask card, or the caller cannot open its dashboard. The body carries code: "card_not_found".
429Too many requests from this address. Wait retryAfter seconds and send it again.

Ask an Ask card's question ​

POST /api/v1/ai/ask/card/:dashboardId/:cardUid · beta

Asks a question as the caller and keeps the answer for the caller on that card.

The answer is written by the workspace's AI model from the tasks and pages the caller can open, and counts against the workspace's AI budget.

A kept answer to the same question and project is handed back instead of asking again, unless fresh is true or the kept answer is past the card's refresh setting.

AuthSession or API token with the write scope
Token limited to projectsRefused

Path parameters

NameTypeDescription
dashboardIdidThe dashboard.
cardUidstringThe card's uid on that dashboard.

Body

FieldTypeRequiredDescription
questionstringyesThe question. Text past 500 characters is cut off.
projectIdidLimits the answer to one project.
freshbooleantrue asks again even when an answer is kept.

Request

http
POST /api/v1/ai/ask/card/<dashboardId>/<cardUid>
Authorization: Bearer <token>
companyid: <company id>
Content-Type: application/json

{ "question": "What is overdue this week?" }

Response

json
{
  "status": true,
  "statusText": "OK",
  "data": {
    "configured": true,
    "mode": "ask",
    "answer": "Two tasks are overdue [WEB-12] [WEB-15].",
    "cited": [
      {
        "kind": "task",
        "id": "<task id>",
        "ref": "WEB-12",
        "title": "Write the release notes",
        "project": "Website",
        "projectId": "<project id>",
        "detail": "Doing · HIGH",
        "updatedAt": "2026-10-01T09:30:00.000Z"
      }
    ],
    "sources": [],
    "scope": { "projects": 4, "privileged": false },
    "usage": { "tokens": 1250, "model": "<model name>" },
    "askedAt": 1759311000000
  }
}

sources lists everything that was searched, in the shape of cited; the example leaves it empty. cited are the sources the answer refers to.

When a kept answer is handed back, data is { configured: true, question, projectId, answer, cited, askedAt, kept: true }. When no AI model is configured, data.configured is false, answer is empty and nothing is kept.

Errors

StatusWhen
400No question. The body carries code: "question_required".
401No token, a token that is invalid, expired or revoked, or no valid companyid header.
403The token lacks the write scope, or its person is no longer a member of the workspace. A token limited to projects is refused here.
404The card does not exist, is not an Ask card, or the caller cannot open its dashboard. The body carries code: "card_not_found".
429Too many requests from this address. Wait retryAfter seconds and send it again.

Released under the AGPL-3.0 licence.