Skip to content

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 ​

NameTypeRequiredDescription
iduuidyesThe meeting, by the id from /meetings.

Query parameters ​

NameTypeRequiredDescription
statusstring—Values: open, done, dismissed.
verdictstring—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_fromdate—Lower bound of the due date, in YYYY-MM-DD format. An invalid format gives 400.
due_todate—Upper bound of the due date, in YYYY-MM-DD format. An invalid format gives 400.
limitinteger—Integer page size, clamped to the supported range. Non-integer or non-finite values give 400. Between 1 and 200. Default 100.
offsetinteger—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
  }
}
FieldTypeRequiredDescription
meeting_iduuidyesThe meeting these rows belong to.
dataobject[]yesThe tasks of this meeting.
data[].iduuidyesIdentifies the task.
data[].protocol_iduuidyesThe minutes this task was taken from.
data[].taskstringyesWhat is to be done, in one sentence.
data[].owner_namestring | null—Who is to do it. null when nobody was named in the meeting.
data[].duedate | null—When it is due. null when no date was named.
data[].verdictstringyesOutcome 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[].statusstringyesWhere the task stands. This one is set by a person in the app, not by the model. Values: open, done, dismissed.
paginationobjectyesWhere this page sits in the whole set.
pagination.limitintegeryesThe page size that was applied, after clamping.
pagination.offsetintegeryesThe offset that was applied.
pagination.totalintegeryesNumber of hits in total, ignoring limit and offset.

Other answers ​

CodeMeaning
400Invalid parameter — the text names the field and the shape expected.
401No key, or a key that is not valid.
403The key is missing the scope this endpoint needs.
503The 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.

Protoki — EU/GDPR-compliant meeting notetaker.