Every API here is available over the APIs.io API and to AI agents over MCP.
openapi: 3.2.0
info:
title: Elation Health Appointments API
version: '1.0'
description: 'Operations tagged Appointments across 4 of this provider''s published API definitions: elation-api-settings.json, elation-health-api-full-openapi.yaml, elation-health-appointments-api-openapi.yml, elation-scheduling-api.json. Each path carries the servers of the definition it was published in.'
servers:
- url: https://sandbox.elationemr.com/api/2.0
- description: Sandbox Server
url: https://sandbox.elationemr.com
- description: Production Server
url: https://api.app.elationemr.com
- url: https://app.elationemr.com/api/2.0
description: Production
tags:
- name: Appointments
paths:
/appointments/{id}/:
delete:
summary: Delete Event
description: ''
operationId: delete-event
parameters:
- name: id
in: path
required: true
schema:
type: integer
format: int64
- name: Authorization
in: header
required: true
schema:
type: string
responses:
'204':
description: '204'
content:
application/json:
examples:
Result:
value: ''
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"TyEPKw8fVGRKpCBa81ygwjCLXDNIAm\"\nauth_header = \"Bearer %s\" % (access_token)\n\nresp = requests.delete(\"https://sandbox.elationemr.com/api/2.0/appointments/54233202689/\",\n headers={'Authorization': auth_header})\n\nprint resp.status_code"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
get:
summary: Get Event
description: ''
operationId: get-event
parameters:
- name: id
in: path
required: true
schema:
type: integer
format: int64
- name: Authorization
in: header
required: true
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 65097433178,\n // See Object Definition\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"TyEPKw8fVGRKpCBa81ygwjCLXDNIAm\"\nauth_header = \"Bearer %s\" % (access_token)\n\nresp = requests.get(\"https://sandbox.elationemr.com/api/2.0/appointments/65097433179/\",\n headers={'Authorization': auth_header})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2)"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
put:
summary: Update Event
description: ''
operationId: update-appointment
parameters:
- name: id
in: path
required: true
schema:
type: integer
format: int64
- name: Authorization
in: header
required: true
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 83792571234,\n // See Object Definition\n}"
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"TyEPKw8fVGRKpCBa81ygwjCLXDNIAm\"\nauth_header = \"Bearer %s\" % (access_token)\n\ndata = {\n \"scheduled_date\": \"2016-11-28T18:30:00Z\",\n \"duration\": 15,\n \"reason\": None, # typically None, can be a string of appointment type\n \"patient\": None, # must be None\n \"description\": \"\",\n \"physician\": 720898,\n \"practice\": 655364,\n}\n\nresp = requests.put(\"https://sandbox.elationemr.com/api/2.0/appointments/67176497154/\",\n data=json.dumps(data),\n headers={'Authorization': auth_header,\n 'Content-type': 'application/json'})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2))"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
patch:
summary: Update Event
description: ''
operationId: update-event
parameters:
- name: id
in: path
required: true
schema:
type: integer
format: int64
- name: Authorization
in: header
required: true
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 83792571234,\n // See Object Definition\n}"
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"TyEPKw8fVGRKpCBa81ygwjCLXDNIAm\"\nauth_header = \"Bearer %s\" % (access_token)\n\n# enter the value you want to update only. PUT will require all values, and PATCH will only require values you want to update.\ndata = {\n \"scheduled_date\": \"2016-10-13T11:30:00Z\n}\n\nresp = requests.patch(\"https://sandbox.elationemr.com/api/2.0/appointments/67176497153/\",\n data=json.dumps(data),\n headers={'Authorization': auth_header,\n 'Content-type': 'application/json'})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2)"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
servers:
- url: https://sandbox.elationemr.com/api/2.0
/appointments/:
post:
summary: Create Event
description: ''
operationId: create-event
parameters:
- name: Authorization
in: header
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
required:
- scheduled_date
- reason
- patient
- physician
- practice
- time_slot_type
properties:
scheduled_date:
type: string
format: date
duration:
type: integer
description: If duration is not provided, duration will be set to 15 minutes or the default duration for a particular reason
default: 15
format: int32
reason:
type: string
description: typically should be null but can also be string of appointment type
description:
type: string
patient:
type: string
description: value must be null
default: 'null'
format: json
physician:
type: integer
format: int32
practice:
type: integer
format: int32
time_slot_type:
type: string
description: value must be "event"
default: event
service_location:
type: integer
description: ID of an active (non-deleted) practice location where the appointment will occur
format: int32
responses:
'201':
description: '201'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 67176497154, \n // See Object Definition\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"TyEPKw8fVGRKpCBa81ygwjCLXDNIAm\"\nauth_header = \"Bearer %s\" % (access_token)\n\n# sending only required data\ndata = {\n \"scheduled_date\": \"2016-10-13T11:15:00Z\",\n \"reason\": None, # typically None, can be a string of appointment type\n \"patient\": None, # must be None\n \"physician\": 131074,\n \"practice\": 65540,\n \"time_slot_type\": \"event\"\n}\n\nresp = requests.post(\"https://sandbox.elationemr.com/api/2.0/appointments/\",\n data=json.dumps(data),\n headers={'Authorization': auth_header,\n 'Content-type': 'application/json'})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2)"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
get:
summary: Find Events
description: ''
operationId: testinput
parameters:
- name: time_slot_type
in: query
description: value must be "event"
required: true
schema:
type: string
- name: physician
in: query
schema:
type: array
items:
type: integer
format: int64
- name: from_date
in: query
schema:
type: string
format: date
- name: to_date
in: query
schema:
type: string
format: date
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"count\": 123,\n \"next\": \"https://sandbox.elationemr.com/api/2.0/appointments/?time_slot_type=event&limit=10&offset=10\",\n \"previous\": \"https://sandbox.elationemr.com/api/2.0/appointments/?time_slot_type=event&limit=10\",\n \"results\": [ // list of objects\n { // See Object Definition },\n // ...\n { // See Object Definition },\n ]\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"VFroUHsmrErlVI6nJ08Alwhri5RGCW\"\nauth_header = \"Bearer %s\" % (access_token)\n\nresp = requests.get(\"https://sandbox.elationemr.com/api/2.0/appointments/?time_slot_type=event\",\n headers={'Authorization': auth_header})\n\n# to search for events by scheduled_date, use the following url in the get request instead of the above \nresp = requests.get(\"https://sandbox.elationemr.com/api/2.0/appointments/?from_date=2016- 11-28T18:00:00Z&to_date=2016-11-29T18:00:00Z&time_slot_type=event\",\n headers={'Authorization': auth_header})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2)"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
servers:
- url: https://sandbox.elationemr.com/api/2.0
/appointments/rooms:
get:
summary: Find Appointment Rooms
description: ''
operationId: find-appointment-rooms
parameters:
- name: Authorization
in: header
required: true
schema:
type: string
- name: practice
in: query
schema:
type: array
items:
type: integer
format: int64
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"count\": 123,\n \"next\": \"https://sandbox.elationemr.com/api/2.0/appointments/rooms/?limit=10&offset=10\",\n \"previous\": \"https://sandbox.elationemr.com/api/2.0/appointments/rooms/?limit=10\",\n \"results\": [ // list of objects\n { // See Object Definition },\n // ...\n { // See Object Definition },\n ]\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"VFroUHsmrErlVI6nJ08Alwhri5RGCW\"\nauth_header = \"Bearer %s\" % (access_token)\n\nresp = requests.get(\"https://sandbox.elationemr.com/api/2.0/appointments/rooms/\",\n headers={'Authorization': auth_header})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2)"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
servers:
- url: https://sandbox.elationemr.com/api/2.0
/appointments/id/:
patch:
summary: Update Appointment Slot
description: ''
operationId: update-appointment-slot
parameters:
- name: Authorization
in: header
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
required:
- patient
properties:
patient:
type: integer
format: int32
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 83792571234,\n // See Object Definition\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"TyEPKw8fVGRKpCBa81ygwjCLXDNIAm\"\nauth_header = \"Bearer %s\" % (access_token)\n\n# The main 2 use cases for PATCH is patient reservation and cancellation\n\n# Setting the patient field to a valid patient will \"reserve\" the appointment slot for the patient\n# Setting the patient to null will cancel the reservation\n\n# if you only need to update the patient field, use the PATCH method\ndata = {\n \"patient\": 123123\n}\n\nresp = requests.patch(\"https://sandbox.elationemr.com/api/2.0/appointments/67176497153/\",\n data=json.dumps(data),\n headers={'Authorization': auth_header,\n 'Content-type': 'application/json'})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2))"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
put:
summary: Update Appointment Slot
description: ''
operationId: update-appointment-slot-1
parameters:
- name: Authorization
in: header
required: true
schema:
type: string
- name: id
in: path
schema:
type: integer
format: int64
required: true
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 83792571234,\n // See Object Definition\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"TyEPKw8fVGRKpCBa81ygwjCLXDNIAm\"\nauth_header = \"Bearer %s\" % (access_token)\n\n# setting a patient will \"reserve\" the appointment slot for the patient\n# if you need to update other fields as well, use the PUT method\ndata = {\n \"patient\": 123123,\n \"description\": \"this is a new desc\"\n}\n\nresp = requests.put(\"https://sandbox.elationemr.com/api/2.0/appointments/67176497153/\",\n data=json.dumps(data),\n headers={'Authorization': auth_header,\n 'Content-type': 'application/json'})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2))"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
servers:
- url: https://sandbox.elationemr.com/api/2.0
/appointments/slots/:
options:
summary: Create Appointment Slot
description: ''
operationId: create-appointment-slot
parameters:
- name: Authorization
in: header
required: true
schema:
type: string
responses:
'201':
description: '201'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 67176497153, \n // See Object Definition\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"TyEPKw8fVGRKpCBa81ygwjCLXDNIAm\"\nauth_header = \"Bearer %s\" % (access_token)\n\n# sending only required data\n# the following creates an \"unreserved\" appointment slot\ndata = {\n \"scheduled_date\": \"2016-10-13T11:15:00Z\",\n \"reason\": \"Follow-Up\",\n \"physician\": 131074,\n \"practice\": 65540,\n \"time_slot_type\": \"appointment_slot\"\n}\n\nresp = requests.post(\"https://sandbox.elationemr.com/api/2.0/appointments/\",\n data=json.dumps(data),\n headers={'Authorization': auth_header,\n 'Content-type': 'application/json'})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2)"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
servers:
- url: https://sandbox.elationemr.com/api/2.0
/appointments/ [WIP]:
get:
summary: Find Events [WIP]
description: ''
operationId: find-events-wip
parameters:
- name: time_slot_type
in: query
description: if you want only events, value must be "event"
required: true
schema:
type: string
- name: physician
in: query
schema:
type: array
items:
type: integer
format: int64
- name: from_date
in: query
description: lookup_expr="gte"
schema:
type: string
format: date
- name: to_date
in: query
description: lookup_expr="lte"
schema:
type: string
format: date
- name: Authorization
in: header
description: Bearer token
required: true
schema:
type: string
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"count\": 123,\n \"next\": \"https://sandbox.elationemr.com/api/2.0/appointments/?time_slot_type=event&limit=10&offset=10\",\n \"previous\": \"https://sandbox.elationemr.com/api/2.0/appointments/?time_slot_type=event&limit=10\",\n \"results\": [ // list of objects\n { // See Object Definition },\n // ...\n { // See Object Definition },\n ]\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"VFroUHsmrErlVI6nJ08Alwhri5RGCW\"\nauth_header = \"Bearer %s\" % (access_token)\n\nresp = requests.get(\"https://sandbox.elationemr.com/api/2.0/appointments/?time_slot_type=event\",\n headers={'Authorization': auth_header})\n\n# to search for events by scheduled_date, use the following url in the get request instead of the above \nresp = requests.get(\"https://sandbox.elationemr.com/api/2.0/appointments/?from_date=2016- 11-28T18:00:00Z&to_date=2016-11-29T18:00:00Z&time_slot_type=event\",\n headers={'Authorization': auth_header})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2)"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
post:
summary: Create Event [WIP]
description: ''
operationId: create-event-wip
parameters:
- name: Authorization
in: header
required: true
schema:
type: string
requestBody:
content:
application/json:
schema:
type: object
required:
- scheduled_date
- reason
- patient
- physician
- practice
- time_slot_type
properties:
scheduled_date:
type: string
format: date
duration:
type: integer
description: If duration is not provided, duration will be set to 15 minutes or the default duration for a particular reason
default: 15
format: int32
reason:
type: string
description: typically should be null but can also be string of appointment type
description:
type: string
patient:
type: integer
description: value must be null
default: null
format: int32
physician:
type: integer
format: int32
practice:
type: integer
format: int32
time_slot_type:
type: string
description: value must be "event"
default: event
enum:
- (1
- '"appointment")'
- (2
- '"event")'
- (3
- '"appointment_slot")'
service_location:
type: integer
description: ID of an active (non-deleted) practice location where the appointment will occur
format: int32
responses:
'201':
description: '201'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 67176497154, \n // See Object Definition\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"TyEPKw8fVGRKpCBa81ygwjCLXDNIAm\"\nauth_header = \"Bearer %s\" % (access_token)\n\n# sending only required data\ndata = {\n \"scheduled_date\": \"2016-10-13T11:15:00Z\",\n \"reason\": None, # typically None, can be a string of appointment type\n \"patient\": None, # must be None\n \"physician\": 131074,\n \"practice\": 65540,\n \"time_slot_type\": \"event\"\n}\n\nresp = requests.post(\"https://sandbox.elationemr.com/api/2.0/appointments/\",\n data=json.dumps(data),\n headers={'Authorization': auth_header,\n 'Content-type': 'application/json'})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2)"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
servers:
- url: https://sandbox.elationemr.com/api/2.0
/appointments/{id}/ [WIP]:
put:
summary: Update Event [WIP]
description: ''
operationId: update-event-wip
parameters:
- name: Authorization
in: header
required: true
schema:
type: string
- name: id
in: path
schema:
type: integer
format: int64
required: true
requestBody:
content:
application/json:
schema:
type: object
required:
- scheduled_date
- reason
- patient
- physician
- practice
- time_slot_type
properties:
scheduled_date:
type: string
format: date
duration:
type: integer
description: If duration is not provided, duration will be set to 15 minutes or the default duration for a particular reason
default: 15
format: int32
reason:
type: string
description: typically should be null but can also be string of appointment type
description:
type: string
patient:
type: integer
description: value must be null or belong to the practice
default: null
format: int32
physician:
type: integer
format: int32
practice:
type: integer
format: int32
time_slot_type:
type: string
description: value must be "event"
default: event
enum:
- (1
- '"appointment")'
- (2
- '"event")'
- (3
- '"appointment_slot")'
service_location:
type: integer
description: ID of an active (non-deleted) practice location where the appointment will occur
format: int32
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 67176497154, \n // See Object Definition\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"TyEPKw8fVGRKpCBa81ygwjCLXDNIAm\"\nauth_header = \"Bearer %s\" % (access_token)\n\ndata = {\n \"scheduled_date\": \"2016-11-28T18:30:00Z\",\n \"duration\": 15,\n \"reason\": None, # typically None, can be a string of appointment type\n \"patient\": None, # must be None\n \"description\": \"\",\n \"physician\": 720898,\n \"practice\": 655364,\n}\n\nresp = requests.put(\"https://sandbox.elationemr.com/api/2.0/appointments/67176497154/\",\n data=json.dumps(data),\n headers={'Authorization': auth_header,\n 'Content-type': 'application/json'})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2))"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
patch:
summary: Update Event [WIP]
description: ''
operationId: update-event-wip-1
parameters:
- name: Authorization
in: header
required: true
schema:
type: string
- name: id
in: path
schema:
type: integer
format: int64
required: true
requestBody:
content:
application/json:
schema:
type: object
properties:
scheduled_date:
type: string
format: date
duration:
type: integer
description: If duration is not provided, duration will be set to 15 minutes or the default duration for a particular reason
default: 15
format: int32
reason:
type: string
description: typically should be null but can also be string of appointment type
description:
type: string
patient:
type: integer
description: value must be null
default: null
format: int32
physician:
type: integer
format: int32
practice:
type: integer
format: int32
time_slot_type:
type: string
description: value must be "event"
default: event
enum:
- (1
- '"appointment")'
- (2
- '"event")'
- (3
- '"appointment_slot")'
service_location:
type: integer
description: ID of an active (non-deleted) practice location where the appointment will occur
format: int32
responses:
'200':
description: '200'
content:
application/json:
examples:
Result:
value: "{\n \"id\": 67176497154, \n // See Object Definition\n}"
'400':
description: '400'
content:
application/json:
examples:
Result:
value: '{}'
schema:
type: object
properties: {}
deprecated: false
x-readme:
code-samples:
- language: python
code: "import requests\nimport json\n\naccess_token = \"TyEPKw8fVGRKpCBa81ygwjCLXDNIAm\"\nauth_header = \"Bearer %s\" % (access_token)\n\n# enter the value you want to update only. PUT will require all values, and PATCH will only require values you want to update.\ndata = {\n \"scheduled_date\": \"2016-10-13T11:30:00Z\n}\n\nresp = requests.patch(\"https://sandbox.elationemr.com/api/2.0/appointments/67176497153/\",\n data=json.dumps(data),\n headers={'Authorization': auth_header,\n 'Content-type': 'application/json'})\n\nprint resp.status_code\nprint json.dumps(json.loads(resp.content), indent=2)"
samples-languages:
- python
tags:
- Appointments
security:
- sec0: []
servers:
- url:
# --- truncated at 32 KB (73 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/elation-health/refs/heads/main/openapi/elation-health-appointments-api-openapi.yml