Sign in

Provider Access · CMS-0057F · §422.119(c) · PDex STU 2.1.0 · ATR STU 2.1.0

Provider Access

Live

In-network providers retrieve their attributed members' clinical and claims data through standards-based bulk FHIR. SMART Backend Services. No member login. For provider-organization and EHR technical teams.

How it works

A server-to-server flow. No member login, no app registration — your organization is provisioned once, then pulls on a schedule.

  1. 1

    Get provisioned

    Provider Access is provisioned by Acme Health, not self-service. Acme Health registers your organization, confirms your NPI, and issues SMART Backend Services credentials (a client ID bound to your signing key).

  2. 2

    Retrieve your attributed panel

    Each organization is attributed to a member group. Fetch the group to see the members you are authorized to pull.

    GET /fhir/r4/Group/{group-id} HTTP/1.1
    Host: provider-access.acmehealth.example
    Authorization: Bearer <access_token>
    Accept: application/fhir+json
  3. 3

    Start a bulk export

    Kick off an asynchronous export for the group. Filter by member, date, and resource type. You get a 202 Accepted with a status URL to poll.

    POST /fhir/r4/Group/{group-id}/$davinci-data-export HTTP/1.1
    Host: provider-access.acmehealth.example
    Authorization: Bearer <access_token>
    Prefer: respond-async
    Accept: application/fhir+json
    
    # Optional filters: patient, _since, _type, _typeFilter
  4. 4

    Poll and download

    Poll the status URL until the export completes, then download the NDJSON files (one resource per line). Members who have opted out are excluded automatically.

    GET /fhir/r4/$export-poll-status?jobId={jobId} HTTP/1.1
    Host: provider-access.acmehealth.example
    Authorization: Bearer <access_token>
    Accept: application/json
    
    # 202 Accepted -> still running (Retry-After header set)
    # 200 OK       -> complete; body.output[] lists NDJSON download URLs

Don't have a Group ID? Match your patient panel

Skip this if you already got a Group ID in step 1. Use it when you only have your own patient list and need Acme Health to resolve it to an attribution group.

  1. 5

    Submit your patient list

    Don't have a Group ID? Submit your own patient panel and Acme Health will match it against its attribution records.

    POST /fhir/r4/Group/$provider-member-match HTTP/1.1
    Host: provider-access.acmehealth.example
    Authorization: Bearer <access_token>
    Content-Type: application/fhir+json
    Accept: application/fhir+json
    
    {
      "resourceType": "Parameters",
      "parameter": [
        { "name": "MemberPatient", "resource": { "resourceType": "Patient", "...": "..." } }
      ]
    }
    
    # 202 Accepted -> Content-Location header carries the poll URL / jobId
  2. 6

    Poll the match job, then export

    Poll until matching completes. The response carries a matchedGroupId — use it as {group-id} in the bulk export step above.

    GET /fhir/r4/$match-poll-status?jobId={jobId} HTTP/1.1
    Host: provider-access.acmehealth.example
    Authorization: Bearer <access_token>
    Accept: application/json
    
    # 202 Accepted -> still matching
    # 200 OK       -> complete; body.matchedGroupId is your Group ID

Authentication

SMART Backend Services with the client-credentials grant. You authenticate with a signed JWT assertion — no member login, no PKCE, no refresh tokens.

access token
curl -X POST https://auth.acmehealth.example/oauth2/token \
  -H "Content-Type: application/x-www-form-urlencoded" \
  -d "grant_type=client_credentials" \
  -d "scope=system/Group.read system/Patient.read system/Observation.read system/Condition.read system/MedicationRequest.read system/Encounter.read system/AllergyIntolerance.read system/Immunization.read system/Procedure.read system/DocumentReference.read" \
  -d "client_assertion_type=urn:ietf:params:oauth:client-assertion-type:jwt-bearer" \
  -d "client_assertion=$SIGNED_JWT"

Request only the resource scopes your integration needs — the list above covers the full USCDI v3 surface. system/*.read is also accepted and grants every resource type, but it is broader than most integrations require.

Provisioned, not registered. There is no self-service registration for Provider Access. Acme Health issues your credentials and binds them to your attributed group.

Tokens are system-scoped and short-lived. Treat them and the data they return as PHI.

Endpoints

The patterns that cover the Provider Access surface.

GET/fhir/r4/Group?managing-entity={org}

Discover the attributed member groups your organization manages.

View docs →
GET/fhir/r4/Group/{id}

Retrieve a group and its member list — the panel you are authorized to pull.

View docs →
POST/fhir/r4/Group/{id}/$davinci-data-export

Start an async bulk export of the group's clinical data. Returns 202 + a status URL.

View docs →
GET/fhir/r4/$export-poll-status?jobId={jobId}

Poll an in-progress bulk export job. 202 while running, 200 with NDJSON URLs when complete.

View docs →
POST/fhir/r4/Group/$provider-member-match

Match your own patient panel when you don't already have a Group ID.

View docs →
GET/fhir/r4/$match-poll-status?jobId={jobId}

Poll a member-match job. 202 while matching, 200 with matchedGroupId when complete.

View docs →
GET/fhir/r4/metadata

CapabilityStatement. Public, no auth, JSON. Pin against this in your client.

View docs →

What you receive

Exports return your attributed members' clinical record as conformant FHIR. Financial claims are out of scope unless your contract includes them.

DataProfileNotes
Clinical (conditions, meds, labs, vitals, allergies, immunizations)US Core 6.1.0Always included.
Encounters & proceduresUS Core 6.1.0Always included.
Non-financial claims dataPDex STU 2.1.0Encounter-level claims, no cost-sharing.
Explanation of Benefit (financial claims)CARIN BB 2.2.0Excluded unless Acme Health contractually authorizes it.