Registering a webhook endpoint
Register the HTTPS endpoint that should receive events yourself, through the Partner API:audience to partner so the endpoint receives Partner API case events; internal platform
events are never mixed into partner delivery. See
Configuring webhooks for the full request and field reference.
Authenticating webhook requests
When you register your endpoint, you supply a secret key (theapiKey). TruEnroll includes that key as an x-api-key header on every webhook
request it sends to you. Verify it on each request and reject anything that doesn’t match:
Event names
You only receive events for features you requested. If you submitted a case with
features=["extraction","forensics"], you won’t receive case.translation.* events.Event payload
All events share the same envelope. Event-specific fields are carried insidedata
alongside the common fields:
string
The event name from the table above. Use this to route incoming events in your handler.
string
TruEnroll’s unique case identifier. Use this to call the result endpoint.
string | null
The
externalId you provided at submission time, or null if none was provided.string
The upload within the case that this event relates to.
string (ISO 8601)
The timestamp when the processing event occurred internally.
string
Present on extraction events, and on forensics/translation events when classification ran.
Identifies the specific credential the result belongs to.
string
Present on forensics and translation events. Identifies the source file the result was
produced from.
Depending on the event,
data may carry additional fields. For example,
documentIds appears on case.classification.completed, and an error string on *.failed events.
Treat data as an open object and read only the fields you need.Event ordering
Events for different features within the same case arrive independently and in any order. Forensics and extraction run in parallel, socase.forensics.completed may arrive before
case.extraction.completed or vice versa.
Do not assume ordering between events for different features. Handle each event on its own
merits.
Events for the same feature on the same case are ordered: you won’t receive
case.extraction.completed before case.extraction.failed for the same document.
Delivery & retries
TruEnroll considers a delivery successful when your endpoint returns a2xx status. If the
delivery fails (non-2xx, a timeout, or a connection error), TruEnroll retries up to 5
times before giving up. Each attempt has a 300-second timeout.
Because deliveries can be retried, the same event may reach your endpoint more than once. Make
your handler idempotent: processing the same event twice should produce the same outcome.
Deduplicate on a stable key such as eventName + data.uploadId (+ data.credentialId or
data.fileId where present).
Handling events
A minimal webhook handler:Classification suppression
If you submitted an upload withclassify: false, TruEnroll will not emit
case.classification.completed or case.classification.failed events for that upload.
What to do when a stage fails
Acase.*.failed event means that stage is done and won’t be retried automatically.
Other stages may still complete:
You can still call the result endpoints for stages that succeeded. Use the overall case
status (GET /cases/{id}) to determine whether to resubmit or flag for manual review.