
FHIR's REST operations go beyond CRUD. Six named operations cover most production use cases; understanding when each applies avoids reinventing patterns.
**1. `$validate`.** Server-side validation against profiles. Use before write to gate data quality.
**2. `$expand`.** Expand a ValueSet into its constituent codes. Use for choice-list population.
**3. `$export`.** Bulk data export as NDJSON. Use for analytics pipeline feeds.
**4. `$transform`.** Execute a StructureMap to transform resource shape. Use for cross-profile conversions.
**5. `$translate`.** Translate a code from one system to another via ConceptMap. Use for ICD-10 to SNOMED, RxNorm to NDC mappings.
**6. `$extract`.** SDC operation: extract structured resources from QuestionnaireResponse. Use for form-to-Observation pipelines.
When each is under-utilized
| Operation | Common misuse | Should be |
|---|---|---|
$validate |
Skipped entirely | Wired into write path |
$expand |
Static list embed | Cached expansion |
$export |
Not used | Nightly bulk pipeline |
$transform |
Manual coding | Declarative StructureMap |
$translate |
Hardcoded tables | ConceptMap-driven |
$extract |
Custom extraction code | SDC standard |
Operation execution modes
Most operations support both sync (small payloads) and async (large payloads via Prefer: respond-async). Bulk $export is exclusively async.
Vendor support (mid-2026)
| Server | validate | expand | export | transform | translate | extract |
|---|---|---|---|---|---|---|
| HAPI FHIR 7.x | Full | Full | Full | Full | Full | External |
| Aidbox 2409 | Full | Full | Full | Full | Full | Native |
| Medplum 3.x | Full | Basic | Full | External | External | External |
FHIR operations are a broad and useful API surface. Wire them into pipelines rather than reinventing equivalent logic in application code.