
Signing a FHIR server contract without asking eight specific questions is where teams lose 6 months to unpicked-up-on gaps. The list below is what production teams actually verify before commitment.
**1. Does it pass Inferno for your target profiles?** Not marketing claims — verified conformance against US Core, Da Vinci PDex, or whichever IGs matter.
2. What's the sustained write throughput on your hardware? "Peak" numbers are marketing; sustained 24-hour throughput matters. Ask for real numbers on hardware sized like yours.
3. How does bulk export scale beyond 10M resources? Some servers hit walls; verify with a load test before deploy.
4. What terminology server does it integrate with? In-process (HAPI, Aidbox) or external (Ontoserver)? Latency and operational cost differ significantly.
5. How is auth handled? Built-in (Aidbox, Medplum, Firely) or add-on (HAPI + Keycloak)? Built-in is simpler; add-on is more flexible.
**6. What's the Subscription reliability story?** Retry semantics, dead-letter handling, back-pressure — verify before betting on Subscription.
7. What Postgres tuning is required? JPA-backed servers require specific indexes and pool sizing. HAPI's operations documentation covers the essentials.
8. What's the upgrade cadence and backward compatibility policy? Major version upgrades that break clients are painful; get the policy in writing.
Vendor scorecard (mid-2026)
| Server | Inferno | Sustained write | Bulk export | Auth | Subscription |
|---|---|---|---|---|---|
| HAPI JPA 7.x | Full | 1500-1800/s | Good with tuning | Add-on | Add-on |
| Aidbox 2409 | Full | 2500-3000/s | Native | Built-in | Built-in |
| Medplum 3.x | Full | 3000-3200/s | Native | Built-in | Built-in |
| Firely Server | Full | 2000-2500/s | Good | Built-in | Good |
| Microsoft FHIR | Full | 1000-1500/s | Native | Azure AD | Add-on |
FHIR server selection is a five-year commitment. Ask the eight questions above; get the answers documented; then decide.