Skip to main content
WEBHOOK

Body

application/json

Event payload POSTed to your configured webhook URL for interview/assessment lifecycle events.

id
string
required

interview_result id this event is about.

interview_id
string
required

Interview definition id (question_set_id).

question_set_id
string
required

Same as interview_id (the interview_def_set id).

status
string
required

Result lifecycle status (e.g. active, draft).

interview_status
string | null
required

Coach/interview status (coach_status), e.g. completed, "completed, stopped early", failed, abandoned.

processing_status
string | null
required

AI processing status (e.g. completed).

profile_interview_id
string | null
required

Candidate profile_interview id.

profile_id
string | null
required

Candidate profile id (when a registered profile is linked).

score
number | null
required

Overall interview score.

ai_analysis_recruiter_score
number | null
required

Recruiter-facing AI score (score_interview_ai).

ai_analysis
string | null
required

Candidate-facing AI analysis.

ai_analysis_recruiter
string | null
required

Recruiter-facing AI analysis.

recruiter_go_next_round
boolean | null
required

Recruiter decision to advance the candidate to the next round.

pdf_export_url
string | null
required

URL of the generated PDF report. Provided only when the interview is configured to generate a PDF report; null otherwise.

reason
string | null
required

Which watched field(s) changed to trigger this delivery (change reason).

candidate_external_id
string | null

Your external id for the candidate (present when a candidate is linked).

candidate_name
string | null

Candidate name (present when a candidate is linked).

candidate_email
string | null

Candidate email (present when a candidate is linked).

candidate_phone_number
string | null

Candidate phone number (present when a candidate is linked).

ai_analysis_other
any | null

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.

ai_analysis_recruiter_why_hire
any | null
deprecated

Reasons to hire (list). Deprecated: a copy of ai_analysis_other.strengths_concerns.strengths, kept for existing integrations.

ai_analysis_recruiter_why_not_hire
any | null
deprecated

Reasons not to hire (list). Deprecated: a copy of ai_analysis_other.strengths_concerns.concerns, kept for existing integrations.

Response

200

Return any 2xx status to acknowledge receipt. Non-2xx or a timeout causes the delivery to be retried.