openapi: 3.0.3 info: title: Elation Health REST Allergies Patients API description: RESTful API for Elation's primary care EHR platform enabling management of patient profiles, visit notes, clinical documents, problems, allergies, immunizations, vitals, medications, lab orders, imaging orders, referrals, appointments, insurance, billing, pharmacy, messaging, and practice administration. Supports OAuth2 client credentials authentication with both sandbox and production environments. version: '2.0' contact: name: Elation Health Developer Support url: https://docs.elationhealth.com/reference/api-overview termsOfService: https://www.elationhealth.com/ servers: - url: https://app.elationemr.com/api/2.0 description: Production - url: https://sandbox.elationemr.com/api/2.0 description: Sandbox security: - oauth2: [] tags: - name: Patients description: Patient profile management paths: /patients/: get: operationId: patients_list summary: List patients description: Retrieve a paginated list of patients in the practice. tags: - Patients parameters: - $ref: '#/components/parameters/limit' - $ref: '#/components/parameters/offset' - name: first_name in: query schema: type: string description: Filter by first name - name: last_name in: query schema: type: string description: Filter by last name - name: dob in: query schema: type: string format: date description: Filter by date of birth (YYYY-MM-DD) responses: '200': description: Paginated list of patients content: application/json: schema: $ref: '#/components/schemas/PaginatedPatientList' post: operationId: patients_create summary: Create a patient description: Create a new patient record in the practice. tags: - Patients requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PatientCreate' responses: '201': description: Patient created content: application/json: schema: $ref: '#/components/schemas/Patient' '400': description: Validation error content: application/json: schema: $ref: '#/components/schemas/Error' /patients/{id}/: get: operationId: patients_retrieve summary: Retrieve a patient description: Get details for a specific patient by ID. tags: - Patients parameters: - $ref: '#/components/parameters/id' responses: '200': description: Patient details content: application/json: schema: $ref: '#/components/schemas/Patient' '404': description: Patient not found content: application/json: schema: $ref: '#/components/schemas/Error' put: operationId: patients_update summary: Update a patient description: Replace all patient fields with the provided values. tags: - Patients parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PatientCreate' responses: '200': description: Patient updated content: application/json: schema: $ref: '#/components/schemas/Patient' patch: operationId: patients_partial_update summary: Partially update a patient description: Update one or more patient fields. tags: - Patients parameters: - $ref: '#/components/parameters/id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/PatientPatch' responses: '200': description: Patient updated content: application/json: schema: $ref: '#/components/schemas/Patient' delete: operationId: patients_destroy summary: Delete a patient description: Soft-delete a patient record. tags: - Patients parameters: - $ref: '#/components/parameters/id' responses: '204': description: Patient deleted components: schemas: PatientStatus: type: object properties: status: type: string enum: - Active - Inactive - Prospect - Deceased reason: type: string description: Reason for status deleted_date: type: string format: date-time readOnly: true Patient: allOf: - $ref: '#/components/schemas/PatientCreate' - type: object properties: id: type: integer format: int64 readOnly: true description: Unique patient identifier created_date: type: string format: date-time readOnly: true deleted_date: type: string format: date-time nullable: true readOnly: true merged_into_chart: type: integer format: int64 nullable: true readOnly: true sms_opt_in_status: type: boolean readOnly: true verified: type: boolean primary_care_provider: type: integer readOnly: true primary_care_provider_npi: type: string maxLength: 10 consents: type: array readOnly: true items: type: object PaginatedPatientList: allOf: - $ref: '#/components/schemas/PaginationMeta' - type: object properties: results: type: array items: $ref: '#/components/schemas/Patient' Email: type: object properties: email: type: string format: email Address: type: object properties: address_line1: type: string description: Primary street address address_line2: type: string description: Secondary address line city: type: string state: type: string description: Two-letter state code zip: type: string description: ZIP or postal code PatientPatch: type: object properties: first_name: type: string maxLength: 70 middle_name: type: string maxLength: 50 last_name: type: string maxLength: 70 dob: type: string format: date sex: type: string enum: - Female - Male - Other - Unknown primary_physician: type: integer address: $ref: '#/components/schemas/Address' phones: type: array items: $ref: '#/components/schemas/Phone' emails: type: array items: $ref: '#/components/schemas/Email' patient_status: $ref: '#/components/schemas/PatientStatus' metadata: type: object Error: type: object properties: detail: type: string description: Human-readable error description error: type: string description: Machine-readable error code Phone: type: object properties: phone: type: string description: Phone number phone_type: type: string enum: - Home - Work - Cell - Fax PaginationMeta: type: object properties: count: type: integer description: Total number of results next: type: string nullable: true description: URL for next page previous: type: string nullable: true description: URL for previous page PatientCreate: type: object required: - first_name - last_name - dob - primary_physician - caregiver_practice - sex properties: first_name: type: string maxLength: 70 description: Patient's first name middle_name: type: string maxLength: 50 description: Patient's middle name last_name: type: string maxLength: 70 description: Patient's last name suffix: type: string maxLength: 20 description: Name suffix actual_name: type: string maxLength: 150 description: Preferred name variation dob: type: string format: date description: Date of birth (YYYY-MM-DD) sex: type: string enum: - Female - Male - Other - Unknown description: Biological sex gender_identity: type: string enum: - man - woman - nonbinary - transgender_man - transgender_woman - prefer_not_to_say description: Personal gender identity legal_gender_marker: type: string enum: - M - F - X - U description: Document gender marker pronouns: type: string enum: - he_him_his - she_her_hers - they_them_theirs - not_listed description: Preferred pronouns sexual_orientation: type: string enum: - straight - gay - lesbian - bisexual - queer - asexual - unknown race: type: string description: Racial category ethnicity: type: string description: Hispanic/Latino status preferred_language: type: string description: Patient's preferred communication language preferred_contact: type: string enum: - sms - email - phone - passport ssn: type: string maxLength: 37 description: Social Security Number primary_physician: type: integer description: ID of physician providing care within practice caregiver_practice: type: integer description: Practice ID address: $ref: '#/components/schemas/Address' phones: type: array maxItems: 2 items: $ref: '#/components/schemas/Phone' emails: type: array items: $ref: '#/components/schemas/Email' notes: type: string maxLength: 500 description: Additional notes about patient vip: type: boolean description: VIP status flag tags: type: array maxItems: 10 items: type: string patient_status: $ref: '#/components/schemas/PatientStatus' metadata: type: object description: Custom metadata parameters: offset: name: offset in: query schema: type: integer default: 0 description: Pagination offset id: name: id in: path required: true schema: type: integer description: Unique resource identifier limit: name: limit in: query schema: type: integer default: 25 description: Number of results to return securitySchemes: oauth2: type: oauth2 flows: clientCredentials: tokenUrl: https://sandbox.elationemr.com/api/2.0/oauth2/token/ scopes: apiv2: Full API access