Skip to main content
TalentUnveiled sends HTTP POST requests to your configured endpoint URL whenever events occur in the platform. Use webhooks to keep your systems in sync — for example, to update your ATS when a candidate completes an interview.

Enable Webhooks

1

Open Developer Settings

In the HR portal, open the sidebar and navigate to Developer Settings, then select the Webhooks tab.
Developer Settings page with the Webhooks tab active
2

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.
Create Webhook dialog with Endpoint URL field
3

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.
Signing secret dialog with copy button
The signing secret is only shown once. Store it in a secure location immediately — you cannot retrieve it later. If you lose it, delete the webhook and create a new one from the Webhooks page in Developer Settings.
4

Start receiving events

Once your endpoint is registered, TalentUnveiled will send HTTP POST requests to your URL whenever subscribed events occur. Your endpoint should return a 2xx status code to acknowledge receipt.

Available Webhooks

All webhook payloads share this envelope structure:
Each request includes the following headers:
Every endpoint you register receives all event types. Branch on the event_type field and ignore the events you don’t handle.

job_application.deleted

Fired when an HR portal user deletes a job application. The payload is a snapshot of the application captured immediately before the record is removed. Treat this as the definitive “record is gone” signal — any associated interview, CV evaluation, and insights data are removed along with the application.

interview.completed

Fired when a candidate’s AI interview finishes and scores are ready. The payload carries enough to triage (score, eligibility, a short summary, strengths/weaknesses/red flags) without a follow-up call. For the full transcript, per-criteria scores, and per-question detail, fetch the interview by payload.interview.id via the API.

interview_v2.completed

Fired when a candidate’s interview finishes on the v2 (legacy) interview pipeline. Unlike interview.completed, this is a lightweight notification: it carries identifiers plus the candidate and job, but no scores. Fetch the score, transcript, and per-criteria detail via the API using payload.interview_call_id.
Knocked-out candidates also produce this event with status: "completed" — there is no separate knocked_out status. Whether the candidate passed or was knocked out is only derivable via the API.

Verifying Signatures

Always verify webhook signatures before processing a payload. This ensures the request was sent by TalentUnveiled and hasn’t been tampered with.
The signature is computed over a specific message string using HMAC-SHA256:
  1. Extract the webhook-id, webhook-timestamp, and webhook-signature headers from the request.
  2. Concatenate the signed content: {webhook-id}.{webhook-timestamp}.{body}
  3. Compute the HMAC-SHA256 hash using your base64-decoded signing secret.
  4. 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 200 status 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 job_application.deleted, interview.completed, and interview_v2.completed are currently available. The events below are planned for future releases.
Need a specific event prioritized? Contact us at support@talentunveiled.com.