QDX

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

Webhooks in the API

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 to your webhook URL
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

What stays stable

First to know.

Your app hears about each result before anyone in the office thinks to check.