Patient Access API (CMS-9115-F)
Patient Access API (CMS-9115-F)
The Patient Access API is the foundational interoperability obligation under CMS-9115-F (Interoperability and Patient Access Final Rule, 2020). It requires covered payers to implement a FHIR R4 API that allows a patient — through a third-party application of their choice — to retrieve their own health data. Compliance was required by July 1, 2021.
This is existing regulation, not upcoming. Payers that were in scope in 2021 should already have compliant implementations. This article documents the technical requirements, data scope, and the relationship to subsequent rules (CMS-0057-F).
For the broader CMS interoperability picture, see CMS Interoperability Rules. For the provider-initiated equivalent (CMS-0057-F, 2027), see Provider Access API.
Who is covered
CMS-9115-F applies to the following payer types:
| Payer type | Notes |
|---|---|
| Medicare Advantage (MA) organizations | CMS-regulated plans |
| State Medicaid fee-for-service (FFS) programs | State agencies operating Medicaid directly |
| Children’s Health Insurance Program (CHIP) | FFS programs |
| Qualified Health Plan (QHP) issuers on Federally Facilitated Exchanges (FFEs) | Marketplace plans |
Not covered: Commercial/employer-sponsored group health plans, fee-for-service Medicare (CMS operates Blue Button 2.0 directly for beneficiaries), Medicaid managed care organizations (separately regulated, subject to CMS rules but with different timelines).
This is an important boundary. A commercial insurer offering employer-sponsored plans is not subject to CMS-9115-F’s Patient Access API requirement for those lines of business. If the same insurer also offers MA plans, the MA line is subject to the rule.
What the API must provide
The Patient Access API must give patients access to the following data categories:
Claims and encounter data
Adjudicated claims data, represented using CARIN Blue Button Implementation Guide profiles on the FHIR ExplanationOfBenefit resource. CARIN Blue Button defines four EOB profile types:
| CARIN EOB profile | Claim type |
|---|---|
| Inpatient Institutional | Hospital inpatient stays |
| Outpatient Institutional | Hospital outpatient services |
| Professional/Non-Clinician | Physician and other professional services |
| Pharmacy | Prescription drug claims |
Each profile maps payer claims data fields to FHIR elements. For example, the professional EOB includes diagnosis codes, procedure codes, servicing provider NPI, allowed and paid amounts, and adjudication status.
Clinical data
Clinical information the payer holds, represented using US Core FHIR profiles. This includes:
- Conditions (
US Core Condition) - Observations and laboratory results (
US Core Observation) - Procedures (
US Core Procedure) - Medications and dispense records
- Allergies and intolerances
- Immunizations
The scope of clinical data available from a payer is typically derived from claims data — not from direct clinical records (payers don’t maintain EHRs). A diagnosis code on a claim becomes a Condition resource; a procedure code becomes a Procedure resource.
Coverage information
The patient’s current and historical coverage, represented as FHIR Coverage resources. This tells an app what plan the patient is on, the member ID, the payer, and coverage period.
Prior authorization data (added by CMS-0057-F)
Prior authorization data was not required in the original CMS-9115-F Patient Access API. CMS-0057-F (2024) added the requirement that PA data — including denial reasons — must be included in Patient Access API responses. The compliance deadline for PA data in Patient Access is January 1, 2026.
Technical standard: SMART App Launch
The Patient Access API uses the SMART App Launch Framework with the OAuth2 authorization code grant (also called the authorization code flow). This is the patient-facing authentication model: the patient authenticates with the payer’s identity provider and explicitly consents to data access by the third-party app.
Authorization code flow
The sequence for a SMART-connected app retrieving patient data:
- App initiates — the patient opens a third-party health app and chooses to connect to their payer
- Redirect to payer authorization server — the app redirects the patient’s browser to the payer’s OAuth2 authorization endpoint, passing the requested scopes and a redirect URI
- Patient authenticates — the patient logs in to their payer account (portal credentials or similar)
- Patient consents — the authorization server presents a consent screen showing what data the app is requesting
- Authorization code issued — the payer redirects back to the app with an authorization code
- Token exchange — the app exchanges the authorization code for an access token (and optional refresh token) by calling the token endpoint
- API calls — the app calls the FHIR server using the access token in the
Authorization: Bearerheader - Data returned — the payer’s FHIR server returns the requested resources
The token exchange step (step 6) looks like this:
POST /token HTTP/1.1
Host: payer.example.com
Content-Type: application/x-www-form-urlencoded
grant_type=authorization_code
&code=AUTH_CODE_FROM_STEP_5
&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback
&client_id=my-health-app
&code_verifier=PKCE_VERIFIER
The payer’s token endpoint responds with:
{
"access_token": "eyJhbGciOiJSUzI1NiJ9...",
"token_type": "Bearer",
"expires_in": 3600,
"scope": "patient/Patient.read patient/ExplanationOfBenefit.read patient/Coverage.read",
"patient": "Patient/payer-member-id-123",
"refresh_token": "8xLOxBtZp8"
}
The patient field in the token response is the SMART patient context — the app uses this value as the patient reference for all subsequent FHIR queries.
How this differs from Provider Access API
The Patient Access API uses the authorization code grant — the patient is present, authenticates, and consents. The Provider Access API (CMS-0057-F, January 2027) uses SMART Backend Services (client credentials) — no patient login, system-to-system, with provider organizational credentials. The two APIs serve different requesters and use different OAuth2 flows. See Provider Access API for the provider-initiated model.
CARIN Blue Button profiles in detail
CARIN Blue Button is a HL7 FHIR Implementation Guide developed by the CARIN Alliance that defines how payer claims data maps to FHIR resources. CMS-9115-F mandates CARIN Blue Button for claims data in the Patient Access API.
An ExplanationOfBenefit resource using CARIN Blue Button profiles represents a single adjudicated claim. A minimal example of a professional EOB:
{
"resourceType": "ExplanationOfBenefit",
"id": "eob-professional-001",
"meta": {
"profile": [
"http://hl7.org/fhir/us/carin-bb/StructureDefinition/C4BB-ExplanationOfBenefit-Professional-NonClinician"
]
},
"status": "active",
"type": {
"coding": [{
"system": "http://terminology.hl7.org/CodeSystem/claim-type",
"code": "professional"
}]
},
"use": "claim",
"patient": { "reference": "Patient/payer-member-id-123" },
"billablePeriod": {
"start": "2024-08-15",
"end": "2024-08-15"
},
"created": "2024-08-22",
"insurer": { "reference": "Organization/payer-acme" },
"provider": { "reference": "Organization/provider-clinic-456" },
"outcome": "complete",
"diagnosis": [{
"sequence": 1,
"diagnosisCodeableConcept": {
"coding": [{
"system": "http://hl7.org/fhir/sid/icd-10-cm",
"code": "J06.9",
"display": "Acute upper respiratory infection, unspecified"
}]
}
}],
"total": [
{
"category": {
"coding": [{ "code": "submitted" }]
},
"amount": { "value": 185.00, "currency": "USD" }
},
{
"category": {
"coding": [{ "code": "benefit" }]
},
"amount": { "value": 148.00, "currency": "USD" }
}
]
}
This is a stripped-down example. Production CARIN Blue Button EOBs include adjudication details, line-item services, rendering provider NPI, subscriber information, and additional claim-specific fields.
Provider Directory API
CMS-9115-F also requires covered payers to implement a Provider Directory API — a public-facing FHIR API that exposes the payer’s network directory (which providers participate in the plan). The technical standard is the Da Vinci PDex Plan Net Implementation Guide.
The Provider Directory API is patient-facing in the sense that it is unauthenticated (no patient login required) — anyone can query it to find in-network providers. It is separate from the Patient Access API but required by the same rule.
Plan Net profiles include: PlannetOrganization, PlannetPractitioner, PlannetPractitionerRole, PlannetLocation, PlannetNetwork, PlannetEndpoint.
Penalties for non-compliance
CMS-9115-F enforcement is primarily through public reporting. CMS can publicly report payers that are non-compliant, which creates reputational and market pressure. CMS can also refer persistent non-compliance to the appropriate federal or state agency.
Civil monetary penalties are available in statute but have been rarely invoked for Patient Access API non-compliance specifically. CMS’s enforcement posture has been more active with CMS-0057-F given the prior track record on CMS-9115-F compliance quality across the industry.
Relationship to CMS-0057-F (2024)
CMS-0057-F (Interoperability and Prior Authorization Final Rule) did not replace CMS-9115-F. It built on top of it.
| Aspect | CMS-9115-F (2021) | CMS-0057-F (added requirements) |
|---|---|---|
| Patient Access API | Established (claims, clinical, coverage) | Adds prior authorization data (Jan 1, 2026) |
| Provider Directory API | Established (Plan Net IG) | No change |
| Payer-to-Payer | Initial requirement | Updated, expanded (Jan 1, 2027) |
| Provider Access API | Not established | New requirement (Jan 1, 2027) |
| Prior Authorization API | Not established | New requirement (Jan 1, 2026) |
Payers must comply with all obligations under both rules. The Patient Access API established under CMS-9115-F continues to operate; CMS-0057-F layered additional data scope (prior auth) and new APIs (Provider Access, Prior Auth API) on top of it.
Implementation checklist
- FHIR R4 endpoint live with SMART App Launch capability statement
- Authorization code flow (PKCE required) operational
- Patient portal credential used for SMART login
- ExplanationOfBenefit resources conforming to CARIN Blue Button profiles (all four EOB types)
- US Core profiles for clinical data (Condition, Observation, Procedure, etc.)
- Coverage resource for current and historical coverage
- Provider Directory API (Plan Net IG) publicly accessible
- Patient context returned in token response (
patientclaim) - Prior authorization data included (compliance by January 1, 2026 under CMS-0057-F)
See also
- CMS Interoperability Rules — overview of CMS-9115-F and CMS-0057-F
- Provider Access API — provider-initiated equivalent under CMS-0057-F
- Information Blocking Rule — ONC prohibition on obstructing data access