Creates a candidate under a job owned by the authenticated company.
Supports either:
application/json for metadata-only candidate creationmultipart/form-data when uploading a resume fileWhen a resume is uploaded, it is processed asynchronously. The
resume_data field may be null in the immediate response and will
populate once processing completes.
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Request body for creating a candidate via JSON.
Numeric id of a job owned by the authenticated company.
x >= 140
Candidate name after trimming.
1 - 200"Jane Doe"
Optional candidate email. Used in duplicate detection by job.
"jane@example.com"
Optional phone number. Normalized where possible.
100"+61 412 345 678"
Optional LinkedIn profile URL.
"https://linkedin.com/in/janedoe"
Optional freeform location string.
500"Sydney, Australia"
Optional initial stage. Defaults to prospect.
prospect, applied, phonescreen, inprogress, hired, rejected "prospect"
Optional note that creates a note_added activity row.
2000"Referred by internal team"
Candidate created
Wrapper for a single candidate resource.
Public representation of a candidate.
{
"id": 419,
"public_id": "e3745169-a137-4b99-8fcc-373d6d4c8d60",
"name": "Jane Doe",
"email": "jane@example.com",
"phone": "+61412345678",
"linkedin": "https://linkedin.com/in/janedoe",
"location": "Sydney, Australia",
"stage": "applied",
"rating": 4,
"fit_score": 82,
"application_source": "public_api",
"ats_candidate_id": "ext-456",
"job": { "id": 40, "title": "Senior Engineer" },
"created_at": "2026-03-11T10:21:54.289003Z",
"updated_at": "2026-03-11T10:21:54.544000Z",
"applied_at": "2026-03-11T10:21:54.289003Z",
"resume_url": "https://api.outhire.ai/storage/cv/example.pdf?token=eyJhbGciOiJIUzI1NiIs...",
"resume_data": {
"personalInfo": {
"name": "Jane Doe",
"email": "jane@example.com"
},
"summary": "Senior engineer with 8 years of experience"
},
"resume_status": "processed"
}