ServiceRequest — Procedure, lab or imaging order
FHIR's order resource for anything that is not a medication: lab test, imaging procedure, physiotherapy, intervention, nursing care.
Purpose of the resource
ServiceRequest is the generic FHIR request resource for health services. It covers
blood panel orders (LOINC 58410-2), brain MRI requests, physiotherapy
session bookings, and specialist consults. Medications have their own resource —
MedicationRequest — to keep the workflow, dosage, dispensing and
administration route distinct.
ServiceRequest sits inside the FHIR Request workflow pattern: an intent to perform, which materialises into a Procedure (or DiagnosticReport for results) once the act is executed. A typical chain: ServiceRequest → Task → Procedure / DiagnosticReport.
Key fields
The StructureDefinition lists 33 top-level elements. The most prominent:
| Field | Type | Cardinality | Role |
|---|---|---|---|
identifier | Identifier[] | 0..* | Local business reference (placer number, requisition number). |
basedOn | Reference(CarePlan | ServiceRequest | MedicationRequest)[] | 0..* | Request derived from a care plan or parent order. |
status | code | 1..1 | Lifecycle state: draft, active, on-hold, revoked, completed, entered-in-error, unknown. |
intent | code | 1..1 | Intent: proposal, plan, directive, order, original-order, reflex-order, filler-order, instance-order, option. |
category | CodeableConcept[] | 0..* | Category (Laboratory procedure, Imaging, Counselling…). Typically SNOMED CT. |
priority | code | 0..1 | routine, urgent, asap, stat. |
code | CodeableReference | 0..1 | The requested act. LOINC for labs, RadLex / SNOMED for imaging, CCAM (FR) for medical procedures. |
subject | Reference(Patient | Group | Location | Device) | 1..1 | Subject of the request (usually Patient). |
encounter | Reference(Encounter) | 0..1 | Associated visit. |
occurrence[x] | dateTime | Period | Timing | 0..1 | Desired date / schedule for execution. |
authoredOn | dateTime | 0..1 | Request creation date. |
requester | Reference(Practitioner | PractitionerRole | Organization | Patient | RelatedPerson | Device) | 0..1 | Prescriber. |
performer | Reference(Practitioner | PractitionerRole | Organization | CareTeam | HealthcareService | Patient | Device | RelatedPerson)[] | 0..* | Desired performer (lab, imaging service…). |
reason | CodeableReference(Condition | Observation | DiagnosticReport | DocumentReference)[] | 0..* | Clinical reason for the request. |
specimen | Reference(Specimen)[] | 0..* | Associated specimens (for lab analyses). |
bodySite | CodeableConcept[] | 0..* | Target anatomic site (for imaging or biopsy). |
note | Annotation[] | 0..* | Free-text annotations by the requester. |
Lifecycle (status & intent)
ServiceRequest inherits the workflow.Request FHIR pattern. The pair
status × intent drives the whole state machine:
intent=proposal+status=draft— proposal under review.intent=order+status=active— active order transmitted to performer.intent=filler-order— order generated by the performer itself (typical in radiology when a RIS breaks the exam into sub-acts).status=on-hold— temporarily suspended.status=revoked— cancelled before execution.status=completed— executed, awaiting Procedure / DiagnosticReport creation.
JSON example
Order for a complete blood count (CBC, LOINC 58410-2) on Patient
"example", by Dr Jones, to be performed by the ACME lab:
{
"resourceType": "ServiceRequest",
"id": "lab-cbc",
"status": "active",
"intent": "order",
"category": [{
"coding": [{
"system": "http://snomed.info/sct",
"code": "108252007",
"display": "Laboratory procedure"
}]
}],
"priority": "routine",
"code": {
"coding": [{
"system": "http://loinc.org",
"code": "58410-2",
"display": "Complete blood count (hemogram) panel - Blood by Automated count"
}]
},
"subject": { "reference": "Patient/example" },
"encounter": { "reference": "Encounter/example" },
"authoredOn": "2026-05-14T09:15:00+01:00",
"requester": { "reference": "Practitioner/dr-jones" },
"performer": [{ "reference": "Organization/lab-acme" }],
"reasonCode": [{
"coding": [{
"system": "http://snomed.info/sct",
"code": "75102001",
"display": "Routine general medical examination"
}]
}],
"specimen": [{ "reference": "Specimen/blood-001" }]
} status=active+intent=order: the request is enforceable.categorySNOMED CT108252007= "Laboratory procedure".codein LOINC58410-2= automated CBC on blood.specimenpoints to existingSpecimen/blood-001.reasonCodeSNOMED CT75102001= routine medical examination.
REST API
GET /ServiceRequest?subject=Patient/example&status=active— active requests for a patient.GET /ServiceRequest?category=108252007&_lastUpdated=ge2026-05-01— recent lab requests.POST /ServiceRequest— create a new request.PUT /ServiceRequest/lab-cbc— update (status change, note added).GET /ServiceRequest?_include=ServiceRequest:specimen— include associated Specimen.GET /ServiceRequest?_revinclude=DiagnosticReport:based-on— also fetch the diagnostic reports produced.
National profiles
| Profile | Regulator | Specifics |
|---|---|---|
| US Core ServiceRequest | HL7 US Realm — ONC EHR | Must carry status, intent, subject Patient, code, authoredOn, requester. |
| US Core Laboratory Service Request | USCDI v3 | Restricts category to Laboratory and code to LOINC lab codes. |
| FR Core BiologyServiceRequest | ANS | Slicing on code, constrained to LOINC FR / NABM / CIQUAL. |
| IPS ServiceRequest | HL7 + CEN/TC 251 | Used in the international patient summary. |
| AU eRequesting | HL7 Australia / ADHA | Mandatory profile for ePathology / eImaging orders. |
Common pitfalls
- Mixing
codeandorderDetail—codesays what,orderDetailprecises specific modalities. Never bury a modality insidecodeas a free-text label. - Missing
intent— it is mandatory. Without it, the server rejects creation (HTTP 422). Pick betweenorder(sent to filler) andplan(intent not yet transmitted). - Confusing with
MedicationRequest— a drug goes through MedicationRequest, not ServiceRequest. Chemotherapy can be both (the administration session = ServiceRequest, the drug = MedicationRequest, linked bybasedOn). - Status inconsistent with workflow — moving from
activeback todraftis forbidden. Every transition must respect the state machine (see Request Pattern). - Local identifier omitted — many EHRs forget to fill
identifierwith the local placer number, which complicates legacy reconciliation.
Related resources
- MedicationRequest — equivalent for medications.
- DiagnosticReport — result produced by executing the request.
- Procedure — executed act in response to the ServiceRequest.
- Specimen — referenced biological specimen.
- Task — orchestration of execution between placer and filler.
- HL7 v2 ORM^O01 — legacy equivalent.