Appearance
Tasks across meetings
GET /api/v1/action-items action_items:read
Every task the key is allowed to see — "everything still open and due by Friday", without loading meetings first. Each row carries the meeting id, title and start along with it. Sorted by due date ascending, tasks without one last, then by meeting start descending.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
meeting_id | uuid | — | Narrow to one meeting. Without it, the tasks come from all of them. |
status | string | — | Where the task stands. Values: open, done, dismissed. |
verdict | string | — | Outcome of the second pass over the task. Values: open, resolved_in_meeting, discarded, duplicate, unclear_owner. |
due_from | date | — | YYYY-MM-DD. An invalid value gives 400. |
due_to | date | — | YYYY-MM-DD. An invalid value gives 400. |
limit | integer | — | Between 1 and 200. Default 100. |
offset | integer | — | At least 0. Default 0. |
Response 200
The tasks.
Example response
json
{
"data": [
{
"id": "e07b6d13-84af-4c92-b5d7-0a9e1f83c246",
"meeting_id": "8f14e45f-ceea-467a-9e2b-1d3f5c0a7b21",
"meeting_title": "Quarterly review",
"meeting_starts_at": "2026-08-04T08:00:00Z",
"protocol_id": "8f14e45f-ceea-467a-9e2b-1d3f5c0a7b21",
"task": "Send the quote",
"owner_name": "Anna Weber",
"due": "2026-08-15",
"verdict": "open",
"status": "open"
}
],
"pagination": {
"limit": 50,
"offset": 0,
"total": 3
}
}| Field | Type | Required | Description |
|---|---|---|---|
data | object[] | yes | The tasks on this page. |
data[].id | uuid | yes | Identifies the task. |
data[].meeting_id | uuid | yes | The meeting this task came out of. |
data[].meeting_title | string | yes | Subject of that meeting, so a task list reads without a second call. |
data[].meeting_starts_at | date-time | null | — | Start of that meeting. |
data[].protocol_id | uuid | yes | The minutes this task was taken from. |
data[].task | string | yes | What is to be done, in one sentence. |
data[].owner_name | string | null | — | Who is to do it. null when nobody was named in the meeting. |
data[].due | date | null | — | When it is due. null when no date was named. |
data[].verdict | string | yes | Outcome of the second pass over the task. resolved_in_meeting means it was already dealt with while the meeting was still running. Values: open, resolved_in_meeting, discarded, duplicate, unclear_owner. |
data[].status | string | yes | Where the task stands. This one is set by a person in the app, not by the model. Values: open, done, dismissed. |
pagination | object | yes | Where this page sits in the whole set. |
pagination.limit | integer | yes | The page size that was applied, after clamping. |
pagination.offset | integer | yes | The offset that was applied. |
pagination.total | integer | yes | Number of hits in total, ignoring limit and offset. |
Other answers
| Code | Meaning |
|---|---|
400 | Invalid parameter — the text names the field and the shape expected. |
401 | No key, or a key that is not valid. |
403 | The key is missing the scope this endpoint needs. |
503 | The endpoint does not exist on this deployment yet, because a database change has not been applied. A temporary state, not a mistake in your request. |