FHIR gives two extension shapes that look identical on the wire and behave very differently at consumption time. A regular extension is informational — a receiver may safely ignore it. A modifier extension changes the meaning of the containing element — a receiver must understand it or reject the resource. Confusing the two is a class of bug that produces payloads that are silently unsafe, and it is worth spending fifteen minutes making sure your team's mental model is right. The site's Extension registry audit flags each type. For the wider FHIR framing, more FHIR implementation patterns has more.
Where They Live
extension[]— regular extensions, safe to ignoremodifierExtension[]— modifier extensions, must understand
Both arrays exist on every DomainResource and on every BackboneElement inside a resource. Both accept the same structural shape: url + typed value. The array location is the entire mechanical difference.
The Semantic Difference
A regular extension adds context. us-core-race adds a race categorization to a Patient. A conforming consumer that does not handle race can still process the Patient safely — the base information is intact, the extension is optional context.
A modifier extension changes meaning. A do-not-resuscitate flag on an encounter changes whether the encounter is treated as full-resuscitation-authorized. A consumer that receives it and ignores it is treating the encounter incorrectly.
Every modifier extension makes the same promise: without understanding this, you cannot safely process the containing element.
The Receiver Obligation
Consumers see a modifier extension. Options:
- Understand it — dispatch on its URL and value, act accordingly
- Reject the resource — return an OperationOutcome flagging the unhandled modifier
There is no third option. Silently ignoring a modifier extension is a spec violation.
Regular extensions get one option — either handle them or ignore them safely. Both are conformant.
When To Use Modifier Extensions
- Data whose absence would produce a different clinical decision
- Data that would make the resource unsafe to process if misread
- Data that changes the meaning of a base spec element
If ignoring the extension would make the resource silently wrong, use a modifier extension. If ignoring it would just miss context, use a regular one.
For the design side of writing your own, custom extensions in a public API: hidden costs covers the mechanics.
The Common Mistake
The more common mistake is over-classifying — marking regular extensions as modifiers because "consumers must know about this." That is not what modifier means. It means "consumers cannot safely ignore this."
Race, ethnicity, birthsex — informational, not modifier. Do-not-resuscitate, allergy severity that changes contraindication logic, clinical status that flips a condition from "active" to "resolved" — modifier.
The other mistake is under-classifying — marking modifiers as regular. That produces payloads that consumers process incorrectly without any signal that they should reject.
Both Types Have The Same Structure
url— canonical URL identifying the extensionvalue[x]— the typed value- Optional nested
extension[]for complex extensions
Everything except the array they live in is identical. That is what makes the mistake easy to make and easy to miss.
Consumers That Handle Neither Array
A consumer that never reads extension[] misses context. A consumer that never reads modifierExtension[] produces incorrect processing. Both categories exist in the wild.
The safe pattern: consumers check modifierExtension[] at every resource level and refuse to process the resource if any modifier extension is unrecognised. Consumers may still ignore extension[] selectively.
For the documentation side of the same question, documenting extensions so the next team can maintain them covers what to publish.
When The Base Spec Uses One
The spec itself declares some elements as inherently modifying. Patient.deceased is not an extension at all — it is a base element. The modifier-extension mechanism is for cases where the profile author needs to declare "this custom field, when present, alters meaning."
The Short Version
Regular extensions add context; modifier extensions alter meaning. The two live in different arrays and follow different consumer rules. Over-classification produces unnecessary rejections; under-classification produces silent wrongness. For the base decision of whether to use an extension at all, when a FHIR extension is the right answer, and when it isn't is the entry.
![Neubrutalism-shadow diagram of a resource with extension[] and modifierExtension[] side by side, with consumer obligations annotated on each, drawn with heavy black borders and hard shadows on ivory](https://mk-cdn.net/wp-content/uploads/2026/07/extensions-vs-modifier-extensions-diagram.avif)
Sources
- HL7 canonical extensibility section on modifier extensions - HL7 canonical extensibility section on modifier extensions
![Editorial illustration in neubrutalism-shadow style depicting extension[] vs modifierExtension[] side by side with consumer obligations](https://mk-cdn.net/wp-content/uploads/2026/07/extensions-vs-modifier-extensions-349-850x567.jpg)