/v2/developers/search/validateValidate a developer search
search:readChecks and compiles the query exactly as POST /v2/developers/search would (names resolved, text normalised, defaults filled) without running it. Free.
Request body DeveloperQuery
versionnumber default: 1Optional here: 1.
1askstringThe ask in words; the re-rank reads it.
max 2000 charsfiltersone ofA Turbopuffer filter: `[attr, Op, value]`, `[And|Or, [...]]` or `[Not, f]`.
rank_byone ofA Turbopuffer rank_by: ANN (`[Embed, text]`, a vector, or `{like: [...]}`), exact kNN (a vector or `{like}`; pair it with filters), BM25 (options as a 4th element), attribute order (up to 8 keys), or a score expression.
limitone ofSingle lane: a number counts people (1 to 100); `{total, per}` counts rows. With queries: people.
includearray of stringmax 50 itemscomputeanyqueriesarray of DevsLane2 or more lanes (3 by default), fused by person.
min 2 items, max 32 itemsfiltersone ofA Turbopuffer filter: `[attr, Op, value]`, `[And|Or, [...]]` or `[Not, f]`.
rank_byone ofA Turbopuffer rank_by: ANN (`[Embed, text]`, a vector, or `{like: [...]}`), exact kNN (a vector or `{like}`; pair it with filters), BM25 (options as a 4th element), attribute order (up to 8 keys), or a score expression.
limitone ofRows: a number, or `{total, per}` (per = rows per person, 1 to 5, default 3).
includearray of stringmax 50 itemscomputeany
fuseone ofrerankstringnone, rules (default when the query has text), clef or jev.
nonerulesclefjevsortstringrelevance (default) or a person field, highest first. With no text and no rank_by the index sorts by it; otherwise the people found are re-ordered by it (nulls last). recent = last_active_at (GH Archive, partial).
relevancedevrankstarsfollowersrecentconsistencystringeventual (default; the index is written in batches) or strong (every write before the query).
eventualstrongreposobjectPeople who own and/or contributed to 1 to 10 repos (owner/name), combined with every other filter, text and sort.
namesarray of string requiredmin 1 items, max 10 itemsrolestring default: "either"owner, contributor, or either (default).
ownercontributoreitherhopsone of1: the people on the repos; 2: worked with them (people who share another repo with them, members excluded).
judgeobjectclef / jev: how many of the rules top the model scores (default 20) and the per-call cap (default 900 ms).
topintegermin 1, max 30timeout_msintegermin 100, max 3000
depthstring default: "core"The depth ladder: core (the default), enriched, deep. Each step returns more of the profile.
coreenricheddeepfacetsarray of string default: []À-la-carte facet keys on top of the depth tier.
max 5 itemsgardenstringWhich shape the contribution garden comes back in. `summary` (the default) is a compact `gardenSummary`: totals, active days and weeks, the last 90 days, the last active day and per-month counts, with `garden` null. `full` is the whole `garden`: every day’s count for the trailing year, for drawing a heatmap.
fullsummaryrepoLimitinteger default: 4min 1, max 12cursorstringThe previous page’s `cursor`: the next people for the same query.
max 16384 charsexcludearray of stringDeveloper ids never to return (up to 1000), e.g. people you already hold.
max 1000 items
Responses
200The compiled requestokboolean requiredtrue
400The query does not compile; `hint` says what to changeokboolean requiredfalseerrorstring requiredhintstring required
401Missing or invalid API keycodestring requiredStable machine-readable error code. Branch on this, never on the numeric status.
bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errorbuild_failedmessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at how to restore access).
kindstring requiredWhat kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.
topupconnect_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.
402Your plan does not include this capabilitycodestring requiredStable machine-readable error code. Branch on this, never on the numeric status.
bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errorbuild_failedmessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at how to restore access).
kindstring requiredWhat kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.
topupconnect_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.
403The key lacks search:readcodestring requiredStable machine-readable error code. Branch on this, never on the numeric status.
bad_requestunauthorizedsignature_requiredpayment_requiredforbiddennot_foundconflictgonepayload_too_largeunprocessable_entitytoo_many_requestsinternal_errornot_implementedbilling_unavailablenot_contactablemailbox_link_unavailablemailbox_requiredmail_engine_unavailablewebhook_publisher_unavailabledatabase_unavailableclient_errorbuild_failedmessagestring requiredHuman-readable explanation of the refusal.
statusinteger requiredThe HTTP status code, repeated in the body.
remedyobjectA self-serve path forward, when one exists (a 402 points at how to restore access).
kindstring requiredWhat kind of remedy this is, so a client can route it: whether the caller can clear the condition through the API, or a person must act in the web app.
topupconnect_mailboxurlstring requiredWhere to go to clear the condition: an API path, or a web app page when only a person can.
404The seed is not in the indexokboolean requiredfalseerrorstring requiredhintstring required
429Rate limit (10 requests per second per key), or the index is busy; see Retry-Afterokboolean requiredfalseerrorstring requiredhintstring required
503Search is not enabled in this environment, or the index is unavailable; see Retry-Afterokboolean requiredfalseerrorstring requiredhintstring required