Appearance
Tasks of one meeting
GET /api/v1/meetings/{id}/action-items action_items:read
Tasks from the most recent minutes of the meeting. An empty list means "no tasks OR no meeting you can see" — the API deliberately does not give away that other people's meetings exist.
Path parameters
| Name | Type | Required | Description |
|---|---|---|---|
id | uuid | yes | The meeting, by the id from /meetings. |
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
status | string | — | Values: open, done, dismissed. |
verdict | string | — | The outcome of the second pass over the task. resolved_in_meeting means it was already dealt with during the meeting. Values: open, resolved_in_meeting, discarded, duplicate, unclear_owner. |
due_from | date | — | ⚠️ The shape is NOT checked here, unlike on /action-items. An unusable value gives 500 or 503 instead of 400. |
due_to | date | — | Upper bound of the due date. Same caveat as due_from. |
limit | integer | — | Between 1 and 200. Default 100. |
offset | integer | — | At least 0. Default 0. |
Response 200
The tasks of the meeting. ⚠️ pagination.limit is the NUMBER OF ROWS delivered here and pagination.offset is always 0 — not what you asked for. Only total is the real total.
Example response
json
{
"meeting_id": "3b1f7c02-5d64-4c1a-9f88-2ac0e6b41d77",
"data": [
{
"id": "e07b6d13-84af-4c92-b5d7-0a9e1f83c246",
"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 |
|---|---|---|---|
meeting_id | uuid | yes | The meeting these rows belong to. |
data | object[] | yes | The tasks of this meeting. |
data[].id | uuid | yes | Identifies the task. |
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 |
|---|---|
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. |