API v2 Reference
API v2 is the second generation of the TalentUnveiled public API. It is reshaped natively around the v3 interview engine (competencies, qualifications, and eligibility) and adds full write access to jobs, applications, interview configuration, and webhooks.API v1 remains fully supported and unchanged. v2 is a separate, independent version — migrate when you are ready. The two share the same API keys.
Base URL
Authentication
Authentication is identical to v1: include your API key in theAuthorization header as a bearer token. A v2 key authenticates as the user who created it and can read and write that user’s organization data.
What’s new in v2
- v3-native interview results.
GET /applications/{id}/interviewreturns the v3 result: anoverall_score(0–5, ornullwhen not gradable), anis_eligiblegate, and per-criterioncriteria_results. Each criterion is a competency (scored 1–5 against a rubric) or a qualification (pass/fail). Read theoutcomefield first:scoredmeans look atscore/passed;not_assessedmeans there wasn’t enough evidence — treat it as unknown, never as a failure. - Eligibility, not just score.
is_eligible: falsemeans the candidate failed a required criterion. Surface it to recruiters — never auto-reject on it.ineligibility_reasonsnames exactly which required criteria failed. - Three independent scoring sub-resources of an application:
/interview,/cv-evaluation, and/insights— each with its own readinessstatus. - AI generation previews.
POST /jobs/{id}/interview-config/criteria/generateand.../questions/generatereturn AI-generated criteria/questions for review without saving them. Persist the (edited) result with the bulkPUT. - Idempotency. Send an
Idempotency-Keyheader onPOSTcreates so retries don’t double-create. A repeat with the same body replays the original response (Idempotent-Replay: true); a repeat with a different body returns409. - Webhooks. Subscribe an endpoint to events and receive signed deliveries. See Webhooks.
Asynchronous results
An interview unfolds over minutes to days (scheduling, phone retries). Results are eventually consistent, so the scoring sub-resources (/interview, /cv-evaluation, /insights) never 404 while work is in progress.
While no result exists yet, the endpoint returns 200 with a small envelope — { "status": …, "reason": …, "result": null }:
Once the result is ready, the body is the full result object — not this envelope. Its own
status is the interview outcome and may be a terminal non-success (completed, but also unreachable, failed, opted_out, …). So: keep polling while the envelope status is processing; stop and treat it as no-result on unavailable (read reason); otherwise you have received the result object — branch on its status, and never wait for the envelope to report "completed" (it never does).
A 404 means the application itself is unknown (or belongs to another organization) — not “not ready yet”. The recommended integration is webhooks first, polling as a fallback.
Pagination
List endpoints use limit/offset pagination and always return a bounded page.limit defaults to 50 and is capped at 200 — a larger limit is silently clamped to 200, not rejected. Pass ?limit=N&offset=M to page, and follow next until it is null (or page until you have count rows) to read the full set. Responses use the standard { count, next, previous, results } envelope.
Errors
Every error response is a JSON array of{ code, detail, attr } objects (attr names the offending field for validation errors, otherwise null):
Endpoint reference
Browse every endpoint, with request and response schemas, in the API v2 reference (generated from the OpenAPI specification). Scores are on a 1–5 scale for criteria; the aggregateoverall_score ranges 0–5 (or null).
