Child pages
  • Emory SMART on FHIR API Guide and Implementation Strategies

Versions Compared


  • This line was added.
  • This line was removed.
  • Formatting was changed.
Comment: Pointing all SMART references to EHC

What is a SMART app?

A SMART app is most likely a web apps that is built upon a framework that has enabled development of 3rd party apps that run in the context of the EMR. The apps can be used by doctors, nurses and other practitioners (providers) or patients. They can be launched from within the EMR's UI or any web browser and can also run as native apps on mobile devices. SMART apps use the SMART framework for authentication and authorization to the EMR. SMART-on-FHIR contains specific logic for manipulating resources that are a part of the FHIR specification.

FHIR defines resources in JSON and contains rules about which attributes are required for by the resource, which are queryable, and the other details like their values and which standards are linked to. FHIR also defines metadata formats for discovering endpoints. 

SMART came first, before FHIR, and provided authorization but used something besides FHIR (some other HL7 protocol) to access resources.

Types of SMART Apps

Provider facing


"Provider facing" is a general term to denote an app that allows the user to choose resources from many different patients. The inverse term is "Patient facing" where the app user is limited to the resources that they own or are owned by their relations. These are also specific terms used in the Cerner Developer Portal registration for an app.

These apps can be integrated into EHR "workflow". For Millenium+ this means running in the PowerChart environment on a clinical workstation. The EHR launches the app when triggered, e.g. on creation of an order for a lab test.

titleTO DO

Detail the process of requesting access to the CDP.

Image Removed

Image Removed

(scroll down)

Image Removed

Then the developer portal assigns test credentials to you to use to authenticate to the provider portal...

Image Removed

...when you click the launch button.

Image Removed

Login to the sandbox system with the test credentials.

Finally, the sample example launches with the Patient context/resource and Observations.

Image Removed

Patient facing

(standalone) (Cerner sandbox registration term)

    • Uses a patient portal to authenticated and obtain ehr data.. The Cerner sandbox supports this. The Cerner Sandbox Patient Portal is called FHIR Play. The records of the portal's fake patients, along with user IDs and passwords, are in the SMART on FHIR test patients.docx file.
      Here's the sample example MTP - Patient App app. 

Pick one of the patients in the SMART on FHIR test patients.docx.

Image Removed

Launch the sample example MTP - Patient App app (if you haven't already). The app will redirect you to the FHIRPLAY authentication server

Image Removed

Then you get the authorization screen when you login as fake patient Nancy_Smart:

Image Removed

Once authorized, the sample example MTP Patient app can finally run and be provided with the Patient and Observation resources.

Image Removed

Standalone non-authenticated (See Python example)

  • Much like Grady's implementation of the MTP app
  • No samples,yet!
  • SMART sandbox would say this uses a Confidential profile meaning the authentication credentials are stored in the secure client (server).
  • Cerner sandbox calls this a "system" App Type and doesn't support it.

Mobile SMART apps




Cerner Ignite Roadmap ← this need requires a Cerner Care Account

 is confidential! Do not share.

Cerner tutorial.




Datica Mock FHIR API

SMART on FHIR Profiles

To support apps that run unmodified across different health IT systems, we need a set of “ground rules” that define which data fields are required vs. optional, and which coding systems should be used in a given context. The FHIR specification leaves many of these decisions open to downstream implementers, to ensure that FHIR can work with a variety of use cases. But for a viable app platform, we need more.

Minimum Set of Data Fields

Common Clinical Data Set

Working with the community

As much as possible we want to avoid inventing these “ground rules” ourselves. In the United States, SMART has adopted the profiles outlined in the Argonaut Implementation Guide. Similarly, communities in other regions should work together to define a standard set of profiles that are appropriate for the terminology systems commonly used in their area.


Not the monkey trial. These are many. patient/ and patient/ are but 2 required in the example app, among others.

patient vs. user scope

Self-Hosted Sandbox

If you’re an advanced user, you can set up a local copy of the sandbox on your computer, a local server, or a cloud server by following the instructions at

Mapping EHR model to FHIR!searchin/cerner-fhir-developers/map%7Csort:date/cerner-fhir-developers/Xu4d2JGDLNE/Ye-4OG_JBAAJ


Cerner FHIR Developers ›


Cerner FHIR Resource Content that is Included?
2 posts by 2 authors



Hi Cerner Developers, 

For each of the Cerner FHIR resources being developed are all of the content listed on the FHIR's content documentation pages being included for each resource? 

For example, the Contract Resource doesn't include the Contract's Term List as shown under the FHIR Contract documentation page here:

Is this where only certain fields are being included in each Resource for Cerner? Or does the Cerner documentation just not list that information and the sandbox not contain those examples since it'll just return blank if it doesn't exist?

I just want to understand what content Cerner returns compared to what FHIR suggests.

I hope that makes sense, thank you for your help!


Click here to Reply



Hi Mayce!

The examples listed on should be considered examples and are not necessarily prescriptive of what every instance of a resource will return.  Some instances could contain more fields and some could contain less.

We have tried to map our Millennium data models to the FHIR spec as much as possible.  When it comes to optional fields, their presence can also be contingent on how the data was entered a particular client site.  Overall, we have sought to follow the Argonaut Implementation Guide for resources we've exposed, so I'd definitely encourage you to refer to that for resources that you're interested in consuming.

- show quoted text -


The table below lists the FHIR Resources used for the corresponding 2015 Edition Common Clinical Data Set (CCDS) Data elements:


Java Example

This example shows how to create a Patient resource

package edu.emory.lits.arch.sandbox;
import ca.uhn.fhir.context.FhirContext;
import org.hl7.fhir.dstu3.model.HumanName;
import org.hl7.fhir.dstu3.model.Patient;
public class FhirTest {
    public static void main(String[] args) throws IOException {
        // context - create this once, as it's an expensive operation
        // see
        FhirContext ctx = FhirContext.forDstu3();
        Patient patient = new Patient();
        // you can use the Fluent API to chain calls
        // see
        System.out.println("Press Enter to serialise Resource to the console as XML.");;
        // create a new XML parser and serialize our Patient object with it
        String encoded = ctx.newXmlParser().setPrettyPrint(true)
        System.out.println("Press Enter to end.");;

CURL Example

curl \
       -H 'Accept: application/json'

is a patient query that returns a patient resource in JSON format.

Python Example using SMART open sandbox

There is no authentication needed to use this sandbox. This example shows how to query a Patient resource by ID:

from fhirclient import client
import fhirclient.models.patient as p
def main():
    settings = {
        'app_id': 'my_web_app',
        'api_base': ''
    smart = client.FHIRClient(settings=settings)
    print("FHIRClient version: ",client.__version__)
    patient ='smart-1032702', smart.server)
    # '1963-06-12'
    '''Where is the doc for smart.human_name(), and the Patient object????'''
    # 'Christy Ebert'
if __name__ == '__main__':

This uses the "FHIRCLIENT" module version 1.0.3 to support FHIR DSTU2. Use pip to install: 

> pip install -I fhirclient==1.0.3

Miss Ellen E. Ohss

Did you know there is a SMART patient generator

View the SMART FHIR DSTU2 Data Dashboard:

Genomics data, get your genomics data here.


FHIR for Developers

FHIR Tutorial


Javadocs DSTU3

Javadocs DSTU2

Mirth Open Source

Begin hosting your own FHIR interfaces with Mirth® Connect


Implement this: