Know the moment a result is in.
A signed webhook tells your app when a result is ready and when an order moves, with no polling needed.
Events
Two events to listen for.
Between them they cover the whole order. Answer any call with a 2xx to accept it.
- result.availableOnce per result, with its links.Available
- order.status_changedThe latest state of an order.Available
- Signed with your secretHMAC-SHA256, checked in a few lines.Available
Reliability
Outages don't lose events.
No 2xx within 10 seconds counts as a miss. We back off and try again, then mark the event failed and alert our team.
Retried for a day
Up to six hours apart.
Duplicates easy to skip
Dedupe on QDX-Delivery.
Test events
Flagged with "mode": "test".
POST /your/webhook
QDX-Event: result.available
QDX-Delivery: 6f1c2b9e-1d3a-4c55-9a0e-…
QDX-Signature: t=1791136800,v1=5e8c…
{
"id": "6f1c2b9e-1d3a-4c55-9a0e-…",
"type": "result.available",
"createdAt": "2026-10-03T18:00:00.000Z",
"data": {
"resultId": "8812345",
"requisition": "T0001-3418",
"reference": "ORDER-1001",
"status": "Final",
"reportedAt": "2026-10-03T17:58:00Z",
"links": {
"result": "…/results.get",
"report": "…/8812345/report" }
}
}
Payload
The same envelope, each time.
Parse it once. Your handler keeps working for as long as version 1 lasts.
- A stable envelopeid, type, createdAt and data.Available
- Timestamped signatureReject anything over five minutes old.Available
- Additive onlyNew fields may appear; none are removed.Available
First to know.
Your app hears about each result before anyone in the office thinks to check.