Elation Health Appointments API

Scheduling and appointment management

OpenAPI Specification

elation-appointments-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Elation Health REST Allergies Appointments 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: Appointments
  description: Scheduling and appointment management
paths:
  /appointments/:
    get:
      operationId: appointments_list
      summary: List appointments
      description: Retrieve a paginated list of appointments.
      tags:
      - Appointments
      parameters:
      - $ref: '#/components/parameters/limit'
      - $ref: '#/components/parameters/offset'
      - name: physician
        in: query
        schema:
          type: integer
        description: Filter by physician ID
      - name: patient
        in: query
        schema:
          type: integer
        description: Filter by patient ID
      - name: scheduled_date
        in: query
        schema:
          type: string
          format: date-time
        description: Filter by scheduled date (ISO 8601)
      responses:
        '200':
          description: Paginated list of appointments
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedAppointmentList'
    post:
      operationId: appointments_create
      summary: Create an appointment
      description: Schedule a new appointment.
      tags:
      - Appointments
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppointmentCreate'
      responses:
        '201':
          description: Appointment created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
        '400':
          description: Validation error
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
  /appointments/{id}/:
    get:
      operationId: appointments_retrieve
      summary: Retrieve an appointment
      description: Get details for a specific appointment.
      tags:
      - Appointments
      parameters:
      - $ref: '#/components/parameters/id'
      responses:
        '200':
          description: Appointment details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
        '404':
          description: Appointment not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
    put:
      operationId: appointments_update
      summary: Update an appointment
      description: Replace all appointment fields with the provided values.
      tags:
      - Appointments
      parameters:
      - $ref: '#/components/parameters/id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppointmentCreate'
      responses:
        '200':
          description: Appointment updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
    patch:
      operationId: appointments_partial_update
      summary: Partially update an appointment
      description: Update one or more appointment fields.
      tags:
      - Appointments
      parameters:
      - $ref: '#/components/parameters/id'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/AppointmentPatch'
      responses:
        '200':
          description: Appointment updated
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Appointment'
    delete:
      operationId: appointments_destroy
      summary: Delete an appointment
      description: Cancel and delete an appointment.
      tags:
      - Appointments
      parameters:
      - $ref: '#/components/parameters/id'
      responses:
        '204':
          description: Appointment deleted
components:
  schemas:
    Appointment:
      allOf:
      - $ref: '#/components/schemas/AppointmentCreate'
      - type: object
        properties:
          id:
            type: integer
            format: int64
            readOnly: true
          time_slot_type:
            type: string
            default: appointment
          time_slot_status:
            type: object
            nullable: true
          status:
            $ref: '#/components/schemas/AppointmentStatus'
          payment:
            type: object
            nullable: true
            properties:
              amount:
                type: number
              collection_date:
                type: string
                format: date
          billing_details:
            type: object
            nullable: true
          is_blocking:
            type: boolean
            readOnly: true
          created_date:
            type: string
            format: date-time
            readOnly: true
          last_modified_date:
            type: string
            format: date-time
            readOnly: true
          deleted_date:
            type: string
            format: date-time
            nullable: true
            readOnly: true
    AppointmentStatus:
      type: object
      properties:
        status:
          type: string
          enum:
          - Scheduled
          - Confirmed
          - Checked Out
          - Cancelled
          - With Doctor
          - In Room
          - Checked In
          - In Room - Vitals Taken
          - Not Seen
          - Billed
        room:
          type: string
          description: Physical room assignment
        status_date:
          type: string
          format: date-time
          readOnly: true
        status_detail:
          type: string
          enum:
          - No Show
          - Left Without Seeing
          - Other
          description: Additional detail when status is Not Seen
    AppointmentPatch:
      type: object
      properties:
        scheduled_date:
          type: string
          format: date-time
        duration:
          type: integer
        reason:
          type: string
          maxLength: 50
        description:
          type: string
          maxLength: 500
        status:
          $ref: '#/components/schemas/AppointmentStatus'
        mode:
          type: string
          enum:
          - IN_PERSON
          - VIDEO
        instructions:
          type: string
          maxLength: 500
    AppointmentCreate:
      type: object
      required:
      - scheduled_date
      - duration
      - reason
      - patient
      - physician
      - practice
      - service_location
      properties:
        scheduled_date:
          type: string
          format: date-time
          description: Appointment date and time (ISO 8601)
        duration:
          type: integer
          minimum: 1
          maximum: 1440
          description: Duration in minutes (5-minute increments)
        reason:
          type: string
          maxLength: 50
          description: Appointment reason/type
        description:
          type: string
          maxLength: 500
          description: Additional context
        patient:
          type: integer
          format: int64
          description: Patient ID
        physician:
          type: integer
          format: int64
          description: Physician ID
        practice:
          type: integer
          format: int64
          description: Practice ID
        service_location:
          type: object
          description: Facility where appointment occurs
        mode:
          type: string
          enum:
          - IN_PERSON
          - VIDEO
          description: Visit format
        instructions:
          type: string
          maxLength: 500
          description: Appointment instructions
        metadata:
          type: object
          nullable: true
    Error:
      type: object
      properties:
        detail:
          type: string
          description: Human-readable error description
        error:
          type: string
          description: Machine-readable error code
    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
    PaginatedAppointmentList:
      allOf:
      - $ref: '#/components/schemas/PaginationMeta'
      - type: object
        properties:
          results:
            type: array
            items:
              $ref: '#/components/schemas/Appointment'
  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