Validate a developer search
https://api.vamotalent.ai/v2/developers/search/validatesearch: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 application/json
versionnumber default: 1Optional here: 1.
1askstringThe ask in words; the re-rank reads it.
max 2000 charsfiltersone ofA filter: `[field, Op, value]`, `[And|Or, [...]]` or `[Not, f]`.
rank_byone ofHow to rank: by meaning (`[v, ANN, [Embed, text]]`, a vector, or `{like: [...]}`), exact nearest neighbours (`kNN`: a vector or `{like}`; pair it with filters), keywords (`BM25`, options as a 4th element), field order (up to 8 keys), or a score expression.
limitone ofSingle lane: a number counts people (1 to 1000); `{total, per}` counts rows. With queries: people.
includearray of stringmax 50 itemscomputeanyqueriesarray of DevsLane2 or more lanes (3 by default), fused by person. Top-level `filters` are ANDed into every lane; `rank_by`, `include` and `compute` go inside each lane.
min 2 items, max 32 itemsfiltersone ofA filter: `[field, Op, value]`, `[And|Or, [...]]` or `[Not, f]`.
rank_byone ofHow to rank: by meaning (`[v, ANN, [Embed, text]]`, a vector, or `{like: [...]}`), exact nearest neighbours (`kNN`: a vector or `{like}`; pair it with filters), keywords (`BM25`, options as a 4th element), field 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. Deep adds the contribution garden only when `garden` is sent; without it deep is enriched.
coreenricheddeepfacetsarray of string default: []À-la-carte facet keys on top of the depth tier, resolved at every depth (core included): `identity.linkedin`, `contact.socials`, `contact.emails`, `tags.repos` or `ai.match_rationale` (judged against the query). A depth tier name (`core`, `enriched`, `deep`) is also accepted. Anything else is a 400. The AI summaries (`ai.person_summary`, `ai.repo_summaries`) are sold on GET /v2/developers/summaries and GET /v2/developers/enrich only: naming one here is a 400.
max 5 itemsgardenone ofOpt in to each developer’s contribution garden. Off unless sent: a garden is a GitHub read and a large block for an agent to carry. `true` or `summary` returns the compact `gardenSummary` (totals, active days and weeks, the last 90 days, per-month counts); `full` returns the whole daily `garden`, for drawing a heatmap.
repoLimitinteger 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 itemsinclude_ashbybooleanWith Ashby connected, people already in your Ashby are left out. true keeps them in.
include_thin_profilesbooleantrue also returns profiles whose profile_quality is empty (no email, no profile README, no recent activity and little else to go on) or bot, which search and similar hide by default. Thin profiles are always returned.
Responses
The compiled request
okboolean requiredtrue