Skip to main content
v2026.11,858 entries · CC-BY 4.0
LAC HealthMedical & Research SuppliesReagents, PPE & instruments — chain-of-custody documented.Fast, traceable sourcing built for regulated research environments, from bench consumables to instrumentation.Shop lac.us CodeCASRAIlac.us

HL7 FHIR CapabilityStatement: GET /metadata Discovery, Instance vs. Capability, and ONC Inferno Testing

A technical engineering reference to the HL7 FHIR CapabilityStatement resource, detailing GET [base]/metadata discovery, instance vs. capability vs. requirements kinds, .well-known/smart-configuration alignment, and ONC (g)(10) Inferno conformance validation.

Written and maintained by CASRAI Editorial Board

Last updated

The HL7 FHIR CapabilityStatement resource (known as the Conformance resource in FHIR DSTU2 and normative since FHIR Release 4) is a machine-readable metadata document that declares the exact RESTful interactions, resource types, profiles, search parameters, custom operations, and security mechanisms supported by a FHIR server or required by a clinical implementation guide. Every conformant FHIR R4 server is required by the base specification to expose a dynamic CapabilityStatement so client applications can programmatically discover server functionality before issuing clinical data queries.

What Is a FHIR CapabilityStatement and How Is It Retrieved from GET [base]/metadata?

In the HL7 FHIR RESTful API architecture, a client discovers a server’s capabilities by issuing an HTTP GET request to the server’s base URL appended with /metadata:

GET https://fhir.example.org/r4/metadata HTTP/1.1
Accept: application/fhir+json; fhirVersion=4.0

Key architectural rules governing the FHIR metadata endpoint include:

  • Unauthenticated Public Access Recommended: Because client applications frequently inspect `/metadata` prior to initiating OAuth 2.0 login flows, HL7 and the ONC 21st Century Cures Act certification rules expect `GET [base]/metadata` to return HTTP `200 OK` without requiring an OAuth bearer token.
  • Mode Query Parameter (`mode=full | normative | terminology`): By default (`mode=full`), the endpoint returns a complete `CapabilityStatement` resource. Clients may also request `GET [base]/metadata?mode=terminology` to retrieve a `TerminologyCapabilities` resource detailing supported code systems and value set expansion operations, or `mode=normative` to inspect only normative resource capabilities.
  • Core Structural Declarations inside `CapabilityStatement.rest[]`: For a server (`rest.mode = “server”`), the `rest.resource[]` array enumerates every supported FHIR resource type (e.g., `Patient`, `Observation`, `Condition`) along with:
    • profile (canonical URL of the base system-wide profile) and supportedProfile[] (canonical URLs of specific profiles supported for individual records, such as US Core FHIRVital Signs profiles).
    • interaction[].code: Supported RESTful verbs, such as read, vread, update, patch, delete, history-instance, create, and search-type.
    • searchParam[], searchInclude[], and searchRevInclude[]: Explicitly lists supported FHIR search parameters (name, canonical definition URL, and data type such as `token`, `date`, or `reference`).
    • operation[]: Custom `$` operations supported on the resource or server root (such as `Patient/$match`, `Patient/$everything`, or Group `$export`).

What Is the Difference Between a CapabilityStatement Kind of Instance, Capability, and Requirements?

The mandatory CapabilityStatement.kind element (`code`: `instance | capability | requirements`) defines whether the resource describes a live deployed server, a generic software product, or an implementation specification:

CapabilityStatement.kind Semantic Definition Required Element Constraints Real-World Clinical Example
instance Describes the actual, live capabilities and endpoint URLs of a specific deployed system instance. MUST populate CapabilityStatement.implementation (including implementation.url base endpoint and description); usually also populates software. The JSON payload returned live by a hospital’s production Epic or HAPI FHIR endpoint at GET https://fhir.hospital.org/r4/metadata.
capability Describes the generic capabilities of a software application or product release independent of any single customer installation. MUST populate CapabilityStatement.software (name and version) and MUST NOT populate CapabilityStatement.implementation. A published capability artifact documenting what HAPI FHIR JPA Server v7.2.0 or Smile CDR supports out of the box.
requirements Defines the normative expectations (SHALL / SHOULD / MAY conformance rules) that a server or client must satisfy to claim compliance with a standard. MUST NOT populate implementation or software; uses HL7 Conformance Expectation extensions (`SHALL`, `SHOULD`, `MAY`) on interactions and search parameters. The `CapabilityStatement-us-core-server` artifact published inside the HL7 US Core FHIR Implementation Guide.

CapabilityStatement.rest.security vs. .well-known/smart-configuration

In SMART on FHIR (HL7 SMART App Launch Framework STU 1.0 and STU 2.0+), client apps must dynamically discover the EHR’s OAuth 2.0 `authorize` and `token` endpoints. Modern FHIR servers expose security discovery in two ways:

  1. Primary Modern Standard — `GET [base]/.well-known/smart-configuration`: Required by SMART App Launch STU 2.0+ and ONC `(g)(10)` certification, requesting `[base]/.well-known/smart-configuration` returns a lightweight JSON document containing `authorization_endpoint`, `token_endpoint`, `introspection_endpoint`, `revocation_endpoint`, `jwks_uri`, `grant_types_supported`, `code_challenge_methods_supported` (requiring `S256` for PKCE), and an array of SMART `capabilities` (such as `launch-ehr`, `launch-standalone`, `client-public`, `client-confidential-symmetric`, `client-confidential-asymmetric`, `sso-openid-connect`, and `context-ehr-patient`).
  2. Legacy / Fallback Extension — `CapabilityStatement.rest.security`: For backward compatibility with SMART STU 1.0 clients, servers also populate `CapabilityStatement.rest[0].security.service` with code `SMART-on-FHIR` and attach the `http://fhir-registry.smarthealthit.org/StructureDefinition/oauth-uris` extension holding `authorize` and `token` valueUri sub-extensions. When both exist, SMART STU 2.0 specifies that values in `.well-known/smart-configuration` take precedence.

How Do ONC (g)(10) Inferno Tests Validate CapabilityStatement and .well-known/smart-configuration?

Under the ONC Health IT Certification Program criterion 45 CFR § 170.315(g)(10) (Standardized API for Patient and Population Services), EHR vendors must pass automated testing using the open-source Inferno Framework (`inferno.healthit.gov`). Inferno executes rigorous structural and cross-endpoint checks against both discovery documents:

  • FHIR Version & JSON Support Verification: Inferno queries `GET [base]/metadata` and verifies that the server returns a valid `CapabilityStatement` resource with `status = “active”`, `kind = “instance”`, `fhirVersion = “4.0.1”`, and `format` declaring support for `json` or `application/fhir+json`.
  • US Core Profile & Interaction Auditing: For every USCDI clinical resource class required by US Core (such as `Patient`, `AllergyIntolerance`, `CarePlan`, `CareTeam`, `Condition`, `Device`, `DiagnosticReport`, `DocumentReference`, `Encounter`, `Goal`, `Immunization`, `MedicationRequest`, `Observation`, `Procedure`, `Provenance`), Inferno parses `CapabilityStatement.rest.resource[]` and verifies that the canonical URL of each required US Core Profile is listed in `profile` or `supportedProfile[]`. Note that for `Observation`, where US Core defines multiple distinct profiles (Laboratory Result, Pediatric BMI, Pulse Oximetry, Blood Pressure, etc.), declaring them in `supportedProfile[]` is mandatory.
  • Dynamic Search Parameter Execution against Declared Capabilities: Inferno compares the `searchParam[]` declarations inside `CapabilityStatement.rest.resource[]` against the US Core Server CapabilityStatement (`SHALL` support single and composite search parameters) and then dynamically executes live `GET` and `POST _search` queries to prove the server actually implements what its `CapabilityStatement` advertises.
  • SMART Discovery Endpoint Consistency: Inferno fetches `GET [base]/.well-known/smart-configuration`, validates all required JSON keys and HTTPS TLS 1.2+ transport, and—if OAuth URIs are also declared in `CapabilityStatement.rest.security`—verifies that the `authorize` and `token` URLs match identically across both endpoints without contradiction.

Frequently Asked Questions

What is a FHIR CapabilityStatement and how is it retrieved from GET [base]/metadata?

A FHIR CapabilityStatement is a normative HL7 FHIR metadata resource that documents the resource types, profiles, RESTful interactions (`read`, `search-type`, `create`), search parameters, and operations supported by a FHIR server. Client applications retrieve it by sending an HTTP GET [base]/metadata request with header Accept: application/fhir+json.

What is the difference between a CapabilityStatement kind of instance, capability, and requirements?

A kind of instance describes a specific live deployed server at a concrete base URL (requiring the implementation element); capability describes the generic features of a software product release independent of any specific deployment (requiring software and prohibiting implementation); and requirements specifies the normative SHALL/SHOULD conformance rules of an Implementation Guide such as US Core.

How do ONC (g)(10) Inferno tests validate CapabilityStatement and .well-known/smart-configuration?

The ONC Inferno `(g)(10)` Standardized API test kit queries both `GET [base]/metadata` and `GET [base]/.well-known/smart-configuration` to verify FHIR R4 (`4.0.1`) compliance, confirm that all mandatory US Core profiles are declared in `profile` or `supportedProfile[]`, verify that all required single and composite search parameters are advertised and functional, and ensure that OAuth 2.0 endpoints and PKCE (`S256`) capabilities match across both discovery documents.

Follow CASRAI

Research-administration guidance, standards updates and independent tool reviews.

Ask CASRAI · free to try

Ask about HL7 FHIR CapabilityStatement: GET /metadata Discovery, Instance vs. Capability, and ONC Inferno Testing

Ask your first 2 questions free below. Subscribers get 150 a day for $29 a month.

An AI assistant specialized in research administration. It cites the sources behind every answer, labels web answers and says when it can't answer.

Answers draw on CASRAI's guides and dictionary plus the federal and funder documents we index: Federal Register, Grants.gov, Regulations.gov and UKRI.

Works on this site and inside Claude, Cursor and the AI tools you already use.

Everything CASRAI publishes — this page, the dictionary, the guides and the news — stays free to read, with no account and no card.

Referenced across the research world

University of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logoUniversity of Cambridge logoColumbia University logoCrossref logoUniversity of Edinburgh logoHarvard University logoUniversity of Oxford logoPrinceton University logoStanford School of Medicine logoUniversity College London logoORCID logo
  • University of Cambridge logo
  • Columbia University logo
  • Crossref logo
  • University of Edinburgh logo
  • Harvard University logo
  • University of Oxford logo
  • Princeton University logo
  • Stanford School of Medicine logo
  • University College London logo
  • ORCID logo

View CASRAI adoption →