Specifying a webhook URL
When creating an interview flow you can specify awebhook_url. This can be used to receive updates related to interviews.
Webhook Authentication
You can specify awebhook_secret_key to verify that webhook requests are genuinely from Ribbon. When a secret key is configured, Ribbon will include an X-Ribbon-Signature header with each webhook request.
Verifying the signature
TheX-Ribbon-Signature header contains an HMAC-SHA256 signature of the request body using your secret key. To verify the webhook is authentic:
- Get the raw request body (as a string)
- Compute the HMAC-SHA256 hash using your secret key and the request body
- Compare the computed signature with the
X-Ribbon-Signatureheader value
Code examples
PythonSecurity best practices
- Always verify signatures in production to ensure webhooks are from Ribbon
- Use a strong, random secret key (at least 32 characters recommended)
- Use constant-time comparison functions (like
hmac.compare_digestin Python orcrypto.timingSafeEqualin Node.js) to prevent timing attacks - Keep your secret key secure and never expose it in client-side code
Webhook payload
The webhook payload returns theinterview_flow_id, interview_id, interview_link and status.
⚠️ interviewee_email_address, interviewee_first_name and interviewee_last_name will be null unless the candidate information were provided when creating the interview session (POST interviews) or if the candidate went through the full platform flow where candidate information is requested.
We currently support three webhook event types: interview_processed, video_processed, and candidate_status_updated
Webhook event types
interview_processed This event occurs after an interview has been completed and the interview has been successfully processed and analyzed by Ribbon. If video was collected during the interview the video will not be available yet.
Payload example
video_processed This event only occurs if you are collecting video during the interview (is_video_enabled is true). The event is sent after video processing is complete and when the video_url is available.
Payload example
candidate_status_updated
This event occurs anytime a candidate’s status changes within the candidate pipeline (for example: shortlisted → accepted). The event includes both the previous status and the new status so you can track transitions precisely.
Payload example
Webhook event ordering
You will explicitly always receive the events in this order:interview_processedvideo_processed
Supported Voices
