Projects
Reject a candidate
Changed onReject a candidate in a project pipeline. The candidate keeps their current stage and status but is marked as rejected, and any active outreach campaigns for the candidate are stopped.
What you need to provide:
- rejectionType (required) - who rejected the candidate: by_us (the agency), by_client, or self (the candidate withdrew).
- rejectionReason (optional) - a predefined reason code.
- customRejectionReasonId (optional) - the ID of one of your agency's custom rejection reasons. Deactivated reasons are rejected with 404.
- rejectionDetails (optional) - free-text notes about the rejection (max 512 characters).
Optional fields also accept an explicit null, which is treated the same as omitting the field.
Returns 422 when:
- The project is closed
- The candidate is already rejected
- The candidate sits on a legacy pipeline status that does not support rejection
To move a rejected candidate again, the rejection must be rolled back first (currently only possible in the Atlas app).
patch/api/v1/projects/{projectId}/candidates/{candidateId}/reject
Request
- Base URLhttps://api.recruitwithatlas.com
- AuthHTTP bearer
- TypeScriptA function with typed inputs. Its response is checked against the schema.
Path parameters
projectIdstring uuid required
Project ID
Example:550e8400-e29b-41d4-a716-446655440000
candidateIdstring uuid required
Candidate ID
Example:550e8400-e29b-41d4-a716-446655440004
Request body
Example request
{
"rejectionType": "by_us",
"rejectionReason": "not_qualified",
"customRejectionReasonId": "550e8400-e29b-41d4-a716-446655440005",
"rejectionDetails": "Salary expectations above the approved band"
}Response
Candidate rejected
Example response
{
"data": {
"rejectionType": "by_us",
"rejectionReason": "not_qualified",
"rejectedAt": "2026-07-09T12:00:00.000Z"
}
}Changes
- info
added the new
undefinedenum value to the request property
- info
- info
added the optional property
to the response with the status
- info