The candidate object

The full shape GET /candidates/{id} returns.

Every field GET /candidates/{id} can return, in one place — see Retrieve a candidate for the request itself.

GET /candidates/{id} — every field

idstringrequired
The Onboardly candidate id — use this in every other endpoint’s path.
external_idstring or nullrequired
The Idempotency-Key you created this candidate with, or null for a dashboard-created candidate.
statusstringrequired
awaiting_consent, consent_denied, in_progress, verified, flagged, or revoked — the same stage a recruiter sees on the dashboard header pill.
consentbooleanrequired
True once the candidate has granted WhatsApp consent.
candidate.namestringrequired
Full display name.
candidate.mobile_numberstring or nullrequired
E.164.
candidate.emailstring or nullrequired
candidate.job_titlestring or nullrequired
Your role_type at creation, if any.
documents[].namestringrequired
The checklist entry’s name — any string, not limited to a fixed catalogue.
documents[].statusstringrequired
pending, needs_review, accepted, rejected, or awaiting_recruiter_action.
documents[].submitted_atstring or nullrequired
ISO-8601 timestamp of the latest submission, or null if nothing has been uploaded for this slot.
documents[].content_urlstring or nullrequired
Absolute URL — set whenever ANY submission exists, whatever its status. Never a signal that the document was accepted.
cvobject or nullrequired
null when no CV is on file, or on file but not currently servable. Fetch its bytes at Retrieve the CV.
cv.file_namestring or nullrequired
Always null today — nothing in this repo’s CV writer stamps the original filename.
cv.content_typestringrequired
One of the accepted CV types (PDF or Word), derived from the stored file.
cv.sizeinteger or nullrequired
Byte count actually stored.
cv.content_urlstringrequired
Absolute URL for GET .../cv.
references[].organisationstring or nullrequired
references[].rolestring or nullrequired
The referee’s own position, not the candidate’s.
references[].statusstringrequired
pending_send, sent, received, bounced, flagged, or completed.
references[].received_atstring or nullrequired
references[].reply_textstring or nullrequired
The referee’s reply, with contact details redacted.
reference_requirements.requiredintegerrequired
How many referees this candidate needs in total.
reference_requirements.receivedintegerrequired
reference_requirements.outstandingintegerrequired
0 once every required slot is settled.
compliance_pack.readybooleanrequired
Documents-only readiness — an outstanding reference never blocks this.
compliance_pack.urlstring or nullrequired
Set only when ready.
compliance_pack.blockersstring[]required
Bare document names still blocking readiness.
chase.docs_attemptsintegerrequired
Consecutive unanswered document-chase reminders sent so far.
chase.docs_attempts_maxintegerrequired
This candidate’s resolved cap.
chase.reference_attemptsintegerrequired
The highest attempt count across this candidate’s referees.
chase.reference_attempts_maxintegerrequired
Follow-up chases after the first email.