Skip to main content

EPIC EHR

Epic is the leading electronic health record (EHR) system used by hospitals, health systems, and clinics worldwide. Its HL7 FHIR R4 API provides RESTful access to clinical and administrative data — patient demographics, conditions, medications, allergies, lab results, vitals, immunizations, appointments, and care plans. Published via Epic on FHIR and open.epic, it enables interoperable healthcare apps.

EPIC EHR icon

Power end-to-end data operations for your EPIC EHR API with Nexla. Our bi-directional EPIC EHR connector is purpose-built for EPIC EHR, making it simple to ingest data, sync it across systems, and deliver it anywhere — all with no coding required. Nexla turns API-sourced data into ready-to-use, reusable data products and makes it easy to send data to EPIC EHR or any other destination. With comprehensive monitoring, lineage tracking, and access controls, Nexla keeps your EPIC EHR workflows fast, secure, and fully governed.

Features

Type: API

SourceDestination

  • Seamless API Integration: Connect to any endpoint as source or destination without coding, with automatic data product creation
  • Visual Composition & Chaining: Build complex integrations using visual templates, chain API calls, and compose workflows with data validation and filtering
  • API Proxy: Expose curated slices of your data securely with a secure and customizable API proxy that validates and transforms data on the fly
  • Request optimization with intelligent batching, retry, and caching to minimize API calls and costs

Prerequisites

Epic uses the SMART Backend Services profile of OAuth 2.0 for system-to-system integrations. Instead of username/password, your application signs a JSON Web Token (JWT) with an RSA private key; Epic's authorization server validates the signature against the registered public key and returns a short-lived access token. You must complete the steps below in Epic's developer portal before configuring the credential in Nexla.

Register an App on Epic on FHIR

  1. Navigate to Epic on FHIR and sign in (or create a free account) at fhir.epic.com.

  2. Click My Apps in the top navigation, then click Create to register a new application.

  3. Fill in the required details:

    • Application Name: Enter a descriptive name (e.g., Nexla Integration).
    • Application Audience: Select Backend Systems (for system-to-system flows).
    • Application Type: Select Confidential Client or Backend Services as appropriate.
  4. Under Authorized APIs / Scopes, select the FHIR resource scopes your integration needs. For read access, use system/<ResourceType>.read scopes (e.g., system/Patient.read, system/Observation.read). For write access, use system/<ResourceType>.write.

  5. Save the application. Epic will generate a non-production (Sandbox) Client ID and a production Client ID. Copy the appropriate Client ID for use in Nexla.

Generate an RSA Key Pair

Epic's backend OAuth 2.0 flow requires your application to sign JWTs using an RSA private key. The corresponding public key must be registered with Epic.

  1. Generate a 2048-bit (or larger) RSA key pair using a tool such as OpenSSL:

    openssl genrsa -out private_key.pem 2048
    openssl rsa -in private_key.pem -pubout -out public_key.pem
  2. In your Epic app registration, navigate to the Public Keys section and upload or paste the contents of public_key.pem as a JWK or PEM. Epic will use this public key to verify JWTs your application signs.

  3. Keep private_key.pem secure. This is the Private Key (PEM) you will enter in Nexla. Do not share it or commit it to version control.

Epic requires the JWT exp claim to be no more than 5 minutes in the future. Nexla automatically manages JWT generation and timing within this constraint. The key algorithm used is RS384.

Identify Your FHIR Base URL

Each Epic organization exposes its own FHIR R4 base URL. The default sandbox endpoint is:

https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR/R4

For a production Epic customer environment, the base URL typically follows the pattern:

https://<organization>.epic.com/interconnect-fhir-oauth/api/FHIR/R4

Contact the Epic customer's integration team or refer to their SMART configuration endpoint (/.well-known/smart-configuration) to confirm the correct base URL for their organization.

Additional documentation for Epic's backend OAuth 2.0 flow is available at fhir.epic.com/Documentation?docId=oauth2.

Authenticate

Credentials required

Backend service authentication using JWT client credentials for system-to-system integration.

FieldRequiredSecretDescription
FHIR Base URLYesNoEpic FHIR base URL (e.g., https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR/R4)
Client IDYesNoOAuth2 client ID from Epic app registration.
Private Key (PEM)YesYesRSA private key in PEM format for JWT signing (RS384).

Create a credential in Nexla

  1. After selecting the data source/destination type, click the Add Credential tile to open the Add New Credential overlay.

  2. Enter a name for the credential in the Credential Name field and a short, meaningful description in the Credential Description field.

  3. Enter the Epic FHIR R4 base URL for the target organization in the FHIR Base URL field. This URL identifies both the API root and the OAuth 2.0 token endpoint used for authentication.

    • Sandbox/testing: https://fhir.epic.com/interconnect-fhir-oauth/api/FHIR/R4
    • Production: Use the base URL provided by the Epic customer's integration team.
  4. Enter the Client ID obtained from your Epic app registration in the Client ID field. This value uniquely identifies your application to Epic's authorization server and corresponds to the OAuth 2.0 client_id.

    Epic issues separate Client IDs for non-production (sandbox) and production environments. Ensure you use the correct Client ID for the environment you are connecting to.

  5. Paste the RSA private key in PEM format into the Private Key (PEM) field. This is the private key that corresponds to the public key you registered in your Epic app record. Nexla uses this key to sign the JWT assertions submitted to Epic's token endpoint (RS384 algorithm).

    Important

    The private key grants access to any Epic data your app is authorized for. Store it securely and restrict access to authorized personnel only. Do not paste a key that is shared across other systems.

  6. Once all of the relevant steps have been completed, click the Save button at the bottom of the overlay to save the configured credential. The newly added credential will now appear in a tile on the Authenticate screen during data source/destination creation and can be selected for use with a new data source or destination.

Use as a data source

To create a new data flow, navigate to the Integrate section, and click the New Data Flow button. Select the EPIC EHR connector tile, then select the credential that will be used to connect to the Epic FHIR R4 API, and click Next; or, create a new EPIC EHR credential for use in this flow. EPIC EHR data sources can be created using pre-built endpoint templates for common Epic FHIR R4 resources, or configured manually to ingest data from any valid Epic FHIR endpoint.

Endpoint templates

Nexla provides pre-built templates that can be used to rapidly configure data sources to ingest data from common Epic FHIR R4 resource endpoints. Each template is designed specifically for the corresponding FHIR resource, making data source setup easy and efficient. Select the endpoint from which this source will fetch data from the Endpoint pulldown menu. Available endpoint templates are listed in the expandable boxes below. Click on an endpoint to see more information about it and how to configure your data source for this endpoint.

Patient Search

Search for patients across the Epic organization by demographic criteria such as name, identifier, or birth date. Use this endpoint when you need to locate patient records or build patient lists based on demographic attributes. Results are paginated automatically using Epic's next-page link mechanism.

  • Optionally, enter search criteria to narrow results. All fields are optional—if no criteria are provided, the endpoint will return all patients accessible to your application:

    • Patient Name: Enter a given name, family name, or partial name to filter results (e.g., Smith).
    • Patient Identifier: Enter an identifier such as a Medical Record Number (MRN) or another system identifier to locate a specific patient.
    • Birth Date: Enter a date in YYYY-MM-DD format to filter patients by date of birth.
    • Page Size: Enter the number of results to return per page. Defaults to 50; maximum is 100. Nexla will automatically fetch subsequent pages until all results are retrieved.

Additional information about the Epic Patient Search API is available at fhir.epic.com/Specifications?api=948. The response data path is $.entry[*].resource, meaning each FHIR Bundle entry's resource object becomes a separate record in Nexla.

Patient Read by ID

Retrieve a single, complete patient record by its Epic FHIR ID. Use this endpoint when you already know the unique FHIR identifier for a patient and need to retrieve their full demographic record.

  • Patient FHIR ID (required): Enter the Epic FHIR patient ID (a UUID-format string assigned by Epic, e.g., eovIfYI9n-3iZzl5zvB.rGQ3). This ID can be obtained from a prior Patient Search or from an existing system that stores Epic FHIR IDs.

This endpoint returns a single FHIR Patient resource rather than a paginated bundle. The response data path is $, meaning the entire response is treated as one record.

Observation Search (Vitals & Labs)

Retrieve FHIR Observation resources for a patient, covering vital signs (blood pressure, heart rate, temperature, etc.) and laboratory results. This endpoint is commonly used to build clinical analytics pipelines that track patient health metrics over time.

  • Patient FHIR ID (required): Enter the Epic FHIR patient ID for the patient whose observations you want to retrieve.
  • Category (optional): Select an observation category to filter results. Available values include:

    • vital-signs (default) — Blood pressure, heart rate, respiratory rate, oxygen saturation, body weight, height, BMI, and similar measurements.
    • laboratory — Lab result values such as CBC, metabolic panels, and other diagnostic tests.
    • social-history — Social determinants of health, smoking status, and other behavioral observations.
    • exam — Physical exam findings.
  • Date Range (optional): Enter a FHIR date range filter to limit results by observation date. Use the format ge2024-01-01 to specify a start date, le2024-12-31 to specify an end date, or combine both (e.g., ge2024-01-01,le2024-12-31).
  • Page Size: Enter the number of results to return per page. Defaults to 50; maximum is 100.

Additional information about the Epic Observation API is available at fhir.epic.com/Specifications?api=1000.

Condition Search (Diagnoses)

Retrieve FHIR Condition resources representing patient diagnoses, chronic conditions, and problem list items. Use this endpoint to analyze diagnosis prevalence, track chronic conditions, or build population health dashboards.

  • Patient FHIR ID (required): Enter the Epic FHIR patient ID for the patient whose conditions you want to retrieve.
  • Category (optional): Filter by condition category. Available values include:

    • problem-list-item — Conditions on the patient's active problem list.
    • encounter-diagnosis — Diagnoses associated with a specific encounter or visit.
    • health-concern — Health concerns tracked outside the formal problem list.
  • Page Size: Enter the number of results to return per page. Defaults to 50; maximum is 100.

Additional information about the Epic Condition API is available at fhir.epic.com/Specifications?api=1003.

Medication Request Search (Orders)

Retrieve FHIR MedicationRequest resources representing medication orders and prescriptions for a patient. Use this endpoint to analyze prescribing patterns, medication adherence, or to build clinical decision support pipelines.

  • Patient FHIR ID (required): Enter the Epic FHIR patient ID for the patient whose medication orders you want to retrieve.
  • Status (optional): Filter by medication request status. Available values include:

    • active — Prescriptions currently active and authorized for dispensing.
    • completed — Prescriptions that have been fully dispensed or completed.
    • stopped — Orders that have been stopped prior to completion.
    • on-hold — Orders temporarily suspended by the prescriber.
  • Page Size: Enter the number of results per page. Defaults to 50; maximum is 100.

Additional information about the Epic MedicationRequest API is available at fhir.epic.com/Specifications?api=1015.

Allergy Intolerance Search

Retrieve FHIR AllergyIntolerance resources documenting a patient's known allergies and intolerances, including the substance, reaction type, and severity. Use this endpoint to support medication safety workflows, population allergy analysis, or clinical data warehousing.

  • Patient FHIR ID (required): Enter the Epic FHIR patient ID for the patient whose allergy records you want to retrieve.
  • Page Size: Enter the number of results per page. Defaults to 50; maximum is 100.

Additional information about the Epic AllergyIntolerance API is available at fhir.epic.com/Specifications?api=907.

Appointment Search

Retrieve FHIR Appointment resources representing scheduled visits for patients or practitioners. Use this endpoint to analyze scheduling patterns, calculate no-show rates, or build operational dashboards tracking appointment volumes.

  • Patient FHIR ID (optional): Enter the Epic FHIR patient ID to retrieve appointments for a specific patient. Leave blank to retrieve appointments across all accessible patients.
  • Date Range (optional): Enter a date range filter using FHIR prefix notation (e.g., ge2024-01-01 for appointments on or after January 1, 2024).
  • Page Size: Enter the number of results per page. Defaults to 50; maximum is 100.

Additional information about the Epic Appointment API is available at fhir.epic.com/Specifications?api=913.

Encounter Search (Visits)

Retrieve FHIR Encounter resources representing patient visits, including office visits, hospitalizations, emergency department encounters, and telehealth encounters. Use this endpoint to analyze care utilization, length of stay, or visit patterns across a patient population.

  • Patient FHIR ID (required): Enter the Epic FHIR patient ID for the patient whose encounters you want to retrieve.
  • Date Range (optional): Enter a date range filter using FHIR prefix notation (e.g., ge2023-01-01,le2023-12-31 for encounters within calendar year 2023).
  • Page Size: Enter the number of results per page. Defaults to 50; maximum is 100.

Additional information about the Epic Encounter API is available at fhir.epic.com/Specifications?api=1006.

Diagnostic Report Search (Lab Results)

Retrieve FHIR DiagnosticReport resources containing finalized diagnostic results, including laboratory panel results, radiology reports, cardiology studies, and pathology reports. Use this endpoint to build clinical analytics pipelines focused on diagnostic outcomes.

  • Patient FHIR ID (required): Enter the Epic FHIR patient ID for the patient whose diagnostic reports you want to retrieve.
  • Category (optional): Filter by report category. Available values include:

    • LAB — Laboratory reports (chemistry panels, hematology, microbiology, etc.).
    • RAD — Radiology and imaging reports.
    • CARD — Cardiology reports (ECG, echocardiography, stress tests, etc.).
    • PATH — Pathology and histology reports.
  • Page Size: Enter the number of results per page. Defaults to 50; maximum is 100.

Additional information about the Epic DiagnosticReport API is available at fhir.epic.com/Specifications?api=1005.

Immunization Search

Retrieve FHIR Immunization resources documenting a patient's vaccination history, including vaccine type, administration date, dose number, and administering provider. Use this endpoint to support public health reporting, care gap analysis, or population health immunization tracking.

  • This endpoint automatically retrieves all immunization records accessible for your application's patient population. No additional configuration parameters are required beyond selecting this endpoint template.
  • Results are paginated automatically; Nexla will fetch all pages until the complete immunization history is retrieved.

Additional information about the Epic Immunization API is available at fhir.epic.com/Specifications?api=1009.

Procedure Search

Retrieve FHIR Procedure resources representing clinical procedures and surgical interventions performed on patients, including procedure code, date, performer, and outcome. Use this endpoint to analyze procedural volumes, surgical outcomes, or care pathway adherence.

  • This endpoint automatically retrieves all procedure records accessible for your application's patient population. No additional configuration parameters are required beyond selecting this endpoint template.
  • Results are paginated automatically until all procedure records are retrieved.

Additional information about the Epic Procedure API is available at fhir.epic.com/Specifications?api=1022.

Document Reference Search

Retrieve FHIR DocumentReference resources pointing to clinical documents, including physician notes, discharge summaries, operative reports, and other structured or unstructured clinical content. Use this endpoint to integrate narrative clinical documentation into downstream analytics or archival workflows.

  • This endpoint retrieves all document references accessible to your application. No additional parameters are required beyond selecting this template.
  • Each DocumentReference record contains metadata about the document (type, date, author) and a reference to the document content, which may be base64-encoded inline or provided as a URL.

Additional information about the Epic DocumentReference API is available at fhir.epic.com/Specifications?api=904.

Practitioner Search

Search for healthcare practitioners registered in the Epic organization by name or identifier. Use this endpoint to build provider directories, validate provider credentials, or enrich clinical data with practitioner details.

  • Practitioner Name (optional): Enter a full or partial name to filter practitioners (e.g., Johnson).
  • NPI or Identifier (optional): Enter a National Provider Identifier (NPI) or another system identifier to locate a specific practitioner.
  • Page Size: Enter the number of results per page. Defaults to 50; maximum is 100.

Additional information about the Epic Practitioner API is available at fhir.epic.com/Specifications?api=1021.

Practitioner Role Search

Retrieve FHIR PractitionerRole resources that describe a practitioner's role within an organization, including their specialty, department affiliation, location, and contact information. Use this endpoint to enrich provider directory data or support care team analysis.

  • This endpoint retrieves all practitioner role records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically until all records are retrieved.

Additional information about the Epic PractitionerRole API is available at fhir.epic.com/Specifications?api=902.

Organization Search

Search for healthcare organizations—including hospitals, clinics, and departments—registered in the Epic organization hierarchy. Use this endpoint to build facility directories, map care delivery locations, or enrich clinical data with organizational context.

  • This endpoint retrieves all organization records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic Organization API is available at fhir.epic.com/Specifications?api=1017.

Location Search

Retrieve FHIR Location resources representing physical care delivery locations, including exam rooms, nursing units, clinics, and hospital wards. Use this endpoint to map care delivery geography, track patient flow, or enrich encounter data with location details.

  • This endpoint retrieves all location records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic Location API is available at fhir.epic.com/Specifications?api=1012.

Care Plan Search

Retrieve FHIR CarePlan resources documenting a patient's treatment plan, including planned activities, goals, and care team assignments. Use this endpoint to analyze care coordination, track treatment plan adherence, or build care management analytics.

  • This endpoint retrieves all care plan records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic CarePlan API is available at fhir.epic.com/Specifications?api=932.

Goal Search

Retrieve FHIR Goal resources representing documented patient health goals and targeted outcomes, including goal descriptions, target measures, start dates, and achievement status. Use this endpoint to support value-based care analytics and population health goal tracking.

  • This endpoint retrieves all goal records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Care Team Search

Retrieve FHIR CareTeam resources identifying the members of a patient's care team, including primary care providers, specialists, care coordinators, and other clinical staff. Use this endpoint to analyze care team composition, track care coordination, or enrich clinical data with provider relationships.

  • This endpoint retrieves all care team records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic CareTeam API is available at fhir.epic.com/Specifications?api=933.

Medication Statement Search

Retrieve FHIR MedicationStatement resources representing medications a patient is currently taking or has taken, including home medications and active prescriptions reported by the patient or their care team. Use this endpoint to build complete medication history profiles or analyze medication adherence.

  • This endpoint retrieves all medication statement records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic MedicationStatement API is available at fhir.epic.com/Specifications?api=1014.

Coverage Search (Insurance)

Retrieve FHIR Coverage resources representing a patient's insurance coverage information, including payer, plan, subscriber ID, and coverage period. Use this endpoint to support revenue cycle analytics, insurance verification workflows, or population payer mix analysis.

  • This endpoint retrieves all coverage records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic Coverage API is available at fhir.epic.com/Specifications?api=936.

Device Search (Implants)

Retrieve FHIR Device resources representing implanted or externally worn medical devices associated with patients, including pacemakers, insulin pumps, cochlear implants, and other tracked devices. Use this endpoint to support device registry analytics or post-market surveillance workflows.

  • This endpoint retrieves all device records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic Device API is available at fhir.epic.com/Specifications?api=939.

Service Request Search (Orders)

Retrieve FHIR ServiceRequest resources representing clinical orders placed in Epic, including laboratory orders, imaging orders, referrals, and procedure orders. Use this endpoint to analyze order volumes, turnaround times, or referral patterns.

  • This endpoint retrieves all service request records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic ServiceRequest API is available at fhir.epic.com/Specifications?api=1027.

Slot Search (Availability)

Retrieve FHIR Slot resources representing available appointment slots for scheduling within Epic. Use this endpoint to analyze scheduling capacity, identify availability gaps, or power online scheduling integrations.

  • This endpoint retrieves all slot records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic Slot API is available at fhir.epic.com/Specifications?api=914.

Schedule Search

Retrieve FHIR Schedule resources representing practitioner and location schedules in Epic, including the actor (practitioner or location), specialty, and schedule dates. Use this endpoint to analyze provider availability or build scheduling analytics.

  • This endpoint retrieves all schedule records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Questionnaire Response Search

Retrieve FHIR QuestionnaireResponse resources containing patient responses to structured questionnaires, including patient-reported outcomes, screening assessments (PHQ-9, GAD-7, AUDIT-C, etc.), and intake forms. Use this endpoint to analyze patient-reported outcome data or build behavioral health analytics.

  • This endpoint retrieves all questionnaire response records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic QuestionnaireResponse API is available at fhir.epic.com/Specifications?api=1023.

Family Member History Search

Retrieve FHIR FamilyMemberHistory resources documenting a patient's family health history, including conditions in biological relatives. Use this endpoint to support genetic risk analysis, hereditary disease screening, or population health risk stratification.

  • This endpoint retrieves all family member history records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic FamilyMemberHistory API is available at fhir.epic.com/Specifications?api=943.

Related Person Search

Retrieve FHIR RelatedPerson resources representing individuals related to a patient, such as emergency contacts, guardians, proxies, or MyChart proxy access holders. Use this endpoint to support care coordination, proxy access management, or patient engagement workflows.

  • This endpoint retrieves all related person records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic RelatedPerson API is available at fhir.epic.com/Specifications?api=1024.

Clinical Impression Search

Retrieve FHIR ClinicalImpression resources representing a clinician's assessment and clinical judgment about a patient's health status at a specific point in time. Use this endpoint to analyze clinical decision-making patterns or enrich encounter data with clinical assessments.

  • This endpoint retrieves all clinical impression records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about Epic's FHIR API specifications is available at fhir.epic.com/Specifications.

Communication Search

Retrieve FHIR Communication resources representing messages, notifications, and alerts exchanged between care team members and patients within Epic, including MyChart messages. Use this endpoint to analyze patient-provider communication patterns or support care management workflows.

  • This endpoint retrieves all communication records accessible to your application. No additional parameters are required beyond selecting this template.
  • Results are paginated automatically.

Additional information about the Epic Communication API is available at fhir.epic.com/Specifications?api=935.

Patient Summary (IPS)

Retrieve an International Patient Summary (IPS) document for a specific patient. The IPS is a standardized clinical document that consolidates a patient's most clinically relevant information—including problems, medications, allergies, and immunizations—into a single structured response. Use this endpoint for cross-border data exchange, care transitions, or population health summaries.

  • Patient FHIR ID (required): Enter the Epic FHIR patient ID for the patient whose IPS summary you want to retrieve. The endpoint calls the FHIR $summary operation on the Patient resource to generate the consolidated document.
  • This endpoint returns a single FHIR Bundle document rather than a paginated list. The full response bundle is captured as one record in Nexla.

Additional information about Epic's International Patient Summary implementation is available at fhir.epic.com/Documentation?docId=internationalpatientsum.

Once the selected endpoint template has been configured, click the Test button to the right of the endpoint selection menu to retrieve a sample of the data that will be fetched. Sample data will be displayed in the Endpoint Test Result panel on the right, allowing you to verify that the source is configured correctly before saving. If the sample data is not as expected, review the selected endpoint and associated settings, make any necessary adjustments, and test again.

Manual configuration

EPIC EHR data sources can also be manually configured to ingest data from any valid Epic FHIR R4 API endpoint not covered by the pre-built templates, including chained API calls or custom query parameters. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method (GET is used for all standard FHIR read/search operations), endpoint URL, date/time and lookup macros, path to data, metadata, and request headers.

Build the Set API URL as the FHIR base URL plus resource path, e.g. .../Patient for patient search, .../Observation?patient=<FHIR_ID>&category=laboratory for observation search, or .../Patient/<FHIR_ID> for a single patient read. For Epic FHIR search responses (Bundles), set Path to Data to $.entry[*].resource to extract each resource as a separate record; for single-resource reads, use $. Date/time macros such as {now-1} are useful for incremental extraction against endpoints that support date= or _lastUpdated= parameters. Include Content-Type:application/json+fhir or Accept:application/fhir+json as a request header (the former is already present in the pre-built templates), and replace the FHIR base URL portion of the endpoint URL with the target Epic organization's base URL—for production, this is provided by the Epic customer's integration team.

Once all of the relevant settings have been configured, click the Create button in the upper right corner of the screen to save and create the new EPIC EHR data source. Nexla will now begin ingesting data from the configured endpoint and will organize any data that it finds into one or more Nexsets.

Use as a destination

Write Access Requirements

Epic FHIR write operations require additional scopes (system/<ResourceType>.write) and, for production environments, approval from each Epic customer organization. Ensure your Epic app registration includes the required write scopes before configuring a write destination. Additional information is available at fhir.epic.com/Documentation.

Click the + icon on the Nexset that will be sent to the EPIC EHR destination, and select the Send to Destination option from the menu. Select the EPIC EHR connector from the list of available destination connectors, then select the credential that will be used to connect to the Epic FHIR R4 API, and click Next; or, create a new EPIC EHR credential for use in this flow. EPIC EHR destinations can be created using pre-built endpoint templates for common Epic FHIR R4 write operations, or configured manually to send data to any valid Epic FHIR endpoint.

Endpoint templates

Nexla provides pre-built templates that can be used to rapidly configure destinations to send data to common Epic FHIR R4 write endpoints. Each template is designed specifically for the corresponding FHIR resource type, making destination setup easy and efficient. Select the endpoint to which data will be sent from the Endpoint pulldown menu. Then, click on the template in the list below to expand it, and follow the instructions to configure additional endpoint settings.

Observation Create (Write Vitals)

Create new FHIR Observation resources in Epic to record patient vital signs such as blood pressure, heart rate, body temperature, oxygen saturation, and other measurable clinical values. Use this endpoint to push vital sign measurements from external monitoring devices, remote patient monitoring platforms, or other data sources into Epic patient records.

  • Observation JSON Body (required): Provide a valid FHIR Observation resource JSON document conforming to Epic's Observation schema. The JSON must include at minimum:

    • resourceType: Must be "Observation".
    • status: The observation status (e.g., "final", "preliminary").
    • code: A LOINC-coded observation type identifying what was measured (e.g., LOINC 8867-4 for heart rate).
    • subject: A reference to the Epic patient FHIR ID (e.g., {"reference": "Patient/<FHIR_ID>"}).
    • valueQuantity or component: The measured value and unit (e.g., {"value": 72, "unit": "beats/min", "system": "http://unitsofmeasure.org", "code": "/min"}).

Additional information about the Epic Observation write API, including required fields and valid code systems, is available at fhir.epic.com/Specifications?api=1000. Epic requires LOINC codes for observation types and UCUM units for quantities. Write access to Observation resources requires the system/Observation.write scope in your Epic app registration.

Appointment Book (Create)

Create new FHIR Appointment resources in Epic to book patient appointments programmatically. Use this endpoint to integrate scheduling workflows from external systems—such as patient portals, call center platforms, or third-party scheduling tools—directly into Epic's scheduling system.

  • Appointment JSON Body (required): Provide a valid FHIR Appointment resource JSON document conforming to Epic's Appointment schema. The JSON must include at minimum:

    • resourceType: Must be "Appointment".
    • status: Must be "booked" for a confirmed appointment.
    • serviceType or appointmentType: The type of appointment being booked (e.g., office visit, telehealth).
    • start and end: ISO 8601 datetime strings for the appointment start and end times.
    • participant: An array containing at minimum the patient reference (e.g., {"actor": {"reference": "Patient/<FHIR_ID>"}, "status": "accepted"}) and the practitioner or location reference.

Additional information about the Epic Appointment write API is available at fhir.epic.com/Specifications?api=913. Booking appointments in Epic typically requires the system/Appointment.write scope and may require site-specific configuration at each Epic customer organization. Use the Slot Search source endpoint to identify available appointment slots before booking.

Allergy Create

Create new FHIR AllergyIntolerance resources in Epic to add allergy or intolerance records to a patient's chart. Use this endpoint to migrate allergy data from legacy systems, reconcile allergy records across health systems, or capture patient-reported allergies from external intake platforms.

  • Allergy JSON Body (required): Provide a valid FHIR AllergyIntolerance resource JSON document conforming to Epic's AllergyIntolerance schema. The JSON must include at minimum:

    • resourceType: Must be "AllergyIntolerance".
    • clinicalStatus: The clinical status of the allergy (e.g., {"coding": [{"system": "http://terminology.hl7.org/CodeSystem/allergyintolerance-clinical", "code": "active"}]}).
    • code: A SNOMED CT or RxNorm-coded identifier for the allergen substance.
    • patient: A reference to the Epic patient FHIR ID (e.g., {"reference": "Patient/<FHIR_ID>"}).
    • reaction (optional but recommended): The allergic reaction type and severity, coded using SNOMED CT.

Additional information about the Epic AllergyIntolerance write API is available at fhir.epic.com/Specifications?api=907. Write access requires the system/AllergyIntolerance.write scope. Epic validates allergen codes against standard clinical terminologies (SNOMED CT, RxNorm); submissions with unrecognized codes may be rejected.

Manual configuration

EPIC EHR destinations can also be manually configured to send data to any valid Epic FHIR R4 API endpoint not covered by the pre-built templates—including update operations (PUT/PATCH) or FHIR Batch/Transaction Bundle requests. Select the Advanced tab at the top of the configuration screen, and follow the instructions in Connect to Any API to configure the API method, data format, endpoint URL, request headers, attribute exclusions, record batching, and response webhooks.

Epic FHIR write operations accept JSON (application/fhir+json or application/json+fhir); include Content-Type:application/json+fhir as a request header. Example endpoint URLs include POST /Observation to create a new observation, PUT /Patient/<FHIR_ID> to replace an existing resource, and POST /Appointment to create an appointment—for production Epic environments, replace the base URL with the organization-specific FHIR base URL provided by the customer's integration team. If batching records, Epic's FHIR API supports Batch and Transaction Bundle formats. Enabling the response webhook lets you capture the FHIR resource ID and status Epic returns after each write.

Save & activate

Once all endpoint settings have been configured, click the Done button in the upper right corner of the screen to save and create the destination. To send the data to the configured EPIC EHR endpoint, open the destination resource menu, and select Activate.

Nexset data will not be sent to Epic until the destination is activated. Destinations can be activated immediately or at a later time, providing full control over data movement. For production Epic environments, ensure that write scopes have been approved by the Epic customer organization before activating the destination.