Enable Webhooks
Open Developer Settings
In the HR portal, open the sidebar and navigate to Developer Settings, then select the Webhooks tab.

Create a webhook endpoint
Click Create Webhook. In the dialog that appears, enter your Endpoint URL (e.g., 
https://your-app.com/webhooks) and confirm.
Save your signing secret
After creation, a dialog displays your signing secret (prefixed with 
whsec_). It is automatically copied to your clipboard. You’ll use this to verify webhook signatures.
Available Webhooks
All webhook payloads share this envelope structure:| Header | Description |
|---|---|
Content-Type | application/json |
webhook-id | Unique message ID (e.g., msg_a1b2c3...) |
webhook-timestamp | Unix timestamp in seconds |
webhook-signature | HMAC-SHA256 signature (e.g., v1,base64...) |
pre_screening.completed
Fired when a candidate finishes pre-screening questions for a job application.
Example payload
Example payload
| Field | Description |
|---|---|
payload.application | The job application that triggered the event, including its current status |
payload.candidate | Contact details for the candidate |
payload.pre_screening.knockout_count | Number of answers that matched knockout criteria |
payload.pre_screening.questions | Array of questions with the candidate’s answers. options is populated for multiple-choice questions |
payload.job | The job listing the candidate applied to |
Verifying Signatures
The signature is computed over a specific message string using HMAC-SHA256:- Extract the
webhook-id,webhook-timestamp, andwebhook-signatureheaders from the request. - Concatenate the signed content:
{webhook-id}.{webhook-timestamp}.{body} - Compute the HMAC-SHA256 hash using your base64-decoded signing secret.
- Compare the result against the signature header using a constant-time comparison function.
Testing Webhooks
During local development, use a tunnel service like ngrok or localtunnel to expose your local server to the internet and receive webhook deliveries.- Respond with a
200status code as quickly as possible, then process the payload asynchronously. Webhook deliveries will time out if your endpoint takes too long to respond. - Log incoming payloads during development to inspect the data structure before writing your handler logic.
Design your webhook handler to be idempotent. Use the
webhook-id header to detect duplicate deliveries — the
same event may be sent more than once during retries.Retries & Deactivation
Failed deliveries are retried up to 6 times with exponential backoff, starting at 2 minutes and increasing by a factor of 4 up to a maximum interval of 8 hours.A
2xx response is considered successful. Any other response — including 4xx, 5xx, or a timeout — triggers a
retry.Upcoming Events
Only
pre_screening.completed is currently available. The events below are planned for future releases.| Event | Description |
|---|---|
interview.completed | Fired when a candidate’s AI interview finishes and scores are ready |
cv_evaluation.completed | Fired when a CV evaluation finishes processing |
insights.completed | Fired when combined AI insights are generated for an application |
application.status_changed | Fired when an application’s status changes (e.g., moved to shortlisted) |

