A lab behind one API.
Order tests and get results in the format your stack already speaks: PDF, HL7, FHIR or plain text.
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
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.
# 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/dLResults 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
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.
AvailablePatient records
Duplicates caught before they're made.
AvailableTest lookup
By name or code, with its questions.
AvailableEvent signing
HMAC-SHA256 on every event.
AvailableHL7 in, too
ORM^O01 in, an ACK right back.
AvailableStable v1
Breaking changes only go to /v2.
AvailableReceipts 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
{ "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.