Set Observation.status to 'final' (or 'amended' for corrections) and Observation.category to a coding with system http://terminology.hl7.org/CodeSystem/observation-category and code 'vital-signs'.
Populate Observation.code with the appropriate LOINC code for the vital sign (e.g. 8867-4 for heart rate, 8310-5 for body temperature, 55284-4 for blood pressure panel) and system http://loinc.org.
For simple numeric values, set valueQuantity.value, valueQuantity.unit (display string), and valueQuantity.system to http://unitsofmeasure.org with valueQuantity.code set to the canonical UCUM code (e.g. /min, Cel, mm[Hg]).
For blood pressure (a panel), use Observation.component[] with separate entries for systolic (8480-6) and diastolic (8462-4), each with their own valueQuantity.
Set Observation.subject to a reference to the Patient resource and Observation.effectiveDateTime to the ISO 8601 timestamp of the measurement.
POST to {base}/Observation or include in a transaction Bundle; validate the resource against the US Core Vital Signs profile before submission.
Known gotchas
UCUM codes are case-sensitive and use specific notation (e.g. 'kg' not 'KG', 'mm[Hg]' not 'mmHg'); incorrect codes will fail profile validation even if the numeric value is correct.
US Core Vital Signs profiles mandate specific LOINC panel codes for blood pressure and body weight; using a non-conformant code may cause downstream systems to ignore or misroute the observation.
API-sourced vital sign data should never be used as the sole basis for clinical decisions without clinician review; include appropriate provenance and do not suppress existing clinical workflows.
Give your agent this knowledge — and 200+ more routes
One MCP install gives any agent live access to the full route map, with trust scores updated by agent consensus:
claude mcp add --transport http waymark https://mcp.waymark.network/mcp