Docs · API · Interview Kits
Interview Kits.
A structured 30-minute interview per candidate, grounded in their actual CV— not a generic question bank. Six question categories with model answers, scoring rubrics, and red flags, plus "claims to probe" anchored to verbatim CV quotes.
Generate a kit#
POST
/v1/applications/{id}/interview-kit| Field | Type | Description | |
|---|---|---|---|
| language | string | optional | Kit language ("en", "ar", …). Defaults to the job post's language. |
curl -X POST https://hire.whizztech.ai/v1/applications/e2c81f47-0a95-4d36-b8e1-6f24a0d7c593/interview-kit \
-H "Authorization: Bearer $HIRE_KEY" \
-H "Content-Type: application/json" \
-d '{ "language": "en" }'{
"object": "interview_kit",
"kit_id": "c7e2a940-8b13-4f6d-95a1-2d80e4b7c358",
"run_id": "9f4b2c81-5e07-4a3d-b6c9-70e1d8a52f43",
"language": "en",
"credits_charged": 12,
"replayed": false
}Costs 12 credits, debited up front and refunded if the run fails. The application must have a CV (400 no_cv otherwise). Generation takes tens of seconds — poll GET /v1/runs/{run_id} or wait for the job.succeeded webhook. An Idempotency-Key header makes retries safe.
Retrieve a kit#
GET
/v1/interview-kits/{id}curl https://hire.whizztech.ai/v1/interview-kits/c7e2a940-8b13-4f6d-95a1-2d80e4b7c358 \
-H "Authorization: Bearer $HIRE_KEY"{
"id": "c7e2a940-8b13-4f6d-95a1-2d80e4b7c358",
"object": "interview_kit",
"status": "ready",
"application_id": "e2c81f47-0a95-4d36-b8e1-6f24a0d7c593",
"job_post_id": "4d1a8f36-9e02-47b8-b7c4-3a92d5e60f18",
"run_id": "9f4b2c81-5e07-4a3d-b6c9-70e1d8a52f43",
"language": "en",
"content": {
"durationMinutes": 30,
"plan": [
{ "minutes": 5, "section": "easy" },
{ "minutes": 10, "section": "cv_based" },
{ "minutes": 10, "section": "scenario" },
{ "minutes": 5, "section": "hard" }
],
"sections": {
"easy": [
{
"question": "Walk me through your current fleet — size, mix, and what a normal Tuesday looks like.",
"modelAnswer": "Concrete numbers, vehicle classes, daily cadence …",
"rubric": "5: specific & fluent; 3: general but credible; 1: vague",
"redFlags": ["Cannot state fleet size", "Describes only supervision, no ownership"]
}
],
"cv_based": [
{
"question": "You list a 140-vehicle fleet across three emirates — which telematics stack did you run it on, and what did you change about it?",
"modelAnswer": "Names the platform, alert thresholds, and at least one configuration decision with a reason …",
"rubric": "5: systems + trade-offs; 3: names tools; 1: generic",
"redFlags": ["Cannot name any system"]
}
],
"scenario": [
{
"question": "It's 06:40, 12 drivers call in sick, and your two biggest clients have 08:00 SLAs. Take me through your first hour.",
"modelAnswer": "Triage by SLA penalty, reserve pool, client comms before the breach …",
"rubric": "5: prioritized plan + comms; 3: plan only; 1: improvises",
"redFlags": ["No client communication step"]
}
]
},
"probes": [
{
"cvClaim": "Reduced fleet downtime by 35%",
"quote": "reduced unplanned downtime by 35% year-over-year",
"question": "35% from what baseline, measured how, and over what period?"
}
]
},
"created_at": "2026-07-10T10:31:02.000Z"
}content is {} while status is generating and fills in when the run succeeds.
Kit structure#
| Field | Type | Description |
|---|---|---|
| durationMinutes | integer | Always 30 — a plan an interviewer can actually run. |
| plan | array | {minutes, section} timing plan across the sections. |
| sections | object | Question banks keyed by category: easy · medium · hard · scenario (real-life situations) · cv_based (built from this candidate's CV) · job_based (built from the JD). Each question carries modelAnswer, rubric (what a 1/3/5 answer looks like), and redFlags. |
| probes | array | {cvClaim, quote, question}— specific CV claims worth pressure-testing, each anchored to the verbatim quote it came from. "Says 'led migration' — probe scope, team size, their actual role." |