Observation

The Observation resource is one of the most commonly used in FHIR. It records vital signs, laboratory results, imaging findings, and other clinical measurements.

API convention: the patient and encounter references are sent as flat string id fields (subjectId, encounterId). All resource ids are raw UUIDs (v4).

Types of Observations

  • Vital signs — blood pressure, heart rate, temperature, weight
  • Laboratory — blood tests, urinalysis, pathology
  • Imaging — radiological findings
  • Social history — smoking status, alcohol use
  • Clinical findings — any observable clinical event

Creating an Observation

curl -X POST https://api.esus.health/fhir/Observation \
  -H "Authorization: Bearer YOUR_TOKEN" \
  -H "Content-Type: application/fhir+json" \
  -d '{
    "status": "final",
    "subjectId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "encounterId": "c1a2e3d4-5b6f-7890-abcd-ef1234567890",
    "category": [{
      "coding": [{
        "system": "http://terminology.hl7.org/CodeSystem/observation-category",
        "code": "vital-signs",
        "display": "Vital Signs"
      }]
    }],
    "code": {
      "coding": [{
        "system": "http://loinc.org",
        "code": "8867-4",
        "display": "Heart rate"
      }]
    },
    "effectiveDateTime": "2026-04-21T10:30:00Z",
    "valueQuantity": {
      "value": 72,
      "unit": "beats/minute",
      "system": "http://unitsofmeasure.org",
      "code": "/min"
    }
  }'

Vital Signs Example

{
  "status": "final",
  "subjectId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
  "category": [{ "coding": [{ "code": "vital-signs" }] }],
  "code": { "coding": [{ "code": "8480-6", "display": "Systolic blood pressure" }] },
  "valueQuantity": { "value": 120, "unit": "mmHg" }
}

Observation Statuses

StatusMeaning
registeredInitial entry, not validated
preliminaryNot yet confirmed
finalComplete and verified
amendedAdjusted after final
correctedCorrected after final (data error)
cancelledOrdered but not performed
entered-in-errorError, should be ignored
unknownStatus cannot be determined

Value Types Supported in the Request Body

FieldExample
valueQuantity72 beats/minute
valueCodeableConceptcoded value (e.g. “severe”)
valueStringfree text observation

Multi-part observations can be expressed via component[], where each component has its own code and valueQuantity.