v3
latestOpenAPI 3.1.02026-07-31550239.5 KBUnified search across orgs, catalog, collections, releases, and chunks
Returns orgs, catalog entries (products + standalone sources folded together), curated collections, release hits, and — on hybrid/semantic modes — CHANGELOG.md chunk hits in a single response.
Entity sections (orgs/catalog) match at word boundaries — including camelCase transitions ("ai" matches OpenAI but not Em·ai·l) — and never via a domain TLD ("ai" does not match coderabbit.ai). Hits order by match quality: exact name/slug, then name prefix, then name word, then slug/domain/URL, then org category.
mode selects the release-retrieval strategy: lexical (FTS5), semantic (vector-only), or hybrid (RRF fusion of FTS5 + vector; default). The handler echoes back the mode actually used, including degraded: true when a hybrid request fell back to lexical because Vectorize is unavailable.
?domain= narrows the entire result set to one org (matched against organizations.domain and domain_aliases.domain). Invalid hostnames return 400; unknown hostnames return an empty envelope with domainStatus: "not_found" (distinct from "matched but no hits").
?category= and ?collection= scope orgs, catalog, and release hits to an org set — a fixed category slug (unknown → 400) or a curated collection's members (unknown → empty envelope with collectionStatus: "not_found"). Both compose with every other filter.
When the query parses as a GitHub coordinate (org/repo or github:org/repo) and no orgs/catalog matched, the handler runs an on-demand lookup and embeds the result on lookup. Coordinate-shaped queries are not suppressed by tangential release/chunk hits.
Collections surface via two paths: a direct match on the collection's name/description (lexical in every mode, plus a vector match in hybrid/semantic mode — vector hits below the relevance floor are dropped so off-topic queries return no collections) and a member rollup that includes every collection containing one of the matched orgs. Each row carries a via discriminator ("direct" vs "member"); matchedOrgSlugs on member rows names the result-set orgs that triggered the rollup so a UI can render an "includes X" hint.
Content negotiation: Accept: text/markdown returns a Markdown-rendered version of the same payload.
Query parameters
Search query. Required.
Per-section result cap. Each of orgs/catalog/releases respects this independently.
Release-list offset (lexical mode only).
Release-retrieval strategy.
Narrow results to the org owning this domain.
Narrow release and catalog hits to a specific product's sources. Accepts a prod_… typed ID or an orgSlug/productSlug coordinate (e.g. vercel/next-js). Bare slugs (no / prefix) are rejected as ambiguous. Unknown products return an empty envelope with productStatus: "not_found". Composes with domain, kind, since, and until.
Narrow orgs, catalog, and release hits to organizations in this category (the slugs GET /v1/categories lists; curator aliases resolve to canonical). Unknown values are rejected with 400. The response echoes the resolved slug as category with categoryStatus: "matched". Composes with every other filter.
Narrow orgs, catalog, and release hits to the member organizations of this curated collection (by slug, e.g. coding-agents). Unknown slugs return an empty envelope with collectionStatus: "not_found" (mirrors domain). Composes with every other filter.
Include coverage-side rows that normally roll up into a canonical release.
Include full markdown content on each release hit. Default false — hits ship summary + media only (list/card surfaces). Use GET /v1/releases/:id for the full body when not opted in.
Include orgs with zero indexed releases in the orgs section. Default false — empty orgs are stubs and surface as noise. ?domain= short-circuits this and always returns the resolved org.
Filter to a specific source/product kind. Release hits resolve through source.kind ?? product.kind; catalog hits filter on the row's own kind. The orgs and collections sections are unaffected; changelog chunk hits are unaffected.
Keep only release hits published at or after this bound. Accepts an ISO date/datetime or relative shorthand (90d, 4w, 6m, 2y). Filters published_at; releases with no date are dropped. The orgs/catalog/collections sections are unaffected.
Keep only release hits published at or before this bound. Same input formats as since. Filters published_at; releases with no date are dropped.
Response
Unified search response. JSON by default; Markdown when Accept: text/markdown is sent.