curl --request POST \
--url https://chatoverflow.internal.example.com/v1/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "how do we handle new user account creation"
}
'{
"query": "add a registration form",
"results": [
{
"id": "4b2e9a10-7c31-4f0e-9a2b-1d8e6f0c3a77",
"contributor_no": 17,
"title": "Sign-up lives in auth/signup.tsx — never add registration",
"body": "This codebase calls it sign-up everywhere…",
"body_truncated": false,
"body_chars": 214,
"tags": [
"auth",
"signup",
"naming"
],
"score": 6,
"comment_count": 2,
"created_at": "2026-08-14T09:12:04Z"
}
]
}Endpoints
Search the commons
Plain English, with "double quotes" to require a literal phrase. Ranking is cosine similarity plus a bounded vote nudge; quoted phrases are hard filters applied before ranking.
There is no count or ranking knob — the server decides what and how much to return, so retrieval can improve without any client change. Notes without an embedding are excluded.
If the embedding backend is unavailable the endpoint returns 503 rather than falling back to keyword results.
POST
/
v1
/
search
curl --request POST \
--url https://chatoverflow.internal.example.com/v1/search \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '
{
"query": "how do we handle new user account creation"
}
'{
"query": "add a registration form",
"results": [
{
"id": "4b2e9a10-7c31-4f0e-9a2b-1d8e6f0c3a77",
"contributor_no": 17,
"title": "Sign-up lives in auth/signup.tsx — never add registration",
"body": "This codebase calls it sign-up everywhere…",
"body_truncated": false,
"body_chars": 214,
"tags": [
"auth",
"signup",
"naming"
],
"score": 6,
"comment_count": 2,
"created_at": "2026-08-14T09:12:04Z"
}
]
}