Healthcare · Beta
Epic
API integration
Ship Healthcare features without building the integration. Full Epic API access via Proxy and 140+ MCP-ready tools for AI agents — extend models and mappings to fit your product.
Built for specific customer use cases. Issues are resolved quickly.
Talk to usUse Cases
Why integrate with Epic
Common scenarios for SaaS companies building Epic integrations for their customers.
Ship Epic as a procurement-unblocking integration
Health systems won't buy clinical software that forces double documentation in Epic. Offering a native Epic integration via Truto removes the single biggest objection in enterprise healthcare sales cycles.
Embed AI scribe and documentation workflows into Epic
Let physicians use your AI note-taking or summarization product without leaving Epic by writing generated notes back as DocumentReferences and tasks tied to the correct patient and encounter.
Power remote patient monitoring with discrete clinical data
Push device readings, vitals, and home-collected measurements directly into Epic flowsheets as Observations so clinicians review patient-generated data in their native workflow instead of a separate RPM dashboard.
Automate digital intake and pre-visit workflows
Pull upcoming Appointments, update Patient demographics and Coverage, and write back completed intake forms as QuestionnaireResponses so patients arrive fully registered.
Run population health and analytics at scale
Use FHIR Bulk Export to pull clinical cohorts asynchronously for risk stratification, quality measures, and AI model training without hammering synchronous APIs or getting rate limited.
What You Can Build
Ship these features with Truto + Epic
Concrete product features your team can ship faster by leveraging Truto’s Epic integration instead of building from scratch.
Patient identity matching and chart lookup
Use patient search and demographic lookup to reliably map your internal users to the correct Epic MRN before any read or write operation.
Clinical snapshot for pre-visit context
Assemble a longitudinal patient view by pulling Conditions, Allergies, Medications, Immunizations, Observations, and Encounters in a single workflow.
Note write-back to the Epic chart
Create DocumentReferences to push AI-generated notes, PDFs, summaries, or transcripts directly into the patient chart for clinician review and signoff.
Flowsheet-ready vitals and lab ingestion
Write discrete Observations from connected devices or home monitoring into Epic so clinicians see structured vitals, not free-text attachments.
Digital intake form sync
Fetch Questionnaires from Epic, render them in your product, and post QuestionnaireResponses back so patient-completed intake lands in the chart automatically.
Bulk cohort export for analytics pipelines
Kick off Group-level bulk exports, poll for completion, and stream the resulting NDJSON files into your data warehouse for population health and reporting.
SuperAI
Epic AI agent tools
Comprehensive AI agent toolset with fine-grained control. Integrates with MCP clients like Cursor and Claude, or frameworks like LangChain.
get_single_epic_account_by_id
Get a single Account (premium billing) from Epic by its FHIR id. Returns the FHIR R4 Account resource. Returns: resourceType, id, identifier, name, status, type, and more. Required: id.
list_all_epic_accounts
Search Accounts in Epic. Returns the matching FHIR R4 Account resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, identifier, name, status, type, and more. Required: none strictly; see the search rules above.
get_single_epic_adverse_event_by_id
Get a single AdverseEvent from Epic by its FHIR id. Returns the FHIR R4 AdverseEvent resource. Returns: resourceType, id, actuality, adverse-event-comments, adverse-event-expected, adverse-event-resolved-date, and more. Required: id.
list_all_epic_adverse_events
Search AdverseEvents in Epic. Returns the matching FHIR R4 AdverseEvent resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, actuality, adverse-event-comments, adverse-event-expected, adverse-event-resolved-date, and more. Required: none strictly; see the search rules above.
get_single_epic_allergy_intolerance_by_id
Get a single AllergyIntolerance from Epic by its FHIR id. Returns the FHIR R4 AllergyIntolerance resource. Returns: resourceType, id, category, clinicalStatus, code, criticality, and more. Required: id.
list_all_epic_allergy_intolerances
Search AllergyIntolerances in Epic. Returns the matching FHIR R4 AllergyIntolerance resources from the search Bundle. Epic needs patient. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, category, clinicalStatus, code, criticality, and more. Required: patient.
create_a_epic_allergy_intolerance
Create an AllergyIntolerance in Epic from a FHIR R4 AllergyIntolerance JSON body. Returns the created resource when Epic honors Prefer: return=representation; otherwise the new id is only in the Location header. Returns: resourceType, id, category, clinicalStatus, code, and more. Required: resourceType, patient.
get_single_epic_appointment_by_id
Get a single Appointment from Epic by its FHIR id. Returns the FHIR R4 Appointment resource. Returns: resourceType, id, _status, appointmentType, comment, created, and more. Required: id.
list_all_epic_appointments
Search Appointments in Epic. Returns the matching FHIR R4 Appointment resources from the search Bundle. Epic needs patient. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, _status, appointmentType, comment, created, and more. Required: none strictly; see the search rules above.
get_single_epic_binary_by_id
Get a single Binary document from Epic by its FHIR id. Returns the FHIR R4 Binary resource. The default response is the FHIR Binary resource with the file as base64 in data. Returns: resourceType, id, contentType, data, and more. Required: id.
list_all_epic_binaries
Search Binary documents in Epic. Returns the matching FHIR R4 Binary resources from the search Bundle. Look up one document with _id. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, contentType, data, and more. Required: none strictly; see the search rules above.
get_single_epic_body_structure_by_id
Get a single BodyStructure from Epic by its FHIR id. Returns the FHIR R4 BodyStructure resource. Returns: resourceType, id, active, dental-tooth-eruption-status, location, morphology, and more. Required: id.
list_all_epic_body_structures
Search BodyStructures in Epic. Returns the matching FHIR R4 BodyStructure resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, active, dental-tooth-eruption-status, location, morphology, and more. Required: none strictly; see the search rules above.
create_a_epic_body_structure
Create a BodyStructure in Epic from a FHIR R4 BodyStructure JSON body. Returns the created resource when Epic honors Prefer: return=representation; otherwise the new id is only in the Location header. Returns: resourceType, id, active, dental-tooth-eruption-status, location, and more. Required: resourceType, patient.
update_a_epic_body_structure_by_id
Update a BodyStructure in Epic by FHIR id with a full FHIR R4 BodyStructure JSON body (PUT). Epic supports this only for the sub-APIs listed in its specification. Returns: resourceType, id, active, dental-tooth-eruption-status, location, and more. Required: id, resourceType, patient.
get_single_epic_care_plan_by_id
Get a single CarePlan from Epic by its FHIR id. Returns the FHIR R4 CarePlan resource. Returns: resourceType, id, _created, _description, _id, _implicitRules, and more. Required: id.
list_all_epic_care_plans
Search CarePlans in Epic. Returns the matching FHIR R4 CarePlan resources from the search Bundle. Epic needs patient (or subject) plus category. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, _created, _description, _id, _implicitRules, and more. Required: none strictly; see the search rules above.
get_single_epic_care_team_by_id
Get a single CareTeam from Epic by its FHIR id. Returns the FHIR R4 CareTeam resource. Returns: resourceType, id, category, participant, status, subject, and more. Required: id.
list_all_epic_care_teams
Search CareTeams in Epic. Returns the matching FHIR R4 CareTeam resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, category, participant, status, subject, and more. Required: none strictly; see the search rules above.
epic_care_teams_search
Search CareTeams in Epic with an HTTP POST form body instead of a query string (the FHIR _search interaction), for searches too long for a URL. Returns the matching FHIR R4 CareTeam resources from the search Bundle. Epic needs patient or subject for most clinical searches. Returns: resourceType, id, category, participant, status, subject, and more. Required: none strictly; see the search rules above.
get_single_epic_claim_by_id
Get a single Claim from Epic by its FHIR id. Returns the FHIR R4 Claim resource. Returns: resourceType, id, admissiondate, careTeam, diagnosis, dischargedate, and more. Required: id.
get_single_epic_communication_by_id
Get a single Communication from Epic by its FHIR id. Returns the FHIR R4 Communication resource. Returns: resourceType, id, basedOn, encounter, inResponseTo, partOf, and more. Required: id.
list_all_epic_communications
Search Communications in Epic. Returns the matching FHIR R4 Communication resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, basedOn, encounter, inResponseTo, partOf, and more. Required: none strictly; see the search rules above.
create_a_epic_communication
Create a Communication in Epic from a FHIR R4 Communication JSON body. Returns the created resource when Epic honors Prefer: return=representation; otherwise the new id is only in the Location header. Returns: resourceType, id, basedOn, encounter, inResponseTo, and more. Required: resourceType, basedOn, encounter, payload, recipient, sender, sent, status, subject.
get_single_epic_condition_by_id
Get a single Condition from Epic by its FHIR id. Returns the FHIR R4 Condition resource. Returns: resourceType, id, abatementDateTime, category, clinicalStatus, code, and more. Required: id.
list_all_epic_conditions
Search Conditions in Epic. Returns the matching FHIR R4 Condition resources from the search Bundle. Epic needs patient or subject (or encounter for encounter diagnoses and infections); filter by category for problems, encounter diagnoses, health concerns and others. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, abatementDateTime, category, clinicalStatus, code, and more. Required: none strictly; see the search rules above.
epic_conditions_search
Search Conditions in Epic with an HTTP POST form body instead of a query string (the FHIR _search interaction), for searches too long for a URL. Returns the matching FHIR R4 Condition resources from the search Bundle. Epic needs patient or subject (or encounter for encounter diagnoses and infections); filter by category for problems, encounter diagnoses, health concerns and others. Returns: resourceType, id, abatementDateTime, category, clinicalStatus, code, and more. Required: none strictly; see the search rules above.
create_a_epic_condition
Create a Condition in Epic from a FHIR R4 Condition JSON body. Returns the created resource when Epic honors Prefer: return=representation; otherwise the new id is only in the Location header. Returns: resourceType, id, abatementDateTime, category, clinicalStatus, and more. Required: resourceType, code, onsetPeriod, subject.
get_single_epic_consent_by_id
Get a single Consent from Epic by its FHIR id. Returns the FHIR R4 Consent resource. Returns: resourceType, id, category, comment, dateTime, identifier, and more. Required: id.
list_all_epic_consents
Search Consents in Epic. Returns the matching FHIR R4 Consent resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, category, comment, dateTime, identifier, and more. Required: none strictly; see the search rules above.
epic_consents_search
Search Consents in Epic with an HTTP POST form body instead of a query string (the FHIR _search interaction), for searches too long for a URL. Returns the matching FHIR R4 Consent resources from the search Bundle. Epic needs patient or subject for most clinical searches. Returns: resourceType, id, category, comment, dateTime, identifier, and more. Required: none strictly; see the search rules above.
get_single_epic_contract_by_id
Get a single Contract from Epic by its FHIR id. Returns the FHIR R4 Contract resource. Returns: resourceType, id, meta, and more. Required: id.
list_all_epic_contracts
Search Contracts in Epic. Returns the matching FHIR R4 Contract resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, meta, and more. Required: none strictly; see the search rules above.
get_single_epic_coverage_by_id
Get a single Coverage from Epic by its FHIR id. Returns the FHIR R4 Coverage resource. Returns: resourceType, id, beneficiary, class, contained, dependent, and more. Required: id.
list_all_epic_coverages
Search Coverages in Epic. Returns the matching FHIR R4 Coverage resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, beneficiary, class, contained, dependent, and more. Required: none strictly; see the search rules above.
get_single_epic_device_by_id
Get a single Device from Epic by its FHIR id. Returns the FHIR R4 Device resource. Returns: resourceType, id, contact, deviceName, distinctIdentifier, expirationDate, and more. Required: id.
list_all_epic_devices
Search Devices in Epic. Returns the matching FHIR R4 Device resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, contact, deviceName, distinctIdentifier, expirationDate, and more. Required: none strictly; see the search rules above.
get_single_epic_device_request_by_id
Get a single DeviceRequest from Epic by its FHIR id. Returns the FHIR R4 DeviceRequest resource. Returns: resourceType, id, authoredOn, basedOn, codeCodeableConcept, encounter, and more. Required: id.
list_all_epic_device_requests
Search DeviceRequests in Epic. Returns the matching FHIR R4 DeviceRequest resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, authoredOn, basedOn, codeCodeableConcept, encounter, and more. Required: patient.
get_single_epic_device_use_statement_by_id
Get a single DeviceUseStatement from Epic by its FHIR id. Returns the FHIR R4 DeviceUseStatement resource. Returns: resourceType, id, bodySite, device, HealthcareProvider, HealthProfessional, and more. Required: id.
list_all_epic_device_use_statements
Search DeviceUseStatements in Epic. Returns the matching FHIR R4 DeviceUseStatement resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, bodySite, device, HealthcareProvider, HealthProfessional, and more. Required: patient.
get_single_epic_diagnostic_report_by_id
Get a single DiagnosticReport from Epic by its FHIR id. Returns the FHIR R4 DiagnosticReport resource. Returns: resourceType, id, basedOn, category, code, conclusionCode, and more. Required: id.
list_all_epic_diagnostic_reports
Search DiagnosticReports in Epic. Returns the matching FHIR R4 DiagnosticReport resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, basedOn, category, code, conclusionCode, and more. Required: none strictly; see the search rules above.
get_single_epic_document_reference_by_id
Get a single DocumentReference from Epic by its FHIR id. Returns the FHIR R4 DocumentReference resource. Returns: resourceType, id, authenticator, author, category, content, and more. Required: id.
list_all_epic_document_references
Search DocumentReferences in Epic. Returns the matching FHIR R4 DocumentReference resources from the search Bundle. Epic needs patient or subject (some sub-APIs also accept encounter); filter by category and type for clinical notes, CCDAs, results and others. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, authenticator, author, category, content, and more. Required: none strictly; see the search rules above.
epic_document_references_search
Search DocumentReferences in Epic with an HTTP POST form body instead of a query string (the FHIR _search interaction), for searches too long for a URL. Returns the matching FHIR R4 DocumentReference resources from the search Bundle. Epic needs patient or subject (some sub-APIs also accept encounter); filter by category and type for clinical notes, CCDAs, results and others. Returns: resourceType, id, authenticator, author, category, content, and more. Required: none strictly; see the search rules above.
create_a_epic_document_reference
Create a DocumentReference in Epic from a FHIR R4 DocumentReference JSON body. Returns the created resource when Epic honors Prefer: return=representation; otherwise the new id is only in the Location header. Returns: resourceType, id, authenticator, author, category, and more. Required: resourceType.
update_a_epic_document_reference_by_id
Update a DocumentReference in Epic by FHIR id with a full FHIR R4 DocumentReference JSON body (PUT). Epic supports this only for the sub-APIs listed in its specification. Returns: resourceType, id, authenticator, author, category, and more. Required: id, resourceType.
get_single_epic_encounter_by_id
Get a single Encounter from Epic by its FHIR id. Returns the FHIR R4 Encounter resource. Returns: resourceType, id, account, class, diagnosis, episodeOfCare, and more. Required: id.
list_all_epic_encounters
Search Encounters in Epic. Returns the matching FHIR R4 Encounter resources from the search Bundle. Epic needs patient or subject. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, account, class, diagnosis, episodeOfCare, and more. Required: none strictly; see the search rules above.
get_single_epic_endpoint_by_id
Get a single Endpoint from Epic by its FHIR id. Returns the FHIR R4 Endpoint resource. Returns: resourceType, id, address, connectionType, name, payloadMimeType, and more. Required: id.
get_single_epic_episodes_of_care_by_id
Get a single EpisodeOfCare from Epic by its FHIR id. Returns the FHIR R4 EpisodeOfCare resource. Returns: resourceType, id, diagnosis, episode-comments, episode-name, identifier, and more. Required: id.
list_all_epic_episodes_of_care
Search EpisodeOfCare resources in Epic. Returns the matching FHIR R4 EpisodeOfCare resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, diagnosis, episode-comments, episode-name, identifier, and more. Required: patient, type.
epic_episodes_of_care_search
Search EpisodeOfCare resources in Epic with an HTTP POST form body instead of a query string (the FHIR _search interaction), for searches too long for a URL. Returns the matching FHIR R4 EpisodeOfCare resources from the search Bundle. Epic needs patient or subject for most clinical searches. Returns: resourceType, id, diagnosis, episode-comments, episode-name, identifier, and more. Required: patient, type.
get_single_epic_explanation_of_benefit_by_id
Get a single ExplanationOfBenefit from Epic by its FHIR id. Returns the FHIR R4 ExplanationOfBenefit resource. Returns: resourceType, id, adjudication, billablePeriod, careTeam, created, and more. Required: id.
list_all_epic_explanation_of_benefits
Search ExplanationOfBenefit resources in Epic. Returns the matching FHIR R4 ExplanationOfBenefit resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, adjudication, billablePeriod, careTeam, created, and more. Required: patient.
get_single_epic_family_member_history_by_id
Get a single FamilyMemberHistory from Epic by its FHIR id. Returns the FHIR R4 FamilyMemberHistory resource. Returns: resourceType, id, bornDate, bornPeriod, condition, dataAbsentReason, and more. Required: id.
list_all_epic_family_member_histories
Search FamilyMemberHistory resources in Epic. Returns the matching FHIR R4 FamilyMemberHistory resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, bornDate, bornPeriod, condition, dataAbsentReason, and more. Required: patient.
epic_family_member_histories_search
Search FamilyMemberHistory resources in Epic with an HTTP POST form body instead of a query string (the FHIR _search interaction), for searches too long for a URL. Returns the matching FHIR R4 FamilyMemberHistory resources from the search Bundle. Epic needs patient or subject for most clinical searches. Returns: resourceType, id, bornDate, bornPeriod, condition, dataAbsentReason, and more. Required: patient.
get_single_epic_flag_by_id
Get a single Flag from Epic by its FHIR id. Returns the FHIR R4 Flag resource. Returns: resourceType, id, category, code, period, status, and more. Required: id.
list_all_epic_flags
Search Flags in Epic. Returns the matching FHIR R4 Flag resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, category, code, period, status, and more. Required: none strictly; see the search rules above.
epic_flags_search
Search Flags in Epic with an HTTP POST form body instead of a query string (the FHIR _search interaction), for searches too long for a URL. Returns the matching FHIR R4 Flag resources from the search Bundle. Epic needs patient or subject for most clinical searches. Returns: resourceType, id, category, code, period, status, and more. Required: none strictly; see the search rules above.
get_single_epic_goal_by_id
Get a single Goal from Epic by its FHIR id. Returns the FHIR R4 Goal resource. Returns: resourceType, id, achievementStatus, addresses, category, data-conversion-warning, and more. Required: id.
list_all_epic_goals
Search Goals in Epic. Returns the matching FHIR R4 Goal resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, achievementStatus, addresses, category, data-conversion-warning, and more. Required: none strictly; see the search rules above.
get_single_epic_group_by_id
Get a single Group from Epic by its FHIR id. Returns the FHIR R4 Group resource. Returns: resourceType, id, actual, code, identifier, type, and more. Required: id.
list_all_epic_groups
Search Groups in Epic. Returns the matching FHIR R4 Group resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, actual, code, identifier, type, and more. Required: none strictly; see the search rules above.
epic_groups_bulk_member_match
Start an Epic bulk member match (Group/$bulk-member-match) for payer-to-payer exchange. Send a Parameters body listing the members; Epic returns a Group id to use with bulk_exports.start. Returns: resourceType and issue (an OperationOutcome) when Epic reports a problem. Required: resourceType, parameter.
get_single_epic_immunization_by_id
Get a single Immunization from Epic by its FHIR id. Returns the FHIR R4 Immunization resource. Returns: resourceType, id, doseQuantity, encounter, expirationDate, identifier, and more. Required: id.
list_all_epic_immunizations
Search Immunizations in Epic. Returns the matching FHIR R4 Immunization resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, doseQuantity, encounter, expirationDate, identifier, and more. Required: patient.
get_single_epic_immunization_recommendation_by_id
Get a single ImmunizationRecommendation from Epic by its FHIR id. Returns the FHIR R4 ImmunizationRecommendation resource. Returns: resourceType, id, date, orderStatus, patient, recommendation, and more. Required: id.
list_all_epic_immunization_recommendations
Search ImmunizationRecommendations in Epic. Returns the matching FHIR R4 ImmunizationRecommendation resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, date, orderStatus, patient, recommendation, and more. Required: patient.
get_single_epic_list_by_id
Get a single List from Epic by its FHIR id. Returns the FHIR R4 List resource. Returns: resourceType, id, code, emptyReason, encounter, entry, and more. Required: id.
list_all_epic_lists
Search Lists in Epic. Returns the matching FHIR R4 List resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, code, emptyReason, encounter, entry, and more. Required: none strictly; see the search rules above.
epic_lists_search
Search Lists in Epic with an HTTP POST form body instead of a query string (the FHIR _search interaction), for searches too long for a URL. Returns the matching FHIR R4 List resources from the search Bundle. Epic needs patient or subject for most clinical searches. Returns: resourceType, id, code, emptyReason, encounter, entry, and more. Required: none strictly; see the search rules above.
get_single_epic_location_by_id
Get a single Location from Epic by its FHIR id. Returns the FHIR R4 Location resource. Returns: resourceType, id, address, alias, description, endpoint, and more. Required: id.
list_all_epic_locations
Search Locations in Epic. Returns the matching FHIR R4 Location resources from the search Bundle. Filter by name, address or identifier; no patient is needed. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, address, alias, description, endpoint, and more. Required: none strictly; see the search rules above.
get_single_epic_media_by_id
Get a single Media from Epic by its FHIR id. Returns the FHIR R4 Media resource. Returns: resourceType, id, content, status, and more. Required: id.
list_all_epic_media
Search Media resources in Epic. Returns the matching FHIR R4 Media resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, content, status, and more. Required: none strictly; see the search rules above.
get_single_epic_medication_by_id
Get a single Medication from Epic by its FHIR id. Returns the FHIR R4 Medication resource. Returns: resourceType, id, code, form, identifier, ingredient, and more. Required: id.
list_all_epic_medications
Search Medications in Epic. Returns the matching FHIR R4 Medication resources from the search Bundle. Look up one medication with _id; Epic does not list all medications. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, code, form, identifier, ingredient, and more. Required: none strictly; see the search rules above.
get_single_epic_medication_administration_by_id
Get a single MedicationAdministration from Epic by its FHIR id. Returns the FHIR R4 MedicationAdministration resource. Returns: resourceType, id, meta, and more. Required: id.
list_all_epic_medication_administrations
Search MedicationAdministrations in Epic. Returns the matching FHIR R4 MedicationAdministration resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, meta, and more. Required: none strictly; see the search rules above.
get_single_epic_medication_dispense_by_id
Get a single MedicationDispense from Epic by its FHIR id. Returns the FHIR R4 MedicationDispense resource. Returns: resourceType, id, authoredOn, authorizingPrescription, category, context, and more. Required: id.
list_all_epic_medication_dispenses
Search MedicationDispenses in Epic. Returns the matching FHIR R4 MedicationDispense resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, authoredOn, authorizingPrescription, category, context, and more. Required: none strictly; see the search rules above.
get_single_epic_medication_request_by_id
Get a single MedicationRequest from Epic by its FHIR id. Returns the FHIR R4 MedicationRequest resource. Returns: resourceType, id, authoredOn, basedOn, category, dispenseRequest, and more. Required: id.
list_all_epic_medication_requests
Search MedicationRequests in Epic. Returns the matching FHIR R4 MedicationRequest resources from the search Bundle. Epic needs patient or subject. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, authoredOn, basedOn, category, dispenseRequest, and more. Required: none strictly; see the search rules above.
get_single_epic_nutrition_order_by_id
Get a single NutritionOrder from Epic by its FHIR id. Returns the FHIR R4 NutritionOrder resource. Returns: resourceType, id, dateTime, intent, note, oralDiet, and more. Required: id.
list_all_epic_nutrition_orders
Search NutritionOrders in Epic. Returns the matching FHIR R4 NutritionOrder resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, dateTime, intent, note, oralDiet, and more. Required: patient.
get_single_epic_observation_by_id
Get a single Observation from Epic by its FHIR id. Returns the FHIR R4 Observation resource. Returns: resourceType, id, category, code, issued, performer, and more. Required: id.
list_all_epic_observations
Search Observations in Epic. Returns the matching FHIR R4 Observation resources from the search Bundle. Epic needs patient (or subject) plus category or code; each Observation sub-API (vitals, labs, social history and others) accepts its own parameter set. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, category, code, issued, performer, and more. Required: none strictly; see the search rules above.
create_a_epic_observation
Create an Observation in Epic from a FHIR R4 Observation JSON body. Returns the created resource when Epic honors Prefer: return=representation; otherwise the new id is only in the Location header. Returns: resourceType, id, category, code, issued, and more. Required: resourceType, category, code, subject.
update_a_epic_observation_by_id
Update an Observation in Epic by FHIR id with a full FHIR R4 Observation JSON body (PUT). Epic supports this only for the sub-APIs listed in its specification. Returns: resourceType, id, category, code, issued, and more. Required: id, resourceType.
get_single_epic_organization_by_id
Get a single Organization from Epic by its FHIR id. Returns the FHIR R4 Organization resource. Returns: resourceType, id, active, address, alias, contact, and more. Required: id.
list_all_epic_organizations
Search Organizations in Epic. Returns the matching FHIR R4 Organization resources from the search Bundle. Look up one organization with _id; Epic does not list all organizations. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, active, address, alias, contact, and more. Required: none strictly; see the search rules above.
get_single_epic_patient_by_id
Get a single Patient from Epic by its FHIR id. Returns the FHIR R4 Patient resource. Returns: resourceType, id, active, address, birthDate, communication, and more. Required: id.
list_all_epic_patients
Search Patients in Epic. Returns the matching FHIR R4 Patient resources from the search Bundle. Epic needs at least one identifier or a demographics combination such as family plus birthdate, or name plus gender. A search that matches more than 100 patients fails. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, active, address, birthDate, communication, and more. Required: none strictly; see the search rules above.
create_a_epic_patient
Create a Patient in Epic from a FHIR R4 Patient JSON body. Returns the created resource when Epic honors Prefer: return=representation; otherwise the new id is only in the Location header. Returns: resourceType, id, active, address, birthDate, and more. Required: resourceType, name.
epic_patients_search
Find the single high-confidence Epic patient that matches a set of demographics (the FHIR Patient/$match operation). Send a Parameters body with a resource parameter holding a Patient and onlyCertainMatches set to true. Epic returns one Patient, or an OperationOutcome when no certain match exists. Returns: resourceType, id, active, name, birthDate, and more. Required: resourceType, parameter.
get_single_epic_practitioner_by_id
Get a single Practitioner from Epic by its FHIR id. Returns the FHIR R4 Practitioner resource. Returns: resourceType, id, active, birthDate, communication, gender, and more. Required: id.
list_all_epic_practitioners
Search Practitioners in Epic. Returns the matching FHIR R4 Practitioner resources from the search Bundle. Epic needs an identifier or a name (family plus given). Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, active, birthDate, communication, gender, and more. Required: none strictly; see the search rules above.
get_single_epic_practitioner_role_by_id
Get a single PractitionerRole from Epic by its FHIR id. Returns the FHIR R4 PractitionerRole resource. Returns: resourceType, id, active, code, endpoint, location, and more. Required: id.
list_all_epic_practitioner_roles
Search PractitionerRoles in Epic. Returns the matching FHIR R4 PractitionerRole resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, active, code, endpoint, location, and more. Required: none strictly; see the search rules above.
get_single_epic_procedure_by_id
Get a single Procedure from Epic by its FHIR id. Returns the FHIR R4 Procedure resource. Returns: resourceType, id, asserter, basedOn, category, code, and more. Required: id.
list_all_epic_procedures
Search Procedures in Epic. Returns the matching FHIR R4 Procedure resources from the search Bundle. Epic needs patient or subject; filter by category for surgeries, orders and interventions. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, asserter, basedOn, category, code, and more. Required: none strictly; see the search rules above.
create_a_epic_procedure
Create a Procedure in Epic from a FHIR R4 Procedure JSON body. Returns the created resource when Epic honors Prefer: return=representation; otherwise the new id is only in the Location header. Returns: resourceType, id, asserter, basedOn, category, and more. Required: resourceType, category, code, status, subject.
update_a_epic_procedure_by_id
Update a Procedure in Epic by FHIR id with a full FHIR R4 Procedure JSON body (PUT). Epic supports this only for the sub-APIs listed in its specification. Returns: resourceType, id, asserter, basedOn, category, and more. Required: id, resourceType, category, code, status, subject.
get_single_epic_provenance_by_id
Get a single Provenance from Epic by its FHIR id. Returns the FHIR R4 Provenance resource. Returns: resourceType, id, agent, recorded, target, and more. Required: id.
get_single_epic_questionnaire_by_id
Get a single Questionnaire from Epic by its FHIR id. Returns the FHIR R4 Questionnaire resource. Returns: resourceType, id, code, copyright, date, identifier, and more. Required: id.
list_all_epic_questionnaires
Search Questionnaires in Epic. Returns the matching FHIR R4 Questionnaire resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, code, copyright, date, identifier, and more. Required: none strictly; see the search rules above.
get_single_epic_questionnaire_response_by_id
Get a single QuestionnaireResponse from Epic by its FHIR id. Returns the FHIR R4 QuestionnaireResponse resource. Returns: resourceType, id, authored, encounter, identifier, item, and more. Required: id.
list_all_epic_questionnaire_responses
Search QuestionnaireResponses in Epic. Returns the matching FHIR R4 QuestionnaireResponse resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, authored, encounter, identifier, item, and more. Required: none strictly; see the search rules above.
create_a_epic_questionnaire_response
Create a QuestionnaireResponse in Epic from a FHIR R4 QuestionnaireResponse JSON body. Returns the created resource when Epic honors Prefer: return=representation; otherwise the new id is only in the Location header. Returns: resourceType, id, authored, encounter, identifier, and more. Required: resourceType, questionnaire, status, subject.
get_single_epic_related_person_by_id
Get a single RelatedPerson from Epic by its FHIR id. Returns the FHIR R4 RelatedPerson resource. Returns: resourceType, id, address, birthDate, gender, legal-sex, and more. Required: id.
list_all_epic_related_persons
Search RelatedPersons in Epic. Returns the matching FHIR R4 RelatedPerson resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, address, birthDate, gender, legal-sex, and more. Required: none strictly; see the search rules above.
get_single_epic_request_group_by_id
Get a single RequestGroup from Epic by its FHIR id. Returns the FHIR R4 RequestGroup resource. Returns: resourceType, id, action, author, authoredOn, dental-visit-name, and more. Required: id.
list_all_epic_request_groups
Search RequestGroups in Epic. Returns the matching FHIR R4 RequestGroup resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, action, author, authoredOn, dental-visit-name, and more. Required: none strictly; see the search rules above.
get_single_epic_research_study_by_id
Get a single ResearchStudy from Epic by its FHIR id. Returns the FHIR R4 ResearchStudy resource. Returns: resourceType, id, arm, description, identifier, principalInvestigator, and more. Required: id.
list_all_epic_research_studies
Search ResearchStudies in Epic. Returns the matching FHIR R4 ResearchStudy resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, arm, description, identifier, principalInvestigator, and more. Required: identifier, title.
get_single_epic_research_subject_by_id
Get a single ResearchSubject from Epic by its FHIR id. Returns the FHIR R4 ResearchSubject resource. Returns: resourceType, id, assignedArm, identifier, individual, ParticipantID, and more. Required: id.
list_all_epic_research_subjects
Search ResearchSubjects in Epic. Returns the matching FHIR R4 ResearchSubject resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, assignedArm, identifier, individual, ParticipantID, and more. Required: patient.
epic_research_subjects_search
Search ResearchSubjects in Epic with an HTTP POST form body instead of a query string (the FHIR _search interaction), for searches too long for a URL. Returns the matching FHIR R4 ResearchSubject resources from the search Bundle. Epic needs patient or subject for most clinical searches. Returns: resourceType, id, assignedArm, identifier, individual, ParticipantID, and more. Required: patient.
get_single_epic_service_request_by_id
Get a single ServiceRequest from Epic by its FHIR id. Returns the FHIR R4 ServiceRequest resource. Returns: resourceType, id, asNeededBoolean, authoredOn, basedOn, category, and more. Required: id.
list_all_epic_service_requests
Search ServiceRequests in Epic. Returns the matching FHIR R4 ServiceRequest resources from the search Bundle. Epic needs patient, subject or encounter depending on the sub-API (orders, outside records, pregnancy plans and others). Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, asNeededBoolean, authoredOn, basedOn, category, and more. Required: none strictly; see the search rules above.
create_a_epic_service_request
Create a ServiceRequest in Epic from a FHIR R4 ServiceRequest JSON body. Returns the created resource when Epic honors Prefer: return=representation; otherwise the new id is only in the Location header. Returns: resourceType, id, asNeededBoolean, authoredOn, basedOn, and more. Required: resourceType, category, code, intent, status, subject.
update_a_epic_service_request_by_id
Update a ServiceRequest in Epic by FHIR id with a full FHIR R4 ServiceRequest JSON body (PUT). Epic supports this only for the sub-APIs listed in its specification. Returns: resourceType, id, asNeededBoolean, authoredOn, basedOn, and more. Required: id, resourceType, category, code, intent, status, subject.
get_single_epic_specimen_by_id
Get a single Specimen from Epic by its FHIR id. Returns the FHIR R4 Specimen resource. Returns: resourceType, id, collection, condition, identifier, note, and more. Required: id.
list_all_epic_specimens
Search Specimens in Epic. Returns the matching FHIR R4 Specimen resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, collection, condition, identifier, note, and more. Required: none strictly; see the search rules above.
get_single_epic_substance_by_id
Get a single Substance from Epic by its FHIR id. Returns the FHIR R4 Substance resource. Returns: resourceType, id, code, and more. Required: id.
list_all_epic_substances
Search Substances in Epic. Returns the matching FHIR R4 Substance resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, code, and more. Required: none strictly; see the search rules above.
get_single_epic_task_by_id
Get a single Task from Epic by its FHIR id. Returns the FHIR R4 Task resource. Returns: resourceType, id, authoredOn, basedOn, code, encounter, and more. Required: id.
list_all_epic_tasks
Search Tasks in Epic. Returns the matching FHIR R4 Task resources from the search Bundle. Epic needs patient or subject for most clinical searches. Page size is set with limit (sent as _count, 1 to 999); pages follow the Bundle next link. Returns: resourceType, id, authoredOn, basedOn, code, encounter, and more. Required: none strictly; see the search rules above.
update_a_epic_task_by_id
Update a Task in Epic by FHIR id with a full FHIR R4 Task JSON body (PUT). Epic supports this only for the sub-APIs listed in its specification. Returns: resourceType, id, authoredOn, basedOn, code, and more. Required: id, resourceType, authoredOn, basedOn, code, encounter, for, intent, lastModified, owner, priority, requester, status.
list_all_epic_patient_summaries
Generate the International Patient Summary (IPS) document for one Epic patient (the FHIR Patient/$summary operation). The patient_id is the Patient FHIR id. Returns an IPS Bundle with a Composition plus the patient, conditions, allergies, medications and immunizations it references. Returns: resourceType, type, entry, and more. Required: patient_id.
list_all_epic_value_set_expansions
Expand an Epic ValueSet to list the codes the server returns or accepts for an element (the FHIR ValueSet/$expand operation). Pass the element as context, such as Condition.category. Returns one ValueSet with its expansion. Returns: resourceType, id, url, expansion, and more. Required: context.
epic_bulk_exports_start
Start an Epic FHIR Bulk Data export for a Group of patients (Group/$export, asynchronous). Epic answers 202 with the status URL in the Content-Location header; the last segment of that URL is the bulk request id used by get, delete and bulk_export_files.get. Epic allows one export per group per 24 hours by default. Returns: resourceType and issue when Epic reports a problem, otherwise an empty body. Required: group_id.
get_single_epic_bulk_export_by_id
Check the status of an Epic Bulk Data export by bulk request id. While the export runs Epic answers 202 with an X-Progress header; when it finishes the body lists the output files (type, url) to download. The same client and user that started the export must call this. Epic suggests polling every 10 minutes for groups under 100 patients and every 30 minutes above that. Returns: transactionTime, request, requiresAccessToken, output, and error. Required: id.
delete_a_epic_bulk_export_by_id
Cancel an Epic Bulk Data export that is still running, or clean up its files after download, by bulk request id. Epic removes the data itself 14 days after the export finishes. Returns an empty body on success. Required: id.
get_single_epic_bulk_export_file_by_id
Download one output file of a finished Epic Bulk Data export. The id is the output id (last segment of the file url in the status response). Each file holds one FHIR resource type as newline-delimited JSON, returned here as text. Returns: the file content as a string of NDJSON lines. Required: id, bulk_request_id.
create_a_epic_claim_submission
Submit a prior authorization request to Epic as a Da Vinci PAS Bundle (Claim/$submit). Epic is the payer-side utilization management system. Returns a Bundle with the ClaimResponse. Returns: resourceType, type, entry, and more. Required: resourceType, type, entry.
create_a_epic_claim_inquiry
Ask Epic for the status of an earlier prior authorization request (Claim/$inquire, the FHIR alternative to an X12 278 inquiry). Returns a Bundle with the current ClaimResponse. Returns: resourceType, type, entry, and more. Required: resourceType, type, entry.
create_a_epic_claim_response_notification
Tell Epic that a health plan finished or changed a prior authorization decision (ClaimResponse/$notify, Da Vinci PAS). Send a Bundle containing the ClaimResponse. Returns: resourceType and issue when Epic reports a problem. Required: resourceType, type, entry.
create_a_epic_attachment_submission
Send extra information for a prior authorization review to Epic (the $submit-attachment operation), such as QuestionnaireResponse bundles or DocumentReference PDFs. Used with claim_submissions.create. Returns: resourceType and parameter or issue. Required: resourceType, parameter.
create_a_epic_device_auxiliary_notification
Send an auxiliary function event to Epic for a Real-Time Location System device. Today this is the staff duress push notification created when a user presses a panic button on an RTLS badge. Returns: resourceType and parameter. Required: resourceType, parameter.
Why Truto
Why use Truto’s MCP server for Epic
Other MCP servers give you a static tool list for one app. Truto gives you a managed, multi-tenant MCP infrastructure across 850+ integrations.
Auto-generated, always up to date
Tools are dynamically generated from curated documentation — not hand-coded. As integrations evolve, tools stay current without manual maintenance.
Fine-grained access control
Scope each MCP server to read-only, write-only, specific methods, or tagged tool groups. Expose only what your AI agent needs — nothing more.
Multi-tenant by design
Each MCP server is scoped to a single connected account with its own credentials. The URL itself is the auth token — no shared secrets, no credential leaking across tenants.
Works with every MCP client
Standard JSON-RPC 2.0 protocol. Paste the URL into Claude, ChatGPT, Cursor, or any MCP-compatible agent framework — tools are discovered automatically.
Built-in auth, rate limits, and error handling
Tool calls execute through Truto’s proxy layer with automatic OAuth refresh, rate-limit handling, and normalized error responses. No raw API plumbing in your agent.
Expiring and auditable servers
Create time-limited MCP servers for contractors or automated workflows. Optional dual-auth requires both the URL and a Truto API token for high-security environments.
How It Works
From zero to integrated
Go live with Epic in under an hour. No boilerplate, no maintenance burden.
Link your customer’s Epic account
Use Truto’s frontend SDK to connect your customer’s Epic account. We handle all OAuth and API key flows — you don’t need to create the OAuth app.
We handle authentication
Don’t spend time refreshing access tokens or figuring out secure storage. We handle it and inject credentials into every API request.
Call our API, we call Epic
Truto’s Proxy API is a 1-to-1 mapping of the Epic API. You call us, we call Epic, and pass the response back in the same cycle.
Unified response format
Every response follows a single format across all integrations. We translate Epic’s pagination into unified cursor-based pagination. Data is always in the result attribute.
FAQs
Common questions about Epic on Truto
Authentication, rate limits, data freshness, and everything else you need to know before you integrate.
How does authentication to Epic work through Truto?
Epic uses SMART on FHIR OAuth 2.0, with separate flows for provider-facing (EHR launch / backend services with JWT client assertion) and patient-facing (standalone OAuth) apps. Truto handles the token exchange, refresh, and per-tenant Epic endpoint routing so you don't manage client assertions or discovery manually.
Which Epic FHIR resources are supported?
Truto exposes Epic's FHIR R4 surface including Patient, Appointment, Encounter, Condition, Observation, AllergyIntolerance, Medication, MedicationRequest, Immunization, DocumentReference, Questionnaire/QuestionnaireResponse, ServiceRequest, Procedure, Coverage, CarePlan, CareTeam, DiagnosticReport, Task, Claim-related resources, and bulk export operations, among others.
Can we write data back to Epic, or is it read-only?
Write-back is supported for the resources Epic allows via FHIR, including creating DocumentReferences, Observations, Conditions, Patients, QuestionnaireResponses, ServiceRequests, Procedures, Communications, and BodyStructures, plus updates to Tasks, ServiceRequests, DocumentReferences, Observations, Procedures, and BodyStructures.
How do we handle large data pulls without hitting rate limits?
Use the FHIR Bulk Data endpoints: start an asynchronous Group export, poll the export job, then download the NDJSON output files. This is the recommended pattern for population health and analytics workloads instead of synchronous paginated reads.
How fresh is the data returned from Epic?
Reads hit Epic's FHIR APIs in real time, so data reflects the live chart at query time. Bulk exports are point-in-time snapshots generated when the export job runs. Truto does not cache clinical data between calls.
Does each customer need their own Epic app registration?
Yes. Each Epic customer organization provisions access to your app on their instance, and production use requires registration on Epic's App Orchard / Showroom and health-system-specific go-lives. Truto manages the per-connection credentials and endpoints so onboarding new health systems doesn't require code changes.
From the Blog
Epic integration guides
Deep dives, architecture guides, and practical tutorials for building Epic integrations.
Epic
Get Epic integrated into your app
Our team understands what it takes to make a Epic integration successful. A short, crisp 30 minute call with folks who understand the problem.