QDX

A lab behind one API.

Order tests and get results in the format your stack already speaks: PDF, HL7, FHIR or plain text.

Ordering

One call, one requisition.

Send the patient, the tests and the clinician. The response carries the requisition number and links to its PDFs.

  • Your own IDsPatient and order references you choose.Available
  • Patient in the same callCreated if new, or named if on file.Available
  • Test questions answeredSpecimen source and the like, with the order.Available

Ordering in the API

POST /v1/orders
curl https://api.qdx.systems/v1/orders \
  -H "Authorization: Bearer qrt_…" \
  -H "Idempotency-Key: order-1001" \
  -d '{
    "reference": "ORDER-1001",
    "patient": { "reference": "P-0001" },
    "testCodes": ["7600"],
    "clinician": {
      "name": "Example, Casey",
      "npi": "1234567893" }
  }'

# 201 Created
{ "state": "placed",
  "requisition": "T0001-3418",
  "documents": {
    "requisition": "…/requisition",
    "holdLetter": "…/hold-letter" } }

Sandbox

Break things on purpose.

A test key gets you a simulated lab with the same requests and answers as live, without a real patient in sight.

A full simulator

Every document a real PDF, stamped TEST MODE.

Results on demand

No waiting on a lab to see your webhooks fire.

Kept apart

Test data never shows to live keys, and the reverse.

GET /v1/results/{id}/…
# 1. a signed webhook arrives
POST /your/webhook
{ "type": "result.available",
  "data": { "resultId": "8812345",
            "status": "Final" } }

# 2. fetch it in the format you need
GET /v1/results/8812345/report  # PDF
GET /v1/results/8812345/hl7     # HL7 v2
GET /v1/results/8812345/fhir    # FHIR R4
GET /v1/results/8812345/text    # text

# /hl7, abridged
MSH|^~\&|QDX|QDX||QDX|…|ORU^R01|…|P|2.3
PID|1|P-0001|…||SAMPLE^JORDAN
OBR|1|T0001-3418|8812345|7600^Lipid panel
OBX|1|NM|…^^13457-7^LDL^LN||96|mg/dL
OBX|2|NM|…^^2085-9^HDL^LN||58|mg/dL
Results

Results without polling.

A signed webhook fires when a result is ready. Fetch it in the format you need, or have us push it to your systems.

  • The reportThe lab's PDF, ready to file.Available
  • HL7 and FHIRORU^R01 or an R4 bundle, coded in LOINC.Available
  • Plain textFor messages and alerts.Available

Results in the API

Building blocks

Boring in all the right places.

The parts every lab integration has to get right, already built and tested on our side.

Clinicians

NPIs checked with the registry.

Available

Patient records

Duplicates caught before they're made.

Available

Test lookup

By name or code, with its questions.

Available

Event signing

HMAC-SHA256 on every event.

Available

HL7 in, too

ORM^O01 in, an ACK right back.

Available

Stable v1

Breaking changes only go to /v2.

Available
Deliveries

Receipts for every result.

One call shows where a result went, whether it arrived and how many tries it took.

  • ConfirmedEach delivery recorded with its proof.Available
  • RetriedA failed send is tried again.Available
  • Per clinicianTheir own destinations, added on top.Available

Deliveries in the API

GET …/{id}/deliveries
{ "resultId": "8812345",
  "deliveries": [
  { "channel": "hl7-push",
    "state": "delivered",
    "attempts": 1,
    "proof": { "transport": "https",
               "status": 200,
               "bytes": 1184 } },
  { "channel": "fax",
    "state": "delivered",
    "attempts": 2,
    "proof": { "confirmation":
               { "delivered": true } } },
  { "channel": "email",
    "state": "delivered",
    "attempts": 1,
    "proof": { "attached": "pdf" } }
] }

Your first result, in minutes.

Run the examples from the reference against the simulator and watch a sample result come back.