What are Webhooks?
Webhooks are automated messages sent from one system to another when a specific event occurs. Think of them as “push notifications” for your servers. Instead of your system constantly asking (polling) the Talview API if there are new updates, Talview pushes that data to your system the moment it happens. This approach is significantly more efficient, reduces API load, and ensures your integration reacts to platform events — like a candidate finishing an exam — in real-time.Talview Webhooks
Talview uses webhooks to notify your system about critical lifecycle events across assessments, interviews, forms, payments, and more. Before diving into individual events, review the Webhook Concepts page for important behavioral rules such as payload visibility, subordinate bubble-up, and versioned snapshots.Available Webhook Events
The following table lists all events that are currently available for subscription, grouped by service:Planned Events
The following root objects have been identified for future webhook support but are not yet available for subscription:These events are under development. Contact your Talview representative for timeline information.
Technical Implementation
HTTP Request Pattern
All webhooks are delivered using a standard HTTP request pattern:- Method: Defaults to
POST(configurable toPUTorPATCHduring registration). - Body: The raw JSON payload of the event. There is no outer “envelope” or wrapper.
Verifying Webhook Signatures
Every delivery is signed with HMAC-SHA256 so your endpoint can confirm a request genuinely came from Talview and the body wasn’t altered in transit. Two headers are added to every request, on top of any custom headers configured on the subscription:Custom headers set on a subscription’s target (
hook.target.headers) are merged in first, then Content-Type, X-Hook-Timestamp, and X-Hook-Signature are applied on top — a custom header can never override the security headers or the request body encoding.Secret
Each subscription target has its own signing secret — secrets are per-target, not per-application. You receive the secret in thetarget.secret field of the hook_subscribe response. It’s returned every time you call hook_subscribe for that target, including on a repeat/idempotent subscription, so you can always re-fetch it by re-subscribing. Only TENANT_ADMIN and PLATFORM_ADMIN callers can see it.
To rotate a secret, update the target with the update_hook_target mutation.
Computing the Signature
timestampis the exact value sent inX-Hook-Timestamp.raw_bodyis the exact request body as transmitted — sign the literal bytes you received, not a re-serialized version of the parsed JSON, since key ordering or whitespace differences will produce a different digest.

