Immunization — Administered vaccination
The record of a vaccine dose: product, lot, route, site, vaccination series. Key resource for vaccination passports and registries.
Purpose of the resource
Immunization documents the actual administration of a vaccine
dose to a patient. Not to be confused with ImmunizationRecommendation
(calendar-driven recommendation) or MedicationRequest (prescription).
Immunization is a past event: the dose was injected, or refused
(status=not-done), at a specific time and location.
Typical use cases: electronic vaccination record, national immunisation registry (REIVAC in France, IIS in the US), digital vaccine passport (DCC / EU Digital Covid Certificate, SMART Health Cards), epidemiological reporting and pharmacovigilance.
Key fields
| Field | Type | Cardinality | Role |
|---|---|---|---|
identifier | Identifier[] | 0..* | Local business identifier. |
status | code | 1..1 | completed, entered-in-error, not-done. |
statusReason | CodeableConcept | 0..1 | Reason for not-done (contraindication, patient refusal…). |
vaccineCode | CodeableConcept | 1..1 | Vaccine code. CVX (US), SNOMED CT, ATC, or national code. |
administeredProduct | CodeableReference | 0..1 | Specific pharmaceutical product (reference to Medication). |
manufacturer | CodeableReference | 0..1 | Manufacturer. |
lotNumber | string | 0..1 | Lot number (critical for pharmacovigilance traceability). |
expirationDate | date | 0..1 | Lot expiry date. |
patient | Reference(Patient) | 1..1 | Vaccinated subject (mandatory). |
encounter | Reference(Encounter) | 0..1 | Associated visit. |
occurrence[x] | dateTime | string | 1..1 | Administration date (datetime or text if approximate). |
primarySource | boolean | 0..1 | true if data comes from the vaccinator; false if copied from another record. |
location | Reference(Location) | 0..1 | Place of administration (clinic, pharmacy, school). |
site | CodeableConcept | 0..1 | Anatomic site (LA / RA / LT / RT = left/right arm/thigh). |
route | CodeableConcept | 0..1 | Route (IM, SC, intradermal, oral). |
doseQuantity | SimpleQuantity | 0..1 | Administered volume / dose. |
performer | BackboneElement[] | 0..* | Who administered (function + actor). |
reaction | BackboneElement[] | 0..* | Immediate reactions (referenced Observation). |
protocolApplied | BackboneElement[] | 0..* | Vaccine series, target disease, dose number in series. |
Vaccine code systems
| Code system | Coverage | Example |
|---|---|---|
CVX (http://hl7.org/fhir/sid/cvx) | United States (CDC) | 208 = COVID-19 Pfizer-BioNTech mRNA 30 mcg. |
| SNOMED CT | International | 1119349007 = SARS-CoV-2 mRNA vaccine. |
| ATC | Europe (WHO) | J07BX03 = COVID-19 vaccines. |
| NDC | United States (finished product) | 59267-1000-3 = Pfizer product code. |
| CIP | France (finished product) | French CIP13 code. |
| EU MAH / vaccine | EU (DCC) | EU/1/20/1528-type codes for vaccine passport context. |
JSON example
COVID-19 booster (3rd dose) Pfizer-BioNTech administered on 14 May 2026
to Patient "example", left arm, IM, 0.3 mL dose, lot EM0477:
{
"resourceType": "Immunization",
"id": "covid-booster",
"status": "completed",
"vaccineCode": {
"coding": [{
"system": "http://hl7.org/fhir/sid/cvx",
"code": "208",
"display": "COVID-19, mRNA, LNP-S, PF, 30 mcg/0.3 mL dose"
}, {
"system": "http://snomed.info/sct",
"code": "1119349007",
"display": "Severe acute respiratory syndrome coronavirus 2 mRNA vaccine"
}]
},
"administeredProduct": {
"concept": {
"coding": [{
"system": "http://hl7.org/fhir/sid/ndc",
"code": "59267-1000-3",
"display": "Pfizer-BioNTech COVID-19 Vaccine"
}]
}
},
"manufacturer": {
"reference": { "reference": "Organization/pfizer" }
},
"lotNumber": "EM0477",
"expirationDate": "2026-11-30",
"patient": { "reference": "Patient/example" },
"encounter": { "reference": "Encounter/vaccination-visit" },
"occurrenceDateTime": "2026-05-14T14:30:00+01:00",
"primarySource": true,
"location": { "reference": "Location/pharmacy-001" },
"site": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v3-ActSite",
"code": "LA",
"display": "Left arm"
}]
},
"route": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v3-RouteOfAdministration",
"code": "IM",
"display": "Intramuscular"
}]
},
"doseQuantity": {
"value": 0.3,
"unit": "mL",
"system": "http://unitsofmeasure.org",
"code": "mL"
},
"performer": [{
"function": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/v2-0443",
"code": "AP",
"display": "Administering Provider"
}]
},
"actor": { "reference": "Practitioner/nurse-001" }
}],
"protocolApplied": [{
"series": "COVID-19 booster",
"targetDisease": [{
"coding": [{
"system": "http://snomed.info/sct",
"code": "840539006",
"display": "Disease caused by Severe acute respiratory syndrome coronavirus 2"
}]
}],
"doseNumberPositiveInt": 3
}]
} status=completedandprimarySource=true: data captured by the vaccinator, source of truth.vaccineCodedual-coded CVX (USA) + SNOMED CT (international) for maximum interop.administeredProductNDC specifies the exact brand.lotNumber EM0477+expirationDatefor pharmacovigilance (in case of a Pfizer lot recall).protocolApplied.doseNumberPositiveInt=3indicates this is the 3rd dose of the series.
REST API
GET /Immunization?patient=Patient/example— full immunisation history.GET /Immunization?patient=Patient/example&status=completed&_sort=-date— recent doses sorted by date.GET /Immunization?vaccine-code=208&date=ge2026-01-01— all COVID Pfizer doses since 1 Jan 2026 (regional registry).POST /Immunization— create after vaccination.GET /Immunization?lot-number=EM0477— search by lot (pharmacovigilance).GET /Patient/example/$everything?_type=Immunization,AllergyIntolerance— composite for vaccination visit.
National profiles
| Profile | Regulator | Specifics |
|---|---|---|
| US Core Immunization | HL7 US Realm — ONC EHR | Must carry vaccineCode CVX, patient, status, occurrence[x], primarySource. |
| IPS Immunization | HL7 + CEN/TC 251 | For international Patient Summary. |
| FR Core Immunization | ANS | For Mon Espace Santé. vaccineCode in SNOMED CT FR. |
| EU Digital Covid Certificate (DCC) | European Commission | Light profile for signed digital vaccine passport. |
| SMART Health Cards | VCI (US) | Signed FHIR Bundle for vaccination proof. |
| AU Core Immunization | HL7 Australia | For AIR (Australian Immunisation Register). |
Common pitfalls
- CVX / NDC confusion — CVX codes the vaccine (antigen and general context), NDC codes the specific pharmaceutical product (brand + dosage + packaging). Always carry both for full traceability.
- Missing
lotNumber— without a lot number, impossible to respond to a pharmacovigilance signal or lot recall. - Wrong
primarySource— if the dose was transcribed from a paper record, setfalse. Otherwise registry data-quality analytics wrongly count it as primary source. - Missing
protocolApplied— for multi-dose vaccines (COVID, HPV, hep B), forgettingdoseNumberPositiveIntmakes it impossible to compute schedule completion. - Refusal encoded as absence — a refused vaccination must be encoded with
status=not-done+statusReason, not by absence of an Immunization resource. Otherwise "never offered" cannot be distinguished from "explicitly refused". - Free-text occurrence — avoid
occurrenceStringexcept when the date is fully unknown (legacy paper card import).
Related resources
- ImmunizationRecommendation — calendar-driven recommendations.
- ImmunizationEvaluation — evaluation of a dose against the schedule.
- Medication — referenced pharmaceutical product.
- AllergyIntolerance — contraindication to check beforehand.
- Observation — documented post-vaccination reactions.
- Patient — vaccinated subject.