Skip to main content
This documentation is under active development and may be incomplete or in some cases incorrect.
The official FHIR specification is the only source of truth: https://hl7.org/fhir/. This section is a practical guide to get you productive quickly. We deliberately focus on certain parts of the spec that are widely used and understood.

What is FHIR?

At its core, FHIR (Fast Healthcare Interoperability Resources) is a standard way to represent healthcare data as resources and exchange them over HTTP using a consistent REST API. Resources are the building blocks of FHIR. They represent a variety of healthcare entities, such as patients, encounters, observations, and more. They can be grouped into modules (you will see them on the landing page of the official FHIR spec).

Data Exchange

As mentioned above, FHIR resources can be exchanged via HTTP in a RESTful manner. This is the most common way to exchange FHIR data. Most HTTP requests are one of these:
# Read a resource
GET  /fhir/{resourceType}

# Search for resources
GET  /fhir/{resourceType}?name=Doe&gender=male&_count=10

# Read a specific resource
GET  /fhir/{resourceType}/{id}

# Create a resource
POST /fhir/{resourceType}

# Update a resource
PUT  /fhir/{resourceType}/{id}
And most responses are either:

Try it (2 minutes)

If you have a FHIR server running (TLQ or any other), do these three tiny checks.
1

1) Ask the server what it supports

The best “starting page” of any FHIR server is its CapabilityStatement:
curl -H "Accept: application/fhir+json" \
  "http://localhost:8080/fhir/metadata"
Look for:
  • Supported resource types
  • Supported interactions (read, search-type, update, …)
  • Supported search parameters per type
2

2) Read one resource

Pick a resource type and ID you know exists and try a read:
curl -H "Accept: application/fhir+json" \
  "http://localhost:8080/fhir/Patient/example"
Two things to notice:
  • resourceType tells you what you’re looking at
  • meta.versionId and meta.lastUpdated tell you about history/versioning
3

3) Run your first search

Search returns a Bundle (type searchset):
curl -H "Accept: application/fhir+json" \
  "http://localhost:8080/fhir/Patient?_count=5"
Skim the response for:
  • Bundle.entry[] (the results)
  • Bundle.total (if the server includes it)

Next