Quickstart
Create a test key, invite a candidate and read the result in about five minutes.
This walk-through uses a test key, so nothing you do here costs credits.
1. Create a test key
In the dashboard, open Developers → API keys, choose Test, and create a key with the interviewers:read, invitations:send and results:read scopes. Copy the key when it appears. Heizen shows it once.
Keep keys on your server. Put the key in an environment variable such as HEIZEN_API_KEY and never ship it to a browser or mobile app.
2. Check the key
curl https://api.interviewer.heizen.tech/api/v1/ping \
-H "Authorization: Bearer $HEIZEN_API_KEY"{ "object": "ping", "ok": true, "livemode": false, "api_version": "2026-10-01" }3. Pick an interviewer
An interviewer is the interview you designed in the dashboard: the role, the questions and how it is scored.
curl "https://api.interviewer.heizen.tech/api/v1/interviewers?limit=5" \
-H "Authorization: Bearer $HEIZEN_API_KEY"Note the id of the one you want. It looks like int_….
4. Invite a candidate
curl https://api.interviewer.heizen.tech/api/v1/invitations \
-H "Authorization: Bearer $HEIZEN_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: application-981" \
-d '{
"interviewer_id": "int_…",
"candidate": { "email": "ada@example.com", "name": "Ada Lovelace" },
"external_ref": "application-981",
"send_email": false
}'The response is an invitation. Its url is the candidate's interview link. With send_email: false Heizen does not email it, so you can open the link yourself and take the interview. Leave send_email out to have Heizen email the candidate.
Want the link to close sooner than the default 14 days? Add "expires_at": "2026-10-15T18:00:00Z". It must be in the future and no more than 90 days away.
5. Read the result
When the interview finishes, the session moves to processing and then completed, and a result appears.
curl "https://api.interviewer.heizen.tech/api/v1/sessions?external_ref=application-981" \
-H "Authorization: Bearer $HEIZEN_API_KEY"
curl https://api.interviewer.heizen.tech/api/v1/sessions/ses_…/result \
-H "Authorization: Bearer $HEIZEN_API_KEY"Polling works, but a webhook on result.ready is simpler and faster.
The same thing in TypeScript
import { Heizen } from "@heizen/interviewer";
const heizen = new Heizen({ apiKey: process.env.HEIZEN_API_KEY! });
const { data: [interviewer] } = await heizen.interviewers.list({ limit: 1 });
const invitation = await heizen.invitations.create({
interviewer_id: interviewer!.id,
candidate: { email: "ada@example.com", name: "Ada Lovelace" },
external_ref: "application-981",
send_email: false,
});
console.log(invitation.url);See SDKs for the full client.
Going live
Create a live key (hz_live_…) with the same scopes and swap it in. Live invitations use one credit when the candidate starts the interview. Add a webhook endpoint in live mode too; test and live endpoints are separate.