Skip to main content

How It Works

Webhooks let you receive automatic notifications when events occur in Veridox, such as a file analysis completing.
1

Create a webhook configuration

An organisation owner creates a webhook configuration via the API, providing a destination URL where you want to receive events.
2

Store your signing secret

Veridox provisions a signing secret (format: whsec_{32-char-alphanumeric}) and returns it once in the creation response. After that, only a prefix is shown for identification.
The secret is only shown once at creation time. Store it securely — you cannot retrieve it again.
3

Receive events

When events occur, Veridox sends a POST request to your URL with:
  • A JSON payload in the body
  • An x-vdx-signature header containing an HMAC-SHA256 hex digest of the raw request body, signed with your webhook secret
4

Verify and process

You verify the signature on your server to confirm the request genuinely came from Veridox and hasn’t been tampered with, then process the event.

Event Types

Payload Structure

When a file analysis completes successfully, Veridox delivers a payload like this:
For file.enrichment.failed events, the payload includes an error field instead of results.
The highlights field within results is omitted when the analysis did not produce any highlights.

Module Evidence

Each entry in modules carries its findings alongside the evidence that supports them: A finding’s evidence_refs are IDs that point back into the module’s evidence so you can resolve each claim to its source:
  • IDs like q1.0 resolve against search_evidence.results (matched on result_id).
  • IDs like v1 resolve against verification_evidence.checks (reserved for future use).
The results.search_evidence_summary object is a cross-module roll-up of the same queries and results, keyed by module_id — useful for rendering an overview without walking every module.
search_evidence_summary and a query’s answer field may be null (or, for analyses produced before these fields existed, absent). Treat both as optional when parsing.

Signature Verification

The signature is computed as:
You compare the x-vdx-signature header value against your own computed HMAC. Always use a timing-safe comparison to prevent timing attacks.

Best Practices

Store secrets securely — the signing secret is shown once at creation time and cannot be retrieved again
Always verify signatures — validate every incoming request before processing the payload
Use timing-safe comparison — use timingSafeEqual (Node.js) or hmac.compare_digest (Python) to prevent timing attacks
Return 2xx quickly — acknowledge receipt immediately and do heavy processing asynchronously
Only one active webhook configuration is allowed per organisation at a time. Creating a new configuration deactivates the previous one.