Careforce · Phoenix
Admin

Epic FHIR Integration

A backend (SMART Backend Services) integration with Epic — system-to-system access to the Epic FHIR APIs. It authenticates as a registered app and reads the resources you authorize. This page lists our application identity and the scopes we request. Individual capabilities (such as scheduling) are described in their own sections below.

Application identity

Register the JWK Set URL below with our client id in your Epic environment.

Production client ID 5a684d86-fa5e-48c0-ad06-233701199d87
Non-production client ID 87b94317-7a53-4a96-8a89-998bd31f3ade
JWK Set URL https://phoenix.careforce.ai/epic/oauth
Token refresh endpoint https://phoenix.careforce.ai/epic/oauth/refresh

Scopes we request

The 149 Epic FHIR APIs this integration requests, grouped by area — expand a group to see its APIs. Operations such as Appointment.$find are enabled by your Epic configuration rather than by an OAuth scope.

Scheduling 11
  • Appointment.$book (STU3)
  • Appointment.$find (STU3)
  • Appointment.Read (Appointments) (R4)
  • Appointment.Read (Appointments) (STU3)
  • Appointment.Search (Appointments) (R4)
  • Appointment.Search (Appointments) (STU3)
  • Schedule.Read (STU3)
  • Slot.Read (STU3)
  • GetWaitTimes
  • GetDepartmentWaitTimes
  • GetProviderWaitTimes
Appointments (other contexts) 4
  • Appointment.Read (Prior Auth) (R4)
  • Appointment.Read (Scheduled Surgeries) (R4)
  • Appointment.Search (Prior Auth) (R4)
  • Appointment.Search (Scheduled Surgeries) (R4)
Patients & demographics 14
  • Patient.$match (Patient Match) (R4)
  • Patient.Create (Demographics) (R4)
  • Patient.Create (STU3)
  • Patient.Read (Demographics) (R4)
  • Patient.Read (DSTU2)
  • Patient.Read (STU3)
  • Patient.Search (Demographics) (R4)
  • Patient.Search (DSTU2)
  • Patient.Search (STU3)
  • UpdateUserDemographics
  • RelatedPerson.Read (Friends and Family) (R4)
  • RelatedPerson.Read (Proxy) (R4)
  • RelatedPerson.Search (Friends and Family) (R4)
  • RelatedPerson.Search (Proxy) (R4)
Coverage & insurance 6
  • Coverage.Read (Outside Record) (R4)
  • Coverage.Read (Patient Insurance Information) (R4)
  • Coverage.Read (Patient Insurance Information) (STU3)
  • Coverage.Search (Outside Record) (R4)
  • Coverage.Search (Patient Insurance Information) (R4)
  • Coverage.Search (Patient Insurance Information) (STU3)
Providers & organizational directory 22
  • Practitioner.Read (DSTU2)
  • Practitioner.Read (Organizational Directory) (R4)
  • Practitioner.Read (STU3)
  • Practitioner.Read (Outside Record) (R4)
  • Practitioner.Search (DSTU2)
  • Practitioner.Search (Organizational Directory) (R4)
  • Practitioner.Search (STU3)
  • Practitioner.Search (Outside Record) (R4)
  • PractitionerRole.Read (Organizational Directory) (R4)
  • PractitionerRole.Read (STU3)
  • PractitionerRole.Read (Outside Record) (R4)
  • PractitionerRole.Search (Organizational Directory) (R4)
  • PractitionerRole.Search (STU3)
  • PractitionerRole.Search (Outside Record) (R4)
  • Location.Read (Organizational Directory) (R4)
  • Location.Read (STU3)
  • Location.Search (Organizational Directory) (R4)
  • Organization.Read (Organizational Directory) (R4)
  • Organization.Read (STU3)
  • Organization.Search (Organizational Directory) (R4)
  • Endpoint.Read (R4)
  • Endpoint.Read (STU3)
Encounters & conditions 8
  • Encounter.Read (Patient Chart) (R4)
  • Encounter.Read (Patient Chart) (STU3)
  • Encounter.Search (Patient Chart) (R4)
  • Encounter.Search (Patient Chart) (STU3)
  • Condition.Read (Reason for Visit) (R4)
  • Condition.Search (Reason for Visit) (R4)
  • EpisodeOfCare.Read (R4)
  • EpisodeOfCare.Search (R4)
Clinical lists & flags 29
  • List.Read (Allergies) (R4)
  • List.Read (Family History) (R4)
  • List.Read (Hospital Problems) (R4)
  • List.Read (Immunizations) (R4)
  • List.Read (Medication List) (R4)
  • List.Read (Patient List) (R4)
  • List.Read (Patient List) (STU3)
  • List.Read (Problems) (R4)
  • List.Search (Allergies) (R4)
  • List.Search (Family History) (R4)
  • List.Search (Hospital Problems) (R4)
  • List.Search (Immunizations) (R4)
  • List.Search (Medication List) (R4)
  • List.Search (Patient List) (R4)
  • List.Search (Patient List) (STU3)
  • Flag.Read (Health Concern) (STU3)
  • Flag.Read (Health Concerns) (R4)
  • Flag.Read (Infection) (R4)
  • Flag.Read (Infection) (STU3)
  • Flag.Read (Isolation) (R4)
  • Flag.Read (Patient FYI) (R4)
  • Flag.Read (Patient FYI) (STU3)
  • Flag.Search (Health Concern) (STU3)
  • Flag.Search (Health Concerns) (R4)
  • Flag.Search (Infection) (R4)
  • Flag.Search (Infection) (STU3)
  • Flag.Search (Isolation) (R4)
  • Flag.Search (Patient FYI) (R4)
  • Flag.Search (Patient FYI) (STU3)
Consent & documents 12
  • Consent.Read (Code Status) (R4)
  • Consent.Read (Code Status) (STU3)
  • Consent.Read (Document) (R4)
  • Consent.Read (Document) (STU3)
  • Consent.Search (Code Status) (R4)
  • Consent.Search (Code Status) (STU3)
  • Consent.Search (Document) (R4)
  • Consent.Search (Document) (STU3)
  • DocumentReference.Create (Clinical Notes) (R4)
  • DocumentReference.Create (Clinical Notes) (STU3)
  • DocumentReference.Create (Document Information) (R4)
  • DocumentReference.Create (Non-Patient Document Information) (R4)
Questionnaires 12
  • Questionnaire.$log-questionnaire-errors (R4)
  • Questionnaire.$next-question (R4)
  • Questionnaire.$questionnaire-package (R4)
  • Questionnaire.Read (Patient-Entered Questionnaires) (R4)
  • Questionnaire.Search (Patient-Entered Questionnaires) (R4)
  • QuestionnaireResponse.Create (Patient-Entered Questionnaires) (R4)
  • QuestionnaireResponse.Read (Code Status Questionnaire) (R4)
  • QuestionnaireResponse.Read (Outside Record) (R4)
  • QuestionnaireResponse.Read (Patient-Entered Questionnaires) (R4)
  • QuestionnaireResponse.Read (Prior Auth) (R4)
  • QuestionnaireResponse.Search (Outside Record) (R4)
  • QuestionnaireResponse.Search (Patient-Entered Questionnaires) (R4)
Orders & referrals (ServiceRequest) 19
  • ServiceRequest.Create (External Radiotherapy Summary) (R4)
  • ServiceRequest.Read (Community Resource ServiceRequest) (R4)
  • ServiceRequest.Read (Dental Procedure) (R4)
  • ServiceRequest.Read (External Radiotherapy Summary) (R4)
  • ServiceRequest.Read (Order Template Procedure) (R4)
  • ServiceRequest.Read (Orders) (R4)
  • ServiceRequest.Read (Outside Record) (R4)
  • ServiceRequest.Read (Pregnancy Plans) (R4)
  • ServiceRequest.Read (Prior Auth) (R4)
  • ServiceRequest.Read (Referral) (R4)
  • ServiceRequest.Search (Community Resource ServiceRequest) (R4)
  • ServiceRequest.Search (Dental Procedure) (R4)
  • ServiceRequest.Search (External Radiotherapy Summary) (R4)
  • ServiceRequest.Search (Order Template Procedure) (R4)
  • ServiceRequest.Search (Orders) (R4)
  • ServiceRequest.Search (Outside Record) (R4)
  • ServiceRequest.Search (Pregnancy Plans) (R4)
  • ServiceRequest.Search (Prior Auth) (R4)
  • ServiceRequest.Update (External Radiotherapy Summary) (R4)
Communication & tasks 12
  • Communication.Create (Community Resource Communication) (R4)
  • Communication.Read (Community Resource Communication) (R4)
  • Communication.Read (Customer Relationship Management) (R4)
  • Communication.Read (Non-Patient Customer Relationship Management) (R4)
  • Communication.Read (Patient Education) (R4)
  • Communication.Search (Community Resource Communication) (R4)
  • Communication.Search (Customer Relationship Management) (R4)
  • Communication.Search (Non-Patient Customer Relationship Management) (R4)
  • Communication.Search (Patient Education) (R4)
  • Task.Read (Community Resource) (R4)
  • Task.Search (Community Resource) (R4)
  • Task.Update (Community Resource) (R4)

Scheduling — appointment slot lookup

This capability finds available appointment slots via Epic Appointment.$find — the only availability mechanism, as Epic exposes no Slot/Schedule search. To make it return availability (including lookup by a named provider), an Epic administrator/analyst completes the following:

  1. 1
    Build the provider-based scheduling rules (Scheduling Decision Support)

    $find invokes Epic's scheduling rules engine — Scheduling Decision Support — which your organization defines 100%. To support lookup by a named provider, your Epic team must configure provider-based scheduling so a request carrying a practitioner (and/or location, service-type) is accepted and mapped to that provider's availability.

  2. 2
    Expose the visit/appointment types and share their codes

    Flag the appropriate visit/appointment types as available, and send us the serviceType coding system (an org-specific OID) and codes for each bookable type.

  3. 3
    Validate in your non-production environment first

    Confirm the configuration in your non-prod Epic before go-live; these rules can change and the sandbox only ships a basic rules engine.

Important: Per Epic's guidance, $find invokes a rules engine each health system defines, and it is designed for cross-organization, staff-driven scheduling — not patient open scheduling. Per-provider availability is therefore a configuration your Epic team builds. It also only returns availability that already exists as open slots on the providers' schedules — if there are none, the result is empty.

Reference documentation

Exact build steps and screenshots live in Epic's customer-only documentation (Galaxy / UserWeb). Your Epic Technical Services rep can locate them under Cadence decision support / provider-based scheduling.