Documentation navigation

Quickstart

This walks you from nothing to a real developer profile and a first search in three steps.

The /v1/developers routes still work and are deprecated. Use /v2/developers.

1. Get a key

Sign in to Vamo, open Settings, API keys, and mint a key. It is shown once. Keys are prefixed vamo_sk_ and are scoped to one account.

2. Look up a developer

POST /v2/developers takes the people you already know: GitHub handles in logins, LinkedIn slugs or URLs in linkedin, and Vamo developer ids in ids.

curl -X POST https://api.vamotalent.ai/v2/developers \
  -H "Authorization: Bearer vamo_sk_..." \
  -H "Content-Type: application/json" \
  -d '{"logins": ["octocat"], "depth": "enriched"}'

Each entry in results carries the input you sent, a status (resolved, ambiguous or not_found) and, when it resolved, the developer. depth sets how much comes back: core is the GitHub profile, repositories and devRank, enriched adds LinkedIn identity and socials, and deep adds the contribution garden.

3. Search

POST /v2/developers/search takes one JSON body. Facts about a person go in filters, and the kind of work you care about goes in rank_by.

curl -X POST https://api.vamotalent.ai/v2/developers/search \
  -H "Authorization: Bearer vamo_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "filters": ["And", [
      ["location_ids", "ContainsAny", {"place": ["Berlin"]}],
      ["is_bot", "Eq", false],
      ["is_org_account", "Eq", false]
    ]],
    "rank_by": ["v", "ANN", ["Embed", "Rust async runtimes and systems programming"]],
    "limit": 20
  }'

results lists developers best match first. Each one has id, login, name, a details object, and evidence with the repositories that matched. Send the response's cursor back with the same body for the next page. It is null when there are no more.

When a call is refused

Every 4xx carries the same body: a stable code to branch on, a human message, and a remedy when the condition is self-clearable. Branch on code, never on the numeric status. Each operation in the reference lists the refusals it can return, and the full set of codes is the ApiError schema in openapi.json.

A search body the API cannot read is a 400 with ok: false, an error naming the problem, and a hint with the fix, such as the closest field name. POST /v2/developers/search/validate checks a body the same way without running it.

Where to go next