SMART on FHIR scopes are space separated strings that state what an app wants to access. A scope has a prefix (patient, user or system), a resource type, and permission letters from c, r, u, d and s. Ask for the narrowest set your app needs, then check what the server actually granted.
Anatomy of a scope
Take patient/Observation.rs.
- Prefix:
patient/limits access to resources tied to the patient in context. - Resource:
Observationis the FHIR resource name. Names are case sensitive. - Permissions:
rsmeans read and search.
The prefix user/ covers anything the logged in user can reach, which may span many patients. The prefix system/ is for direct, non user access, such as a background service.
The permission letters
They follow a dot after the resource and must appear in this order: c, r, u, d, s.
- c: create
- r: read, including version read and history of a single resource
- u: update or patch
- d: delete
- s: search
So .cu is valid and .uc is not. Write access does not imply read access. An app that creates observations and also reads them needs create and read plus search, such as .c and .rs.
Launch and context scopes
launchsays the app started from inside the EHR and should receive the session context.launch/patientasks for a patient to be selected, which standalone apps need because they start without context.
Identity and refresh scopes
openidasks for an ID token, andfhirUseradds a claim naming the user as a FHIR resource such as Practitioner or Patient. Validate the token signature with the issuer's published keys.offline_accessrequests a refresh token that can work after the user goes offline.online_accessworks only while the user remains online.
Security habits
- Avoid wildcard resource scopes. The star matches every type, including ones added later.
- Prefer
patient/overuser/when the app serves one patient at a time. - Request offline access only if you truly need background refresh.
- Compare the granted scope list in the token response with what you asked for. Servers may grant less.
- Treat system scopes as high value credentials and rotate them.
For the bigger picture, read FHIR security is not built in.
Quick check
What does patient slash Observation dot rs allow?
Read and search access to Observation resources for the patient in context.
Does a granted scope always match the request?
No. Servers may grant a different set, so check the scope list in the token response.
Sources
Last reviewed: 19 October 2026.