Skip to main content

Reject a candidate

Reject a candidate at the given step. Scope: pipeline:write.

POST/api/v1/candidate-steps/{id}/reject 🔒 API key

Rejects the candidate at the given step, setting the candidate role to Not Selected. Scope: pipeline:write. The {id} is a CandidateRoleStep id. Requires authority to manage the candidate’s steps (HR rep, moderator, owner, or admin).

No email

A v1 reject sends no email. Activity is logged and the organization status cache is synced.

Path parameters

ParameterTypeDescription
idstringThe CandidateRoleStep id.

Request body (optional)

FieldTypeDescription
outcomeNotesstringRecorded as the rejection reason.
outcomeTypestringStructured outcome classification.
outcomeReasonstringStructured outcome reason.

Example request

curl -X POST https://app.talent-ray.com/api/v1/candidate-steps/crs_3/reject \
  -H "Authorization: Bearer tr_YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{ "outcomeReason": "skills_mismatch", "outcomeNotes": "Below the bar on system design." }'

Response

200 OK

{
  "success": true,
  "step": { "id": "crs_3", "roleId": "role_eng_be", "roleStepId": "step_interview", "name": "Technical Interview", "order": 3, "stepType": "interview", "status": "rejected", "rejectedAt": "2026-06-05T12:00:00Z", "rejectionReason": "Below the bar on system design." }
}

Status codes

StatusMeaning
200Rejected; step is the now-rejected step.
401No valid API key.
403insufficient_scope (missing pipeline:write) or forbidden (cannot manage this candidate’s steps).
404Step not found, or not visible to the key.
409conflict — the step is already rejected.
429Rate limit exceeded.