Before understanding Smart on FHIR, let's understand what is FHIR?
FHIR (Fast Healthcare Interoperability Resources), developed by HL7, plays a pivotal role in addressing the critical issue of data interoperability in healthcare systems. The need for FHIR arises from the inherent challenges faced when organizations with different EHR systems or departments utilizing diverse software solutions attempt to communicate and share patient information.
Within a healthcare institution like a hospital, different departments often employ separate computer systems to manage various aspects of patient data, such as appointments, medical records, and billing. When patients transition between these departments, the details are often manually re-entered into the new system, leading to potential data loss and inconsistencies.
Before FHIR, healthcare systems operated in isolated silos. A 2019 study by the Office of the National Coordinator for Health Information Technology (ONC) found that only 48% of hospitals could electronically send patient data to outside providers, and only 35% could receive and integrate external data into their EHR systems. This fragmentation had profound consequences:
Healthcare informatics has long relied on HL7 standards, but each had critical limitations:
FHIR revolutionizes healthcare interoperability through three fundamental design principles that set it apart from previous standards:
FHIR leverages standard HTTP methods (GET, POST, PUT, DELETE) that web developers already understand. This reduces the learning curve dramatically compared to SOAP-based HL7 v3.
GET /Patient/123
GET /Observation?patient=123&category=vital-signs
POST /MedicationRequest
PUT /Appointment/456
            Standard web architecture means developers can use familiar tools, libraries, and debugging techniques.
FHIR data models, termed "resources," structure healthcare data as discrete, self-contained entities with defined attributes, relationships, and semantics.
FHIR R5 includes 157 resources across categories:
FHIR supports JSON (primary), XML, and RDF/Turtle formats. JSON's lightweight, human-readable format makes FHIR accessible to modern web and mobile developers.
{
  "resourceType": "Patient",
  "id": "example",
  "name": [{
    "family": "Smith",
    "given": ["John", "Q"]
  }],
  "birthDate": "1974-12-25"
}
          Each FHIR resource follows a consistent structure that balances flexibility with standardization:
{
  "resourceType": "Patient",
  "id": "pat-12345",
  "meta": {
    "versionId": "2",
    "lastUpdated": "2024-01-15T09:30:00Z",
    "profile": ["http://hl7.org/fhir/us/core/StructureDefinition/us-core-patient"]
  },
  "identifier": [
    {
      "use": "official",
      "system": "http://hospital.org/mrn",
      "value": "MRN123456"
    },
    {
      "system": "http://hl7.org/fhir/sid/us-ssn",
      "value": "123-45-6789"
    }
  ],
  "active": true,
  "name": [
    {
      "use": "official",
      "family": "Smith",
      "given": ["John", "Robert"],
      "prefix": ["Mr."]
    }
  ],
  "telecom": [
    {
      "system": "phone",
      "value": "(555) 123-4567",
      "use": "home"
    },
    {
      "system": "email",
      "value": "john.smith@email.com"
    }
  ],
  "gender": "male",
  "birthDate": "1974-12-25",
  "address": [
    {
      "use": "home",
      "line": ["123 Main St", "Apt 4B"],
      "city": "Boston",
      "state": "MA",
      "postalCode": "02101",
      "country": "US"
    }
  ],
  "maritalStatus": {
    "coding": [{
      "system": "http://terminology.hl7.org/CodeSystem/v3-MaritalStatus",
      "code": "M",
      "display": "Married"
    }]
  },
  "contact": [
    {
      "relationship": [{
        "coding": [{
          "system": "http://terminology.hl7.org/CodeSystem/v2-0131",
          "code": "C",
          "display": "Emergency Contact"
        }]
      }],
      "name": {
        "family": "Smith",
        "given": ["Jane"]
      },
      "telecom": [{
        "system": "phone",
        "value": "(555) 987-6543"
      }]
    }
  ]
}
          FHIR's 80/20 rule: The base specification covers 80% of use cases. For the remaining 20%, FHIR provides formal extension mechanisms without breaking interoperability.
FHIR's search capabilities go far beyond simple record retrieval, enabling sophisticated queries across related resources:
// Find all observations for a patient
GET /Observation?patient=123
// Find vital signs from last 7 days
GET /Observation?patient=123&category=vital-signs&date=ge2024-01-08
// Find lab results with specific LOINC code
GET /Observation?patient=123&code=2339-0&_sort=-date&_count=10
// Chained search: Find observations for patients in a specific location
GET /Observation?patient.address-city=Boston&category=laboratory
// Reverse chained search: Find patients who have diabetes diagnosis
GET /Patient?_has:Condition:patient:code=http://snomed.info/sct|73211009
          // Get patient and include all their conditions
GET /Patient/123?_include=Patient:general-practitioner
// Get condition and include the patient
GET /Condition?_include=Condition:patient
// Get patient and reverse-include all observations about them
GET /Patient/123?_revinclude=Observation:patient
            This reduces round trips by retrieving related resources in a single request.
FHIR solved the data interoperability problem—healthcare systems can now exchange structured clinical data in a standard format. But a critical piece was still missing: How do third-party applications securely access this data?
Enter SMART on FHIR (Substitutable Medical Applications, Reusable Technologies), developed in 2010 by a team at Boston Children's Hospital and Harvard Medical School. SMART adds three crucial layers on top of FHIR:
OAuth 2.0 and OpenID Connect provide industry-standard security protocols, ensuring only authorized applications and users can access patient data with appropriate permissions.
Standardized launch sequences enable apps to be embedded directly in EHR user interfaces, launched with patient context automatically passed in.
Apps written once work across any SMART-compliant EHR without custom integration work, enabling true interchangeability of healthcare applications.
Before SMART on FHIR, healthcare apps required custom integration for each EHR vendor—sometimes even for each hospital using the same vendor. A diabetes management app might need:
SMART on FHIR changes this paradigm completely. A SMART app authenticated against one EHR will work with any SMART-compliant EHR, just like a web app works in any standards-compliant browser. This has profound implications:
SMART defines two primary launch workflows that handle authentication, authorization, and context passing:
The clinician launches the app from within the EHR interface. The EHR automatically passes the patient context.
launch token and iss (FHIR server URL)GET /Observation?patient=12345&code=29463-7Patient opens the app independently (mobile app, web portal). The app guides them through login and patient selection.
SMART on FHIR leverages OAuth 2.0 for authorization and OpenID Connect (OIDC) for authentication, providing enterprise-grade security that healthcare regulators require.
OAuth 2.0 solves a critical problem: How can a third-party app access patient data without the app ever seeing the user's EHR credentials?
| Token Type | Purpose | Typical Lifetime | Storage | 
|---|---|---|---|
| Authorization Code | One-time exchange for access token | 1-10 minutes | Query parameter only | 
| Access Token | Proves authorization to access FHIR APIs | 1-60 minutes | Memory only (never localStorage) | 
| Refresh Token | Obtains new access token without re-login | Days to months | Secure storage with encryption | 
| ID Token (OIDC) | Contains user identity information (JWT) | 5-60 minutes | Can be stored, contains no secrets | 
SMART on FHIR creates a complete application ecosystem by adding authentication, authorization, and application launch capabilities to FHIR's data access layer. Understanding how these layers interact is crucial for implementing SMART applications.
SMART defines a granular scoping system that controls exactly what data an application can access and what actions it can perform:
// Scope format: [user|patient|system]/[Resource].[read|write|*]
//
// User scopes - access data the user can see
user/Observation.read          // Read observations in patient chart user is viewing
user/Patient.read             // Read patient demographics
user/MedicationRequest.*      // Full access to medications
// Patient scopes - access data for authenticated patient only
patient/Observation.read      // Patient reads their own observations
patient/AllergyIntolerance.*  // Patient manages their allergy list
patient/*.read                // Patient reads all their clinical data
// System scopes - backend services (no user present)
system/Patient.read           // Backend system reads any patient
system/Observation.write      // Backend system can write observations
          launch/patient user/Patient.read user/Observation.read user/Condition.readopenid profile patient/Patient.read patient/Observation.read patient/MedicationRequest.readsystem/Patient.read system/Observation.read system/Encounter.readlaunch - Participate in EHR launchlaunch/patient - Request patient contextlaunch/encounter - Request encounter contextoffline_access - Request refresh tokenonline_access - Access only while onlineopenid profile email - User identity infoThe table below summarizes how SMART builds on top of FHIR:
| Component | SMART on FHIR | FHIR | 
|---|---|---|
| Authorization | OAuth2 | None | 
| Authentication | OpenID Connect | None | 
| Data Models | From FHIR | FHIR Resources | 
| Profiles | SMART profiles | None | 
| Data Access | From FHIR | FHIR REST API | 
| Data Format | From FHIR | FHIR JSON or XML | 
| EHR UI Integration | SMART Launch Specification | None | 
Perhaps one of the most crucial features of SMART is enabling integration with the user interface of EHRs, thus simplifying the process of navigating between applications by bringing them together in one interface.
With SMART, clinicians can access all integrated applications directly within their EHR, enter information, view data and make informed decisions without needing to leave the EHR environment.
In SMART on FHIR, OAuth Authorization is employed to provide secure access to healthcare data, allowing only authorized apps to retrieve patient information, while OpenID Connect is used to securely confirm the identity of users accessing healthcare data.
The focus of FHIR is on organizing and exchanging healthcare data and it does not directly incorporate OAuth Authorization or OpenID Connect for security purposes.
According to the Journal of the American Medical Informatics Association (JAMIA), while the number of unique healthcare applications rose from 600 to 734 in 2023, only 22% of the applications conformed to the FHIR standard. To improve compliance to FHIR, the Lantern tool, developed by the ONC (The Office of the National Coordinator) was set up to help ONC monitor and share insights on the presence and uniformity of FHIR compliant applications. Click here to view the Lantern dashboard
Source: Journal of the American Medical Informatics Association (JAMIA) - FHIR application usage across different healthcare categories
As federal regulations come into play and FHIR gains more traction, the number of applications conforming to SMART on FHIR is expected to increase significantly across all healthcare categories.
As federal regulations come into play and FHIR gains more traction, the number of applications conforming to SMART on FHIR is expected to increase significantly across all healthcare categories.
Finarb Analytics collaborated with a leading public hospital in Texas in developing a web-based application for early sepsis detection and prevention. This case study demonstrates practical SMART on FHIR implementation.
SMART on FHIR is designed to be interoperable with various Electronic Health Record (EHR) systems. An EHR platform needs to be selected that supports the SMART on the FHIR standard. The process involves researching different EHR vendors, their compatibility with SMART on FHIR, and their reputation in the healthcare industry.
The development involves using the FHIR resources and SMART App Launch framework to create a web-based application. There is a demand for developers who are familiar with FHIR standards and web application development. The SMART on FHIR framework provides libraries and tools that simplify this process and ensures proper authentication, authorization, and data exchange.
SMART on FHIR represents a significant advancement in healthcare interoperability, enabling the development of applications that can work across different healthcare systems while maintaining security and data integrity. As the healthcare industry continues to embrace digital transformation, SMART on FHIR will play an increasingly important role in enabling innovation and improving patient care.