Documentation navigation

Build a sourcing pipeline

This is the whole product in one pass: describe a role, find people, keep the good ones, add depth only to those, and hand them off.

The exact request and response shapes are in the reference. What follows is the order and the reasoning.

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

Step 1. Turn the role into a search

Split the role into facts and work. Facts (where, which employers, seniority, languages) become filters. The work itself becomes one short phrase in rank_by.

curl -X POST https://api.vamotalent.ai/v2/developers/search/validate \
  -H "Authorization: Bearer vamo_sk_..." \
  -H "Content-Type: application/json" \
  -d '{
    "filters": ["And", [
      ["location_ids", "ContainsAny", {"place": ["Berlin", "Amsterdam", "London"]}],
      ["title_level", "In", ["senior", "staff"]],
      ["is_bot", "Eq", false],
      ["is_org_account", "Eq", false]
    ]],
    "rank_by": ["v", "ANN", ["Embed", "async runtimes in Rust"]]
  }'

validate resolves the places and checks every field without running the search. Read what it returns. If a place or field was read differently from what you meant, fix the body and check again.

Step 2. Run it

Send the same body to POST /v2/developers/search with a limit.

curl -X POST https://api.vamotalent.ai/v2/developers/search \
  -H "Authorization: Bearer vamo_sk_..." \
  -H "Content-Type: application/json" \
  -d '{ ...the body from step 1..., "limit": 50 }'

You get results at core depth: identity, GitHub profile, top repositories, devRank, and the evidence for why each person matched. That is enough to decide who is worth more attention.

Want more without repeat results? Send the response's cursor back with the same body, or pass the ids you have already seen in exclude.

Step 3. Save the ones you are keeping

POST /v1/contacts/save-developers turns developers into contacts.

A contact is the account-side record of a person you are working: it is what carries do-not-contact, and what outreach rules apply to. Do this before the next step, because a shortlist holds contacts, not raw developers.

Step 4. Group them

POST /v1/shortlists creates the list, and POST /v1/shortlists/{id}/members adds the contacts from step 3 to it.

Shortlists and projects are the grouping primitives. A contact carries no tags of its own, so these are what grouping is for.

Step 5. Add depth to that group only

Enrich the three you kept, not the fifty you found.

curl 'https://api.vamotalent.ai/v2/developers/enrich?ids=...&depth=enriched' \
  -H "Authorization: Bearer vamo_sk_..."

curl 'https://api.vamotalent.ai/v2/developers/emails?ids=...' \
  -H "Authorization: Bearer vamo_sk_..."

enrich adds LinkedIn identity and socials, and emails gets the addresses we observe. For computed facets such as dossiers, request a report instead. Both are explained in Enrichment and facets, and Credits and pricing covers what each step costs and how to preview it.

Step 6. Research the finalists

For the people you are about to contact, POST /v2/deep-research/jobs with {"subject": "developers", "logins": [...]} runs full-depth research and keeps a report the whole account can read. Poll GET /v2/deep-research/jobs/{id} until it finishes.

Doing it again tomorrow

Run the same search with the ids you already hold in exclude, and only new people come back. Then repeat steps 3 to 5 for them.