search
1 endpoint.
/api/search Bearer tokenSearch everything the caller can see
The unified search behind the /search page and the global search dialog: one query over people, organizations, quizzes, learning pathways, courses, job aids, records and the catalogues, grouped by kind, then the questions of the public help pages (a `Help & support` group, linking to each answer; keyword matches only). Every entity group is scoped by the same visibility rules the entity's own list page enforces, so the caller never sees anything they could not already find elsewhere. Each group carries at most five hits and says whether more matched, with the list page to continue on. On a deployment that has configured AI search the groups also carry, after the keyword matches, the entities whose indexed content is nearest in meaning — the text of attached PDFs, and described images and videos, included — badged `AI match`, under exactly the same visibility rules; `mode` narrows that to one half.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
| q | query | string | yes | The words to search for; every word must appear in one of an entity's searched columns. Queries shorter than two characters return every group empty. |
| mode | query | string | no | `keyword` matches every word as a substring of the entities' searched columns. `semantic` embeds the query and returns the entities whose indexed content is nearest in meaning — attached PDFs, images and videos included. `combined` lists both: keyword matches first in each group, then the further AI matches, badged `AI match`. Omitted, the mode is `combined` on a deployment with AI search configured and `keyword` elsewhere; `semantic` and `combined` answer 503 where AI search is off. |
Responses
| Status | Description | Body |
|---|---|---|
| 200 | The grouped hits, in a fixed group order. | SearchResults |
| 400 | The query is missing or too long, or the mode is not one of the two. | ErrorResponse |
| 401 | The access token is missing or invalid. | ErrorResponse |
| 500 | The database could not be read. | ErrorResponse |
| 503 | AI search is not configured on this deployment, or its embedding provider did not answer. | ErrorResponse |