Healthcare/CMS-0057-F, USA
Regulatory guide

CMS-0057-F prior authorization and payer FHIR APIs

The CMS Interoperability and Prior Authorization final rule requires four production FHIR R4 APIs from US payers and sets fixed decision timeframes. The dates, the guides and the integration pattern.

4required FHIR APIs
2027APIs live by Jan 1
72hurgent decisions from 2026
prior_auth_status.py
# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class PriorAuthStatus(Service):
    name = 'demo.cms.prior-auth-status'

    def handle(self) -> 'None':

        # The payer's FHIR store, OAuth handled for you
        client = self.fhir['FHIR.Payer']

        # Prior authorizations are Claim resources
        # in the Da Vinci PAS exchange
        claims = client.resources('Claim').search(
            patient = 'Patient/example',
            use = 'preauthorization',
        )

        for claim in claims.fetch():
            self.logger.info('Prior auth: %s', claim['id'])

What does CMS-0057-F require and by when?

CMS-0057-F, the Interoperability and Prior Authorization final rule, was finalized on January 17, 2024. It applies to "impacted payers" - Medicare Advantage organizations, state Medicaid and CHIP agencies, Medicaid and CHIP managed care plans, and Qualified Health Plan issuers on the federal exchanges - and its obligations arrive in two waves.

DateRequirement
January 1, 2026Process rules - prior authorization decisions within 7 calendar days (standard) and 72 hours (urgent/expedited), with specific denial reasons
March 31, 2026First public prior authorization metrics due
January 1, 2027Four production FHIR APIs live - Patient Access, Provider Access, Payer-to-Payer and Prior Authorization (state Medicaid and CHIP fee-for-service too)

All four APIs are defined as HL7 FHIR R4 APIs - the rule builds directly on the FHIR ecosystem rather than defining a new format.

Which implementation guides apply?

CMS recommends, without strictly mandating, the HL7 Da Vinci and CARIN implementation guides - CARIN Blue Button for Patient Access claims data, Da Vinci PDex for payer data exchange, Plan-Net for provider directories, and the ePA trio for prior authorization - CRD (Coverage Requirements Discovery), DTR (Documentation Templates and Rules) and PAS (Prior Authorization Support).

Because the guides are recommended rather than mandated, an all-FHIR prior authorization flow is allowed under CMS enforcement discretion even where X12 278 transactions would otherwise apply - which is why new implementations typically start FHIR-first.

What is the integration pattern?

Payers do not need to rebuild their utilization management and claims systems for this - the pattern is FHIR APIs exposed in front of the existing systems, with an integration layer translating between FHIR and the internal formats. Inbound, a FHIR-shaped request arrives over REST, the layer queries the UM system, and the answer goes back as FHIR resources. Outbound, the layer reads from internal stores and publishes into the FHIR store the APIs serve from.

Zato provides that layer - REST channels for the FHIR-shaped endpoints, outgoing FHIR connections for the payer's FHIR store, and Python services for the translation. It integrates and fronts systems - it is not itself a certified FHIR server, and profile validation belongs to the FHIR store.

How do I implement it from Python?

The service below is the inbound side of a prior authorization status endpoint - a REST channel receives the query, the service reads the payer's FHIR store and answers with the Claim and its ClaimResponse. OAuth against the store - including SMART Backend Services style client credentials - is configuration on the connection, not code.

prior_auth_endpoint.py
# -*- coding: utf-8 -*-

# Zato
from zato.server.service import Service

class PriorAuthEndpoint(Service):
    """ Exposed through a REST channel as part of the Prior Authorization API.
    """
    name = 'demo.cms.prior-auth-endpoint'

    def handle(self) -> 'None':

        # Which patient the caller is asking about
        patient_id = self.request.payload['patient_id']

        # The payer's FHIR store, tokens managed for you
        client = self.fhir['FHIR.Payer']

        # The prior authorization requests ..
        claims = client.resources('Claim').search(
            patient = f'Patient/{patient_id}',
            use = 'preauthorization',
        ).fetch_all()

        # .. and the decisions made about them.
        responses = client.resources('ClaimResponse').search(
            patient = f'Patient/{patient_id}',
        ).fetch_all()

        self.response.payload = {
            'requests': [item.serialize() for item in claims],
            'decisions': [item.serialize() for item in responses],
        }

Frequently asked questions

Medicare Advantage organizations, state Medicaid and CHIP fee-for-service programs, Medicaid and CHIP managed care plans and entities, and Qualified Health Plan issuers on the federally-facilitated exchanges. Commercial plans outside these programs are not directly covered, though many follow the same pattern.

The OAuth 2.0 client credentials flow with signed JWT assertions that server-to-server FHIR clients use - no user in the loop. With Zato, the security definition is attached to the outgoing FHIR connection and token acquisition and refresh happen automatically.

Not formally - HIPAA still names X12 278 as the prior authorization transaction. CMS enforcement discretion permits an all-FHIR flow, which is what the Da Vinci PAS guide defines and what new implementations typically build.

The original proposal targeted earlier dates, and the final rule set January 1, 2027 for the four APIs - the 2026 dates cover the process requirements, decision timeframes and denial reasons.

Ready for the 2027 payer API deadline?

Get started with Zato and build the FHIR layer in front of your existing systems.

Open source In Python