Skip to content

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

NameTypeRequiredDescription
meeting_iduuidNarrow to one meeting. Without it, the tasks come from all of them.
statusstringWhere the task stands. Values: open, done, dismissed.
verdictstringOutcome of the second pass over the task. Values: open, resolved_in_meeting, discarded, duplicate, unclear_owner.
due_fromdateYYYY-MM-DD. An invalid value gives 400.
due_todateYYYY-MM-DD. An invalid value gives 400.
limitintegerBetween 1 and 200. Default 100.
offsetintegerAt 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
  }
}
FieldTypeRequiredDescription
dataobject[]yesThe tasks on this page.
data[].iduuidyesIdentifies the task.
data[].meeting_iduuidyesThe meeting this task came out of.
data[].meeting_titlestringyesSubject of that meeting, so a task list reads without a second call.
data[].meeting_starts_atdate-time | nullStart of that meeting.
data[].protocol_iduuidyesThe minutes this task was taken from.
data[].taskstringyesWhat is to be done, in one sentence.
data[].owner_namestring | nullWho is to do it. null when nobody was named in the meeting.
data[].duedate | nullWhen 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.