generated: '2026-08-14' method: derived source: openapi/_original/drchrono-rest-api-openapi-schema.json (harvested verbatim 2026-08-14 from https://app.drchrono.com/openapi-schema) name: drchrono API Data Model description: Entity-relationship graph for the DrChrono EHR REST API v4 (Hunt Valley), derived from components.schemas of the OpenAPI DrChrono serves at https://app.drchrono.com/openapi-schema. Patient is the hub of the clinical graph; Doctor and Office anchor practice management; Appointment binds clinical to scheduling; LineItem and Transaction anchor the billing graph. The separate SMART on FHIR R4 surface projects the same data core onto 27 FHIR resource types and does NOT share identifier space with these entities. id_convention: style: integer example: /api/patients/12345 note: Object ids are plain integers, unique per object type. drchrono uses no typed or prefixed identifiers in the v4 REST API. FHIR R4 resource ids are opaque strings and are not interchangeable with REST ids. pagination: style: page envelope_documented: - previous - results - next envelope_in_spec: - previous - data - next note: The API reference documents the list envelope as previous/results/next, while the OpenAPI DrChrono publishes declares previous/data/next for the same responses. Consumers should tolerate both keys; this divergence is in the provider contract, not in this derivation. default_page_size: 250 max_page_size: 250 exceptions: - path: /api/appointments max_page_size: 20 - parameter: verbose=true effect: lowers default and maximum page size to 50 entity_count: 77 relationship_count: 115 entities: - entity: Appointment field_count: 57 paths: - /api/appointments - /api/appointments/{id} - /api/appointments_list - /api/appointments_list/{id} - /api/recurring_appointment_instances path_count: 5 operation_count: 8 - entity: AppointmentProfile field_count: 9 paths: - /api/appointment_profiles - /api/appointment_profiles/{id} path_count: 2 operation_count: 3 - entity: AppointmentTemplate field_count: 11 paths: - /api/appointment_templates - /api/appointment_templates/{id} path_count: 2 operation_count: 3 - entity: AsyncResourceError field_count: 3 paths: - /api/appointments_list - /api/clinical_note_field_values_list - /api/clinical_notes_list - /api/eligibility_checks_list - /api/line_items_list - /api/patients_list path_count: 8 operation_count: 8 - entity: AuditLog field_count: 13 paths: - /api/audit_log path_count: 1 operation_count: 1 - entity: BillingLineItem field_count: 31 paths: - /api/line_items - /api/line_items/{id} - /api/line_items_list path_count: 3 operation_count: 4 - entity: BillingLineItemDeletion field_count: 3 paths: - /api/line_item_deletions path_count: 1 operation_count: 1 - entity: BillingProfile field_count: 11 paths: - /api/billing_profiles - /api/billing_profiles/{id} path_count: 2 operation_count: 2 - entity: CarePlan field_count: 12 paths: - /api/care_plans - /api/care_plans/{id} path_count: 2 operation_count: 2 - entity: CareTeamMember field_count: 5 paths: - /api/care_team_members - /api/care_team_members/{id} path_count: 2 operation_count: 2 - entity: CashPayment field_count: 15 paths: - /api/patient_payments - /api/patient_payments/{id} path_count: 2 operation_count: 3 - entity: CashPaymentLog field_count: 10 paths: - /api/patient_payment_log - /api/patient_payment_log/{id} path_count: 2 operation_count: 2 - entity: ClaimBillingNotes field_count: 5 paths: - /api/claim_billing_notes - /api/claim_billing_notes/{id} path_count: 2 operation_count: 3 - entity: ClinicalNote field_count: 5 paths: - /api/clinical_notes - /api/clinical_notes/{id} - /api/clinical_notes_list path_count: 3 operation_count: 3 - entity: ConsentForm field_count: 10 paths: - /api/consent_forms - /api/consent_forms/{id} path_count: 2 operation_count: 3 - entity: Coverage field_count: 12 paths: - /api/eligibility_checks - /api/eligibility_checks/{id} - /api/eligibility_checks_list path_count: 3 operation_count: 3 - entity: CustomAppointmentFieldType field_count: 8 paths: - /api/custom_appointment_fields - /api/custom_appointment_fields/{id} path_count: 2 operation_count: 3 - entity: CustomInsurancePlanName field_count: 7 paths: - /api/custom_insurance_plan_names - /api/custom_insurance_plan_names/{id} path_count: 2 operation_count: 2 - entity: CustomPatientFieldType field_count: 7 paths: - /api/custom_demographics - /api/custom_demographics/{id} path_count: 2 operation_count: 3 - entity: CustomVitalType field_count: 10 paths: - /api/custom_vitals - /api/custom_vitals/{id} path_count: 2 operation_count: 2 - entity: Doctor field_count: 20 paths: - /api/doctors - /api/doctors/{id} path_count: 2 operation_count: 2 - entity: DoctorFeeSchedule field_count: 24 paths: - /api/fee_schedules - /api/fee_schedules/{id} path_count: 2 operation_count: 2 - entity: DoctorMessage field_count: 28 paths: - /api/messages - /api/messages/{id} path_count: 2 operation_count: 3 - entity: DoctorMessageThread field_count: 18 paths: - /api/message_threads - /api/message_threads/{id} path_count: 2 operation_count: 3 - entity: DoctorOptions field_count: 13 paths: - /api/doctor_options - /api/doctor_options/{id} path_count: 2 operation_count: 2 - entity: EOBObject field_count: 12 paths: - /api/eobs - /api/eobs/{id} path_count: 2 operation_count: 3 - entity: FeeSchedule field_count: 11 paths: - /api/fee_schedules_v2 - /api/fee_schedules_v2/{id} path_count: 2 operation_count: 2 - entity: FeeScheduleItem field_count: 23 paths: [] path_count: 0 operation_count: 0 - entity: ImplantableDevice field_count: 16 paths: - /api/implantable_devices - /api/implantable_devices/{id} path_count: 2 operation_count: 2 - entity: Insurance field_count: 3 paths: - /api/insurances - /api/insurances/{id} path_count: 2 operation_count: 2 - entity: InventoryCategory field_count: 7 paths: - /api/inventory_categories - /api/inventory_categories/{id} path_count: 2 operation_count: 2 - entity: InventoryVaccine field_count: 20 paths: - /api/inventory_vaccines - /api/inventory_vaccines/{id} path_count: 2 operation_count: 3 - entity: LabOrder field_count: 13 paths: - /api/lab_orders - /api/lab_orders/{id} - /api/lab_orders_summary - /api/lab_orders_summary/{id} path_count: 4 operation_count: 5 - entity: LabOrderDocument field_count: 6 paths: - /api/lab_documents - /api/lab_documents/{id} path_count: 2 operation_count: 3 - entity: LabResult field_count: 17 paths: - /api/lab_results - /api/lab_results/{id} path_count: 2 operation_count: 3 - entity: LabTest field_count: 12 paths: - /api/lab_tests - /api/lab_tests/{id} path_count: 2 operation_count: 3 - entity: LabVendorLocation field_count: 4 paths: - /api/sublabs - /api/sublabs/{id} path_count: 2 operation_count: 3 - entity: LineItemTransaction field_count: 17 paths: - /api/transactions - /api/transactions/{id} - /api/transactions_list path_count: 3 operation_count: 3 - entity: Office field_count: 18 paths: - /api/offices - /api/offices/{id} - /api/offices/{id}/add_exam_room path_count: 3 operation_count: 3 - entity: Patient field_count: 65 paths: - /api/patients - /api/patients/{id} - /api/patients/{id}/onpatient_access - /api/patients_list - /api/patients_summary - /api/patients_summary/{id} path_count: 6 operation_count: 9 - entity: PatientAllergy field_count: 11 paths: - /api/allergies - /api/allergies/{id} path_count: 2 operation_count: 3 - entity: PatientAmendment field_count: 7 paths: - /api/amendments - /api/amendments/{id} path_count: 2 operation_count: 3 - entity: PatientAuthorization field_count: 17 paths: - /api/patient_authorizations path_count: 1 operation_count: 1 - entity: PatientCommunication field_count: 12 paths: - /api/patient_communications - /api/patient_communications/{id} path_count: 2 operation_count: 3 - entity: PatientDrug field_count: 24 paths: - /api/medications - /api/medications/{id} path_count: 2 operation_count: 3 - entity: PatientFlagType field_count: 8 paths: - /api/patient_flag_types - /api/patient_flag_types/{id} path_count: 2 operation_count: 3 - entity: PatientIntervention field_count: 12 paths: - /api/patient_interventions - /api/patient_interventions/{id} path_count: 2 operation_count: 3 - entity: PatientLabResultSet field_count: 19 paths: - /api/patient_lab_results - /api/patient_lab_results/{id} path_count: 2 operation_count: 3 - entity: PatientMessage field_count: 10 paths: - /api/patient_messages - /api/patient_messages/{id} path_count: 2 operation_count: 3 - entity: PatientPhysicalExam field_count: 12 paths: - /api/patient_physical_exams - /api/patient_physical_exams/{id} path_count: 2 operation_count: 3 - entity: PatientProblem field_count: 19 paths: - /api/problems - /api/problems/{id} path_count: 2 operation_count: 3 - entity: PatientRiskAssessment field_count: 12 paths: - /api/patient_risk_assessments - /api/patient_risk_assessments/{id} path_count: 2 operation_count: 3 - entity: PatientVaccineRecord field_count: 28 paths: - /api/patient_vaccine_records - /api/patient_vaccine_records/{id} path_count: 2 operation_count: 3 - entity: PhoneCallLog field_count: 14 paths: - /api/comm_logs - /api/comm_logs/{id} path_count: 2 operation_count: 3 - entity: PrescriptionMessage field_count: 10 paths: - /api/prescription_messages - /api/prescription_messages/{id} - /api/prescription_messages_list path_count: 3 operation_count: 3 - entity: Procedure field_count: 11 paths: - /api/procedures - /api/procedures/{id} path_count: 2 operation_count: 2 - entity: ReminderProfile field_count: 4 paths: - /api/reminder_profiles - /api/reminder_profiles/{id} path_count: 2 operation_count: 3 - entity: ScannedClinicalDocument field_count: 9 paths: - /api/documents - /api/documents/{id} path_count: 2 operation_count: 3 - entity: ScheduleBlock field_count: 11 paths: - /api/schedule_blocks - /api/schedule_blocks/{id} path_count: 2 operation_count: 5 - entity: SignedConsentForm field_count: 8 paths: - /api/signed_consent_forms - /api/signed_consent_forms/{id} path_count: 2 operation_count: 3 - entity: SignedConsentFormUpdate field_count: 5 paths: - /api/signed_consent_forms path_count: 1 operation_count: 1 - entity: SoapNoteCustomReport field_count: 10 paths: - /api/clinical_note_templates - /api/clinical_note_templates/{id} path_count: 2 operation_count: 2 - entity: SoapNoteLineItemFieldType field_count: 8 paths: - /api/clinical_note_field_types - /api/clinical_note_field_types/{id} path_count: 2 operation_count: 2 - entity: SoapNoteLineItemFieldValue field_count: 6 paths: - /api/clinical_note_field_values - /api/clinical_note_field_values/{id} - /api/clinical_note_field_values_list path_count: 3 operation_count: 4 - entity: Staff field_count: 12 paths: - /api/staff - /api/staff/{id} path_count: 2 operation_count: 2 - entity: Task field_count: 15 paths: - /api/tasks - /api/tasks/{id} path_count: 2 operation_count: 3 - entity: TaskCategory field_count: 7 paths: - /api/task_categories - /api/task_categories/{id} path_count: 2 operation_count: 3 - entity: TaskNote field_count: 7 paths: - /api/task_notes - /api/task_notes/{id} path_count: 2 operation_count: 3 - entity: TaskStatus field_count: 8 paths: - /api/task_statuses - /api/task_statuses/{id} path_count: 2 operation_count: 3 - entity: TaskTemplate field_count: 14 paths: - /api/task_templates - /api/task_templates/{id} path_count: 2 operation_count: 3 - entity: TelemedicineAppointment field_count: 7 paths: - /api/telehealth_appointments - /api/telehealth_appointments/{id} path_count: 2 operation_count: 3 - entity: TelemedicineAppointmentEventLog field_count: 3 paths: - /api/telehealth_appointment_history - /api/telehealth_appointment_history/{id} path_count: 2 operation_count: 3 - entity: UserProfile field_count: 8 paths: - /api/users - /api/users/{id} path_count: 2 operation_count: 2 - entity: UserProfilesGroup field_count: 7 paths: - /api/user_groups - /api/user_groups/{id} path_count: 2 operation_count: 2 - entity: WorkDay field_count: 4 paths: [] path_count: 0 operation_count: 0 - entity: WorkHours field_count: 4 paths: [] path_count: 0 operation_count: 0 - entity: WorkSchedule field_count: 4 paths: - /api/doctor_work_schedule - /api/doctor_work_schedule/{id} - /api/office_work_schedule - /api/office_work_schedule/{id} path_count: 4 operation_count: 4 relationships: - from: Appointment to: ClinicalNote type: belongs_to via: clinical_note - from: Appointment to: Doctor type: belongs_to via: doctor - from: Appointment to: Office type: belongs_to via: office - from: Appointment to: Patient type: belongs_to via: patient - from: AppointmentProfile to: Doctor type: belongs_to via: doctor - from: AppointmentTemplate to: Office type: belongs_to via: office - from: AuditLog to: Appointment type: belongs_to via: appointment_id - from: AuditLog to: Doctor type: belongs_to via: doctor_id - from: AuditLog to: Patient type: belongs_to via: patient - from: BillingLineItem to: Appointment type: belongs_to via: appointment - from: BillingLineItem to: Doctor type: belongs_to via: doctor - from: BillingLineItem to: Patient type: belongs_to via: patient - from: BillingLineItemDeletion to: Appointment type: belongs_to via: appointment_id - from: BillingProfile to: Doctor type: belongs_to via: doctor - from: CarePlan to: Appointment type: belongs_to via: appointment - from: CarePlan to: Patient type: belongs_to via: patient - from: CareTeamMember to: Appointment type: belongs_to via: appointment - from: CareTeamMember to: Patient type: belongs_to via: patient - from: CashPayment to: Appointment type: belongs_to via: appointment - from: CashPayment to: Doctor type: belongs_to via: doctor - from: CashPayment to: Patient type: belongs_to via: patient - from: CashPaymentLog to: Appointment type: belongs_to via: appointment - from: CashPaymentLog to: Doctor type: belongs_to via: doctor - from: CashPaymentLog to: Patient type: belongs_to via: patient - from: ClaimBillingNotes to: Appointment type: belongs_to via: appointment - from: ClinicalNote to: Appointment type: belongs_to via: appointment - from: ClinicalNote to: Patient type: belongs_to via: patient - from: ConsentForm to: Doctor type: belongs_to via: doctor - from: Coverage to: Appointment type: belongs_to via: appointment - from: Coverage to: Patient type: belongs_to via: patient - from: CustomAppointmentFieldType to: Doctor type: belongs_to via: doctor - from: CustomInsurancePlanName to: Doctor type: belongs_to via: doctor - from: CustomPatientFieldType to: Doctor type: belongs_to via: doctor - from: CustomVitalType to: Doctor type: belongs_to via: doctor - from: Doctor to: WorkSchedule type: has_one via: doctor_work_schedule - from: DoctorFeeSchedule to: Doctor type: belongs_to via: doctor - from: DoctorFeeSchedule to: Office type: belongs_to via: office - from: DoctorMessage to: Doctor type: belongs_to via: doctor - from: DoctorMessage to: Patient type: belongs_to via: patient - from: DoctorMessageThread to: Doctor type: belongs_to via: doctor - from: DoctorMessageThread to: Patient type: belongs_to via: patient - from: DoctorOptions to: Doctor type: belongs_to via: doctor - from: EOBObject to: Doctor type: belongs_to via: doctor - from: FeeScheduleItem to: Doctor type: belongs_to via: doctor - from: ImplantableDevice to: Patient type: belongs_to via: patient - from: InventoryCategory to: Doctor type: belongs_to via: doctor - from: InventoryVaccine to: Doctor type: belongs_to via: doctor - from: LabOrder to: Doctor type: belongs_to via: doctor - from: LabOrder to: Patient type: belongs_to via: patient - from: LabOrderDocument to: LabOrder type: belongs_to via: lab_order - from: LabResult to: LabOrder type: belongs_to via: lab_order - from: LabTest to: LabOrder type: belongs_to via: lab_order - from: LineItemTransaction to: Appointment type: belongs_to via: appointment - from: LineItemTransaction to: Doctor type: belongs_to via: doctor - from: LineItemTransaction to: Patient type: belongs_to via: patient - from: Office to: Doctor type: belongs_to via: doctor - from: Office to: WorkSchedule type: has_one via: office_work_schedule - from: Patient to: Doctor type: belongs_to via: doctor - from: PatientAllergy to: Doctor type: belongs_to via: doctor - from: PatientAllergy to: Patient type: belongs_to via: patient - from: PatientAmendment to: Appointment type: belongs_to via: appointment - from: PatientAmendment to: Doctor type: belongs_to via: doctor - from: PatientAmendment to: Patient type: belongs_to via: patient - from: PatientAuthorization to: Doctor type: belongs_to via: doctor - from: PatientAuthorization to: Doctor type: belongs_to via: doctor_id - from: PatientAuthorization to: Patient type: belongs_to via: patient - from: PatientAuthorization to: Patient type: belongs_to via: patient_id - from: PatientCommunication to: Appointment type: belongs_to via: appointment - from: PatientCommunication to: Doctor type: belongs_to via: doctor - from: PatientCommunication to: Patient type: belongs_to via: patient - from: PatientDrug to: Appointment type: belongs_to via: appointment - from: PatientDrug to: Doctor type: belongs_to via: doctor - from: PatientDrug to: Patient type: belongs_to via: patient - from: PatientFlagType to: Doctor type: belongs_to via: doctor - from: PatientIntervention to: Appointment type: belongs_to via: appointment - from: PatientIntervention to: Doctor type: belongs_to via: doctor - from: PatientIntervention to: Patient type: belongs_to via: patient - from: PatientLabResultSet to: Patient type: belongs_to via: patient - from: PatientMessage to: Doctor type: belongs_to via: doctor - from: PatientMessage to: Patient type: belongs_to via: patient - from: PatientPhysicalExam to: Appointment type: belongs_to via: appointment - from: PatientPhysicalExam to: Doctor type: belongs_to via: doctor - from: PatientPhysicalExam to: Patient type: belongs_to via: patient - from: PatientProblem to: Appointment type: belongs_to via: appointment - from: PatientProblem to: Doctor type: belongs_to via: doctor - from: PatientProblem to: Patient type: belongs_to via: patient - from: PatientRiskAssessment to: Appointment type: belongs_to via: appointment - from: PatientRiskAssessment to: Doctor type: belongs_to via: doctor - from: PatientRiskAssessment to: Patient type: belongs_to via: patient - from: PatientVaccineRecord to: Patient type: belongs_to via: patient - from: PhoneCallLog to: Appointment type: belongs_to via: appointment - from: PhoneCallLog to: Doctor type: belongs_to via: doctor - from: PhoneCallLog to: Patient type: belongs_to via: patient - from: PrescriptionMessage to: Doctor type: belongs_to via: doctor - from: PrescriptionMessage to: Patient type: belongs_to via: patient - from: Procedure to: Appointment type: belongs_to via: appointment - from: Procedure to: Doctor type: belongs_to via: doctor - from: Procedure to: Patient type: belongs_to via: patient - from: ReminderProfile to: Doctor type: belongs_to via: doctor - from: ScannedClinicalDocument to: Doctor type: belongs_to via: doctor - from: ScannedClinicalDocument to: Patient type: belongs_to via: patient - from: ScheduleBlock to: Office type: belongs_to via: office - from: SignedConsentForm to: Appointment type: belongs_to via: appointment - from: SignedConsentForm to: Patient type: belongs_to via: patient - from: SignedConsentFormUpdate to: Appointment type: belongs_to via: appointment - from: SignedConsentFormUpdate to: Patient type: belongs_to via: patient - from: SoapNoteCustomReport to: Doctor type: belongs_to via: doctor - from: SoapNoteLineItemFieldValue to: Appointment type: belongs_to via: appointment - from: Staff to: Doctor type: belongs_to via: doctor - from: TelemedicineAppointment to: Appointment type: belongs_to via: appointment - from: UserProfile to: Doctor type: belongs_to via: doctor - from: WorkDay to: WorkHours type: has_many via: work_hours - from: WorkSchedule to: Doctor type: belongs_to via: doctor - from: WorkSchedule to: Office type: belongs_to via: office - from: WorkSchedule to: WorkDay type: has_many via: work_days