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.
| Auth | Session or API token with the read scope |
| Token limited to projects | Refused |
Path parameters
| Name | Type | Description |
|---|---|---|
dashboardId | id | The dashboard. |
cardUid | string | The card's uid on that dashboard. |
Request
GET /api/v1/ai/ask/card/<dashboardId>/<cardUid>
Authorization: Bearer <token>
companyid: <company id>Response
{
"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
}
}| Field | Description |
|---|---|
stored | null 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. |
stale | The answer is older than the card's refresh setting. |
refreshDue | The answer is stale and nothing has asked for it again within that time. |
Errors
| Status | When |
|---|---|
| 401 | No token, a token that is invalid, expired or revoked, or no valid companyid header. |
| 403 | The token lacks the read scope, or its person is no longer a member of the workspace. A token limited to projects is refused here. |
| 404 | The card does not exist, is not an Ask card, or the caller cannot open its dashboard. The body carries code: "card_not_found". |
| 429 | Too 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.
| Auth | Session or API token with the write scope |
| Token limited to projects | Refused |
Path parameters
| Name | Type | Description |
|---|---|---|
dashboardId | id | The dashboard. |
cardUid | string | The card's uid on that dashboard. |
Body
| Field | Type | Required | Description |
|---|---|---|---|
question | string | yes | The question. Text past 500 characters is cut off. |
projectId | id | Limits the answer to one project. | |
fresh | boolean | true asks again even when an answer is kept. |
Request
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
{
"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
| Status | When |
|---|---|
| 400 | No question. The body carries code: "question_required". |
| 401 | No token, a token that is invalid, expired or revoked, or no valid companyid header. |
| 403 | The token lacks the write scope, or its person is no longer a member of the workspace. A token limited to projects is refused here. |
| 404 | The card does not exist, is not an Ask card, or the caller cannot open its dashboard. The body carries code: "card_not_found". |
| 429 | Too many requests from this address. Wait retryAfter seconds and send it again. |
