How It Works
Webhooks let you receive automatic notifications when events occur in Veridox, such as a file analysis completing.Create a webhook configuration
An organisation owner creates a webhook configuration via the API, providing a destination URL where you want to receive events.
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.Receive events
When events occur, Veridox sends a
POST request to your URL with:- A JSON payload in the body
- An
x-vdx-signatureheader containing an HMAC-SHA256 hex digest of the raw request body, signed with your webhook secret
Event Types
| Event type | Description |
|---|---|
file.enrichment.success | File analysis completed successfully |
file.enrichment.failed | File analysis encountered an error |
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 inmodules carries its findings alongside the evidence that supports them:
| Field | Type | Description |
|---|---|---|
findings | array | Structured findings. Each has an alert_type, a severity (Informational, Low, Medium, or High), a description, a severity_justification, an evidence list, and evidence_refs. |
search_evidence | object | null | Audit trail of the search and grounding queries run for this module — the queries, their results, any failures, and timing. null when the module performed no search. |
verification_evidence | object | null | Reserved for registry verification check results. Currently always null. |
evidence_refs are IDs that point back into the module’s evidence so you can resolve each claim to its source:
- IDs like
q1.0resolve againstsearch_evidence.results(matched onresult_id). - IDs like
v1resolve againstverification_evidence.checks(reserved for future use).
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:x-vdx-signature header value against your own computed HMAC. Always use a timing-safe comparison to prevent timing attacks.
- Node.js
- Python
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 attacksReturn 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.