FHIR R4 Observation example: blood pressure
Blood pressure is one Observation with two components, not two separate Observations. The panel code is LOINC 85354-9; each component has its own LOINC code and a quantity in mm[Hg].
The Observation in JSON
{
"resourceType": "Observation",
"id": "blood-pressure",
"status": "final",
"category": [
{
"coding": [
{
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
"code": "vital-signs",
"display": "Vital Signs"
}
]
}
],
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "85354-9",
"display": "Blood pressure panel with all children optional"
}
],
"text": "Blood pressure"
},
"subject": {
"reference": "Patient/example",
"display": "Jane Doe"
},
"effectiveDateTime": "2026-10-01T08:30:00-05:00",
"component": [
{
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "8480-6",
"display": "Systolic blood pressure"
}
]
},
"valueQuantity": {
"value": 128,
"unit": "mmHg",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
}
},
{
"code": {
"coding": [
{
"system": "http://loinc.org",
"code": "8462-4",
"display": "Diastolic blood pressure"
}
]
},
"valueQuantity": {
"value": 82,
"unit": "mmHg",
"system": "http://unitsofmeasure.org",
"code": "mm[Hg]"
}
}
]
}
Validator result: raw JSON · open the validator
- informationNo errors: this Observation matches the FHIR R4 structure checked here.
The elements that matter
| Element | Cardinality | Notes |
|---|---|---|
status | 1..1 | Required; final for a confirmed measurement. |
category | 0..* | vital-signs from the observation-category code system. |
code | 1..1 | What was measured: LOINC 85354-9 for the panel. |
subject | 0..1 | The patient; optional in base R4, required by most profiles and by Anpheros. |
effectiveDateTime | 0..1 | When it was measured; a time needs a time zone. |
component | 0..* | One entry per value, each with its own code and valueQuantity. |
The FHIR vital signs profile asks for the panel code, both components and UCUM units; the structure check here does not enforce that profile.
The full definition is in the FHIR R4 Observation specification.
Common mistakes and the errors they cause
Missing status
Observation.status is 1..1.
- error
Observation.statusRequired element is missing.
Time without a time zone
A dateTime with hours needs Z or an offset; a space instead of T also fails.
- error
Observation.effectiveDateTimeNot a FHIR dateTime: YYYY, YYYY-MM, YYYY-MM-DD or YYYY-MM-DDThh:mm:ss with a time zone (Z or +hh:mm).
Missing code
Observation.code is 1..1: every observation says what it measured.
- error
Observation.codeRequired element is missing.
Store it in a real FHIR R4 serverA free sandbox key gives you 30 synthetic patients and the full API, including
Get a free API keyPOST /fhir/R4/Observation and $validate.More examples
- Patient resource example
- Observation example: laboratory result
- DiagnosticReport example: lab panel
- Condition resource example
- MedicationStatement example
- AllergyIntolerance example
- Immunization resource example
- Encounter resource example
Related guides
- How to store medical records using FHIR R4Tutorial: create a Patient, a blood-pressure Observation and a Condition, use a transaction, search, update with history and read provenance — every request with curl and the real response, on the free sandbox.
- How to normalize medical dataTutorial: turn medical data from many sources into one comparable form — LOINC and ATC lookup, UCUM units, ISO dates, reference ranges, no duplicates on retry, and validation against the European lab profile.