v3

latestOpenAPI 3.1.02026-07-31550239.5 KB
Search

Unified 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.

get/search

Query parameters

qstring required

Search query. Required.

limitinteger

Per-section result cap. Each of orgs/catalog/releases respects this independently.

offsetinteger

Release-list offset (lexical mode only).

mode'lexical' | 'semantic' | 'hybrid'

Release-retrieval strategy.

domainstring

Narrow results to the org owning this domain.

productstring

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.

category'ai' | 'cloud' | 'commerce' | 'crm' | 'database' | 'design' | 'developer-tools' | 'devops' | 'finance' | 'framework' | 'infrastructure' | 'observability' | 'productivity' | 'security'

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.

collectionstring

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_coverageboolean

Include coverage-side rows that normally roll up into a canonical release.

include_contentboolean

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_emptyboolean

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.

kind'platform' | 'sdk' | 'mobile' | 'desktop' | 'docs' | 'integration' | 'tool'

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.

sincestring

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.

untilstring

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.

querystring required
domainstring
domainStatus'matched' | 'not_found'
categorystring
categoryStatus'matched'
collectionstring
collectionStatus'matched' | 'not_found'
mode'lexical' | 'semantic' | 'hybrid'
degradedboolean
degradedReasonstring