Become a ModMed Certified FHIR API Vendor

Before Registering to become a Certified FHIR API vendor, please review the following guide to assist you in understanding the type of application you would like to build, the scopes and capabilities, and the way that customers, Providers, and Patients will interact with your application.

Once you register to become a Certified FHIR API vendor, you will be prompted with a screen to configure your app. And it is important to know what decisions you'll need to make before registering the app.

App Type

If you are working with a practice and you require access to their providers and patients' clinical data at the practice level, it is recommended that you create a Bulk FHIR application. This allows an Admin at the practice to add your ClientId to their practice one time to be able to gain access to that data as needed. All other app types will require either a Provider (defined as a role at the practice who has access to Clinical patient data) for all Provider apps or a Patient (defined as a user who has access to their clinical data through a Patient Portal username and password) for all Patient apps to authenticate themselves. And the vendor must provide that mechanism for initial use. Once a Standalone flow is used to authenticate the patient or provider, then a link will be placed into their UI for them to use the app as designed from inside the EHR.

For 'Patient' apps, it will require a Patient at the practice (with valid username/password for their patient portal access) to authenticate. Once they have authenticated, a link will be placed inside their portal for repeated access to your application and/or for the Patient to manage or disable access.

For 'Provider' apps, it will require a Provider at the practice to authenticate with the same credentials they use to authenticate to the EHR. Once they have authenticated, a link will be placed inside their EHR instance (different places depending on scopes) for them to leverage right from inside the EHR.

You can also create a 'Patient and Provider' app which can handle auth for both Patients and Providers.

Scopes

Context scopes — control what gets put in the token

ScopeStandaloneEHR LaunchWhat it does
launch/patientTriggers patient pickerPasses patient from EHR contextPuts patient claim in the token
launch/encounterRarely usefulPasses encounter from EHRPuts encounter claim in token
launchNeverAlways requiredTells auth server to honor the EHR's launch context

Identity scopes — control what you know about the logged-in user

ScopeWhen to useWhat it does
openidAlwaysRequired for OIDC — enables id_token
profileWhen you need user name/emailAdds basic profile claims to id_token
fhirUserWhen you need to look up the user as a FHIR resourceAdds a fhirUser claim — a URL like Practitioner/abc123 you can GET

Session scopes — control token lifetime

ScopeWhen to useWhat it does
online_accessMost appsRefresh token that expires when the user's EMA session ends
offline_accessBackground/long-running appsRefresh token that doesn't expire with the session

Resource scopes — control what FHIR data you can read

ScopeWhen to useWhat it does
patient/Resource.rsPatient context appsRead/search that resource scoped to the token's patient — can't read other patients' data
user/Resource.rsProvider context appsRead/search that resource as the logged-in user — broader access across patients they can see

By App Type

App TypeRequiredMakes senseDoesn't make sense
Standalone (patient picker)openid, launch/patientfhirUser, online_access, patient/*.rslaunch, launch/encounter, user/*.rs
EHR Launch — Patientopenid, launch, launch/patientfhirUser, online_access, patient/*.rslaunch/encounter, user/*.rs
EHR Launch — Provideropenid, launch, launch/encounterfhirUser, online_access, user/*.rslaunch/patient, patient/*.rs
EHR Launch — Patient + Provideropenid, launch, launch/patient, launch/encounterfhirUser, online_access, patient/.rs,user/.rs
Background / automatedopenid, offline_accessuser/*.rslaunch/patient, launch/encounter