The FHIR spec references UCUM constantly but never publishes an exhaustive "use these codes" list. It leans on implementer common sense and a handful of examples. In practice about forty UCUM codes cover ninety-plus percent of clinical observations. Learning that set makes the ambiguity in Quantity fields disappear for daily work. The site's Clinical UCUM unit converter recognises this canonical set. For the wider FHIR framing, the FHIR healthcare hub has more.
Mass
ggramkgkilogrammgmilligramugmicrogram (µgin display,ugin code)ngnanogrampgpicogram
Volume
LlitermLmilliliter (NOTml)uLmicroliter
Length
mmetercmcentimetermmmillimeterummicrometer
Time
ssecondminminutehhourddaywkweekmomonthaannum (year)
Temperature
Celdegree Celsius (NOTdegC)[degF]degree Fahrenheit (bracketed convention)Kkelvin
Pressure
mm[Hg]millimeters of mercury (blood pressure)cm[H2O]centimeters of water (respiratory pressure)PapascalkPakilopascal
Mass Concentration (per volume)
mg/dLmilligrams per deciliter (glucose, cholesterol)mg/Lmilligrams per literg/Lgrams per literug/dLmicrograms per deciliter
Molar Concentration
mmol/Lmillimoles per liter (glucose in SI units)umol/Lmicromoles per litermol/Lmoles per liter
Cell Count / Frequency
10*3/uLthousand cells per microliter (WBC count)10*6/uLmillion cells per microliter (RBC count)10*9/Lbillion cells per liter (SI convention)/minper minute (heart rate)1/minbeats per minute (explicit)
Ratios
%percent{ratio}dimensionless (with curly-brace annotation)mL/kg/hmilliliters per kilogram per hour (dosing)
The Curly-Brace Annotation
UCUM allows {annotation} inside a unit code to distinguish otherwise-identical units. {RBC}/uL and {WBC}/uL are both per-microliter counts but annotated with the cell type.
The annotation does not change the unit's mathematical meaning. It is human-readable context. Downstream systems that dispatch on the base unit still work.
For the reasons to prefer the canonical set, UCUM in Observation.valueQuantity: the strict version covers the FHIR contract.
What FHIR Actually Requires
Every valueQuantity should carry:
system=http://unitsofmeasure.orgcodefrom the canonical set (or a valid UCUM expression outside the set)unitfor human display
Some servers accept alternative systems for legacy interoperability. Sending system = your organization's URL with a private unit is technically valid — and interoperability-poor. Use UCUM.
Prefer The Common Codes
Two units may represent the same measurement — mg/dL and mmol/L for glucose, for example. Pick the code your downstream consumers expect, not the one that matches your source system's rendering. That is the storage question, and it deserves its own treatment. For the trade-off, storing quantities: original unit, canonical unit, or both covers the mechanic.
The Short Version
Forty codes cover the vast majority of clinical observations. Case-sensitive. mL not ml. Cel not degC. Brackets for compound units of mercury or water pressure. Curly braces for annotations. Learn the canonical set once; save the trip to the UCUM spec on every incident.

Sources
- UCUM canonical specification for the common-code subset - UCUM canonical specification for the common-code subset
