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 | — | Lower bound of the due date, in YYYY-MM-DD format. An invalid format gives 400. |
due_to | date | — | Upper bound of the due date, in YYYY-MM-DD format. An invalid format gives 400. |
limit | integer | — | Integer page size, clamped to the supported range. Non-integer or non-finite values give 400. Between 1 and 200. Default 100. |
offset | integer | — | Integer offset, clamped to the supported range. Non-integer or non-finite values give 400. Between 0 and 2147483647. Default 0. |
Response 200
The tasks of the meeting. pagination.limit and pagination.offset report the applied page size and offset; total counts all matching tasks. The last page can contain fewer rows than the limit.
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 |
|---|---|
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. |