Enrich profiles
Changed onFull public professional profiles for up to 100 profile ids or profile URLs. This does not return email or phone; a contact lookup does that. The body is the full profile, including education. MCP enrich_profiles defaults view to full and returns that same profile; compact is opt-in. Credits stay the profile price either way. profile_id is the search id or a public profile URL. alternate_id is the other profile id for the same person when both are known. Either id reads the same cached profile. Cached copies younger than max_age_days are free. A live enrich usually queues a job: the response is 202 with job_id, poll_url (/v1/jobs/{job_id}), and status queued, plus a Location header, and X-Credits-Charged is 0. Poll GET /v1/jobs/{job_id} every few seconds until status is completed, or wait for job.completed. The call that queued the job is charged when it completes; the completed job has result.data and credits_charged, read from the ledger and equal to result.cost.credits, and the ledger row carries this call's request_id and the job_id. When everything is already stored the profiles come back at once (200). A suppressed person is omitted and never charged.
Polling example:
KEY="<your API key>"
curl -s -X POST https://api.recruitmcp.com/v1/people:enrich \
-H "Authorization: Bearer $KEY" -H "Idempotency-Key: $(uuidgen)" \
-H "Content-Type: application/json" -d '{"ids":["lead_8f2a1c_1"]}'
# 202: {"job_id":"job_01J0JOB0EXAMPLE","poll_url":"/v1/jobs/job_01J0JOB0EXAMPLE","status":"queued",...}
until curl -s https://api.recruitmcp.com/v1/jobs/job_01J0JOB0EXAMPLE \
-H "Authorization: Bearer $KEY" | grep -q '"status":"\(completed\|failed\)"'; do sleep 3; done
curl -s https://api.recruitmcp.com/v1/jobs/job_01J0JOB0EXAMPLE -H "Authorization: Bearer $KEY"
# result.data holds the profiles; credits_charged equals result.cost.credits
Scope: sourcing:spend.
Request
- Base URL: https://api.recruitmcp.com
- URL: https://api.recruitmcp.com/v1/people:enrich
- Auth: one of:
- HTTP bearer
- OAuth 2 (authorization code, authorization URL https://recruitmcp.com/oauth/authorize, token URL https://recruitmcp.com/oauth/token, scopes: sourcing:spend)
Query parameters
Optional. true returns a free preview, labelled dry_run, and changes nothing. The same flag in the JSON body is honored. A dry run never charges. Omit it to run the call.
Headers
Required unless dry_run=true. At most 128 characters. The same key and body replays the first response for 24 hours and does not charge again. A different body is 409 idempotency_key_reused. A second call waits for the first and replays it. 409 idempotency_in_progress means the first call was still running when the wait ended.
API version. Defaults to the version the key was created with. Supported: 2026-10-13.
Act inside this customer (cus_…). Ignored for keys bound to a customer, which always act inside theirs.
Request body
Example request
{
"ids": [
"lead_8f2a1c_1",
"lead_3c71e0_2"
],
"max_age_days": 30
}Response
200 when everything is already stored: a ProfileList at once. With ?dry_run=true, a Preview; nothing is charged or sent.
Example response
{
"object": "list",
"data": [
{
"profile_id": "lead_8f2a1c_1",
"full_name": "Ada Peeters",
"headline": "Backend Engineer at Acme Robotics",
"profile_url": "https://profiles.example.com/ada-peeters",
"experience": [
{
"position": "Backend Engineer",
"company": "Acme Robotics",
"started": "2021-03",
"current": true,
"company_url": "https://companies.example.com/acme-robotics"
}
],
"skills": [
"Go",
"Kubernetes"
],
"source": "profile_index",
"fetched_at": "2026-10-13T09:00:00Z"
},
{
"profile_id": "lead_3c71e0_2",
"full_name": "Jonas Vermeulen",
"headline": "Platform Engineer at Paperkiln",
"profile_url": "https://profiles.example.com/jonas-vermeulen",
"experience": [
{
"position": "Backend Engineer",
"company": "Acme Robotics",
"started": "2021-03",
"current": true,
"company_url": "https://companies.example.com/acme-robotics"
}
],
"skills": [
"Go",
"Kubernetes"
],
"source": "profile_index",
"fetched_at": "2026-10-13T09:00:00Z"
}
],
"not_found": [],
"omitted": {
"suppressed": 0
},
"cost": {
"credits": 4,
"cached_items": 0,
"live_items": 2,
"upstream_calls": 2
}
}Changes
- warning
added the new
approval_forcedenum value to the/response property for the response status - warning
added the new
approval_forcedenum value to the/response property for the response status - warning
added the new
approval_forcedenum value to the/response property for the response status - warning
added the new
approval_forcedenum value to the/response property for the response status - warning
added the new
approval_forcedenum value to the/response property for the response status - warning
added the new
approval_forcedenum value to the/response property for the response status
- warning