Get a candidate in a project
Changed onUse this endpoint to retrieve the current pipeline position of a single candidate within a specific project — what stage and status they sit at, who owns the candidate record, whether they have been rejected (and why), and a snapshot of the person and project they relate to.
In Atlas, a candidate represents a person who has been added to a project's recruitment pipeline. Each candidate sits at a specific status within a specific stage of the pipeline (e.g. Sourcing → Added, Shortlist → Reviewed). This endpoint returns the full state of one candidate by its ID, scoped to the project provided in the URL.
What you need to provide:
- The project ID in the URL path — the project the candidate belongs to
- The candidate ID in the URL path — the candidate record to look up
Both IDs are UUIDs returned by the List projects and List candidates in a project endpoints respectively.
What you get back:
- id — the candidate record ID
- stage — the candidate's current pipeline stage (id, name, phase)
- status — the candidate's current status within the stage (id, name)
- owner — the user who owns the candidate record (id, name, email); this is the candidate's owner, not necessarily the project's owner
- person — a snapshot of the underlying person (id, firstName, lastName, headlineRole, headlineCompanyName, avatarUrl); use person.id with the People endpoints to fetch the person's full details
- project — a snapshot of the project the candidate is in (id, jobRole, state)
- rejectedAt / rejectionType / rejectionReason / customRejectionReasonId / rejectionDetails / rejectedBy — populated when the candidate has been rejected, otherwise null. rejectionType says who rejected the candidate (by_us, by_client or self). rejectionReason returns the label of the agency-defined reason when one was picked (the same label the Atlas app shows), and falls back to the predefined reason code (e.g. not_qualified) for rejections recorded before agency-defined reasons existed. rejectedBy is the Atlas user who recorded the rejection (id, name, email), and is null when Atlas rejected the candidate automatically or by import. Rejected candidates are not moved, so a rejected candidate's stage and status are the ones they were rejected at
- comment / commentFormatted — the recruiter's shortlist comment ("Notes" in Atlas) as plain text and as HTML, null when there is none. Change it with Update a candidate in a project
Returns 404 when:
- The candidate does not exist, does not belong to the specified project, or is in a different agency.
Request
- Base URLhttps://api.recruitwithatlas.com
- AuthHTTP bearer
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Path parameters
Project ID
Candidate ID
Response
Candidate detail within the specified project
Example response
{
"data": {
"stage": {
"name": "Sourcing"
},
"status": {
"name": "Added"
},
"owner": {
"name": "Jane Smith",
"email": "owner@agency.com"
},
"person": {
"avatarUrl": "https://berg-atlas-public.s3-eu-west-1.amazonaws.com/550e8400-e29b-41d4-a716-446655440000/7c9e6679-7425-40de-944b-e07fc1f90ae7/avatar/a1b2c3d4.jpeg"
},
"project": {
"jobRole": "Software Engineer",
"state": "active"
},
"rejectionType": "by_client",
"rejectionReason": "Above budget",
"rejectedBy": {
"name": "Jane Smith",
"email": "jane@agency.com"
},
"comment": "Strong fit: 5 years in fintech, open to hybrid.",
"commentFormatted": "<p>Strong fit: 5 years in fintech, open to hybrid.</p>"
}
}Changes
- warning
added the new
undefinedenum value to the/response property for the response status - info
added the required property
/to the response with the status - info
added the required property
/to the response with the status
- warning
- info
added the required property
/to the response with the status - info
added the required property
/to the response with the status
- info