Skip to main content

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 to PUT or PATCH during 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 the target.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

  • timestamp is the exact value sent in X-Hook-Timestamp.
  • raw_body is 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.

Verification Example (Node.js)

Always use a constant-time comparison (like crypto.timingSafeEqual) rather than === when comparing signatures, to avoid leaking timing information.
Signature verification is a recommendation, not an enforced requirement — endpoints that don’t check it keep receiving deliveries unaffected. Talview’s outbound HTTPS client currently does not verify your endpoint’s TLS certificate.