Appearance
Full-text search
GET /api/v1/search meetings:read
Searches minutes, meeting titles and transcripts. A hit carries a highlighted excerpt (<mark>) and where it was found (protocol | title | transcript). At most one hit per meeting.
Query parameters
| Name | Type | Required | Description |
|---|---|---|---|
q | string | yes | At least 2 characters. |
limit | integer | — | Between 1 and 100. Default 50. |
Response 200
The hits, best first. No pagination — limit is the upper bound.
Example response
json
{
"query": "quote",
"data": [
{
"meeting_id": "8f14e45f-ceea-467a-9e2b-1d3f5c0a7b21",
"title": "Quarterly review",
"platform": "string",
"starts_at": "2026-08-04T08:00:00Z",
"created_at": "2026-08-01T09:12:44Z",
"rank": 0.42,
"snippet": "we send the <mark>quote</mark> by Friday",
"matched_in": "protocol"
}
]
}| Field | Type | Required | Description |
|---|---|---|---|
query | string | yes | The search term, trimmed. |
data | object[] | yes | The hits, best first. |
data[].meeting_id | uuid | yes | The meeting the hit was found in. |
data[].title | string | yes | Subject, as the calendar or the upload spelled it. |
data[].platform | string | — | Where that meeting took place. |
data[].starts_at | date-time | null | — | Start of the appointment. null for an upload, which has none. |
data[].created_at | date-time | — | When the meeting was first recorded in Protoki. |
data[].rank | number | yes | Hit score. A title hit always carries 0.35. |
data[].snippet | string | yes | Excerpt with <mark>…</mark> around the place found. This contains HTML — handle it before you display it. |
data[].matched_in | string | yes | Which part of the meeting the hit came from. Values: protocol, title, transcript. |
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. |