Searching for developers
POST /v2/developers/search finds developers in one call. The body says who you want and how to order them: facts about the person go in filters, the work you care about goes in rank_by, and repos, sort, limit, cursor and exclude shape the page.
The /v1/developers routes still work and are deprecated. Use /v2/developers.
Facts are filters
A filter is [field, operator, value]. Combine filters with ["And", [...]] or ["Or", [...]], and leave people out with ["Not", filter].
{
"filters": ["And", [
["former_company_ids", "ContainsAny", {"company": ["Cloudflare"]}],
["location_ids", "ContainsAny", {"place": ["Denver"]}],
["is_bot", "Eq", false],
["is_org_account", "Eq", false]
]],
"sort": "devrank"
}
Names resolve for you. Write {"place": [...]}, {"company": [...]} or {"school": [...]} and the API turns them into ids. A city means its metro area, so Denver includes Boulder. Add "scope": "city" next to place for the city alone. The response's places_resolved says how each place was read.
Company fields answer different questions:
current_company_idsis where someone works now.former_company_idsis anywhere they have worked, past or current.past_company_idsis where they used to work.
GET /v2/developers/fields lists every field a search can use, its operators, and whether it can filter or sort. A field it does not list, or an operator a field does not take, is a 400 that names the closest match.
The work is a ranking
To order people by what they build, put a short description of the work in rank_by:
{
"rank_by": ["v", "ANN", ["Embed", "iOS app performance"]],
"filters": ["location_ids", "ContainsAny", {"place": ["NYC"]}]
}
Describe the work only. Places, employers and seniority belong in filters, where they are exact. To rank by resemblance to repositories you already know, use ["v", "ANN", {"like": ["vercel/next.js"]}].
Repositories
repos finds the people on specific repositories:
{
"repos": {"names": ["tokio-rs/tokio"], "role": "contributor"},
"filters": ["location_ids", "ContainsAny", {"place": ["NYC"]}],
"sort": "devrank"
}
role is owner, contributor or either (the default). Set "hops": 2 for the people who worked alongside them.
Sorting
With no rank_by, sort orders the people your filters match: devrank, stars, followers or recent. With rank_by, the default relevance keeps the best match first, and any other sort re-orders the people found.
Depth
Results come back at depth core unless you ask for more. core is the GitHub profile, top repositories and devRank. enriched adds LinkedIn identity and socials. deep adds the contribution garden. facets adds up to five individual facets on top of the tier. See Enrichment and facets.
Paging and "show me more"
limit is the page size, up to 100 people. Each response carries a cursor: send it back with the same body for the next page, and you will not see anyone twice. It is null at the end. countStatus says whether the page came back full.
To leave out people you already hold, pass their developer ids in exclude, up to 1000.
Check a body before you run it
POST /v2/developers/search/validate takes the same body, resolves names, and returns the compiled query without running it. Use it to see how a place or company was read, or to check a body an agent wrote.
People like someone you know
POST /v2/developers/similar starts from one person:
{"like_person": "octocat", "intent": "same"}
like_person is a GitHub login or a developer id. intent is same for the same kind of engineer, overall for like them in every way (the default), or network for the people they work with. Add filters to narrow, for example to one metro. The result shape, depth, paging and exclude are the same as search. POST /v2/developers/{id}/similar does the same with the person in the path.
Deep research is not search
POST /v2/deep-research/jobs is full-depth research on developers or repositories you have already identified. It does not find new people.
curl -X POST https://api.vamotalent.ai/v2/deep-research/jobs \
-H "Authorization: Bearer vamo_sk_..." \
-H "Content-Type: application/json" \
-d '{"subject": "developers", "logins": ["octocat"]}'
The response is a job with an id. Poll GET /v2/deep-research/jobs/{id} until it finishes; the job lists which subjects landed and why any did not. Use "subject": "repos" with repos to research repositories instead.