{
"id": "<string>",
"interview_id": "<string>",
"question_set_id": "<string>",
"status": "<string>",
"interview_status": "<string>",
"processing_status": "<string>",
"profile_interview_id": "<string>",
"profile_id": "<string>",
"score": 123,
"ai_analysis_recruiter_score": 123,
"ai_analysis": "<string>",
"ai_analysis_recruiter": "<string>",
"recruiter_go_next_round": true,
"pdf_export_url": "<string>",
"reason": "<string>",
"candidate_external_id": "<string>",
"candidate_name": "<string>",
"candidate_email": "<string>",
"candidate_phone_number": "<string>",
"ai_analysis_other": "<unknown>",
"ai_analysis_recruiter_why_hire": "<unknown>",
"ai_analysis_recruiter_why_not_hire": "<unknown>"
}Interview answers collected
Sent when the candidate finishes the interview and their raw answers are collected, before final AI scoring.
{
"id": "<string>",
"interview_id": "<string>",
"question_set_id": "<string>",
"status": "<string>",
"interview_status": "<string>",
"processing_status": "<string>",
"profile_interview_id": "<string>",
"profile_id": "<string>",
"score": 123,
"ai_analysis_recruiter_score": 123,
"ai_analysis": "<string>",
"ai_analysis_recruiter": "<string>",
"recruiter_go_next_round": true,
"pdf_export_url": "<string>",
"reason": "<string>",
"candidate_external_id": "<string>",
"candidate_name": "<string>",
"candidate_email": "<string>",
"candidate_phone_number": "<string>",
"ai_analysis_other": "<unknown>",
"ai_analysis_recruiter_why_hire": "<unknown>",
"ai_analysis_recruiter_why_not_hire": "<unknown>"
}Body
Event payload POSTed to your configured webhook URL for interview/assessment lifecycle events.
interview_result id this event is about.
Interview definition id (question_set_id).
Same as interview_id (the interview_def_set id).
Result lifecycle status (e.g. active, draft).
Coach/interview status (coach_status), e.g. completed, "completed, stopped early", failed, abandoned.
AI processing status (e.g. completed).
Candidate profile_interview id.
Candidate profile id (when a registered profile is linked).
Overall interview score.
Recruiter-facing AI score (score_interview_ai).
Candidate-facing AI analysis.
Recruiter-facing AI analysis.
Recruiter decision to advance the candidate to the next round.
URL of the generated PDF report. Provided only when the interview is configured to generate a PDF report; null otherwise.
Which watched field(s) changed to trigger this delivery (change reason).
Your external id for the candidate (present when a candidate is linked).
Candidate name (present when a candidate is linked).
Candidate email (present when a candidate is linked).
Candidate phone number (present when a candidate is linked).
Session-level AI analyses keyed by analysis name (jsonb). strengths_concerns: { strengths: string[], concerns: string[] } (0-4 items each, recruiter-facing; called hiring_reasons with reasons_to_hire / reasons_not_to_hire inside before 2026-09-15, and rows written before then may still carry that shape). takeaways: { what_went_well: string[], next_steps: { text, priority: impact | quick | longterm, guidance: { kind: say | structure | length | exercise | perspective, text }, proof? }[], fixed?: string[] } (coaching / persona sessions, learner-facing; proof entries are { kind: quote | ai_summary | transcript_ref | document, text, ref?: { result_question_id } }; fixed lists the steps from the previous attempt that the learner did this time). multi_department: the multi-department-selection analysis. score_rationale: the rubric bracket of the session score and evidenced counts. key_statement: { quote, result_question_id }, the one verbatim quotation a recruiter would remember the candidate by (interview / persona_interview, absent when nothing distinctive was said). Further keys may be added.
Reasons to hire (list). Deprecated: a copy of ai_analysis_other.strengths_concerns.strengths, kept for existing integrations.
Reasons not to hire (list). Deprecated: a copy of ai_analysis_other.strengths_concerns.concerns, kept for existing integrations.
Response
Return any 2xx status to acknowledge receipt. Non-2xx or a timeout causes the delivery to be retried.