Documentation
Documentation
https://app.drchrono.com/api-docs/tutorial/
Authentication
https://app.drchrono.com/o/authorize/
openapi: 3.0.0
info:
version: v4 - Hunt Valley
description: RESTful API for the drchrono EHR platform providing access to patient records, clinical encounters, appointments, prescriptions, billing, lab orders, and practice administration with OAuth 2.0 authentication and HIPAA-compliant data exchange.
x-logo:
url: https://www.drchrono.com/site_media/images/logos/drchrono-black-wpadding.png
altText: DrChrono Logo
title: DrChrono EHR REST Administrative Clinical API
servers:
- url: https://app.drchrono.com
tags:
- description: Create and manage clinical resources
name: Clinical
paths:
/api/claim_billing_notes:
post:
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/ClaimBillingNotes'
description: Created
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: integer
description: ''
title: appointment
required: false
description: ''
name: appointment
in: query
- schema:
type: integer
description: ''
title: doctor
required: false
description: ''
name: doctor
in: query
tags:
- Clinical
x-permissions:
- billing
- show-billing-tab
x-practice-access: '"share_patients" need to be set for data access among practice'
security:
- drchrono_oauth2:
- billing:read
- billing:write
operationId: claim_billing_notes_create
description: Create a new billing note
get:
responses:
'200':
content:
application/json:
schema:
title: ''
type: object
description: Paginated Result
properties:
previous:
type: string
description: Previous paginated page
title: previous
data:
items:
$ref: '#/components/schemas/ClaimBillingNotes'
type: array
description: result data
title: data
next:
type: string
description: Next Paginated page
title: next
description: OK
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: string
description: The pagination cursor value.
title: Cursor
required: false
name: cursor
in: query
- schema:
type: integer
description: Number of results to return per page.
title: Page size
required: false
name: page_size
in: query
- schema:
type: integer
description: ''
title: appointment
required: false
description: ''
name: appointment
in: query
- schema:
type: integer
description: ''
title: doctor
required: false
description: ''
name: doctor
in: query
tags:
- Clinical
x-permissions:
- billing
- show-billing-tab
x-practice-access: '"share_patients" need to be set for data access among practice'
security:
- drchrono_oauth2:
- billing:read
- billing:write
operationId: claim_billing_notes_list
description: Retrieve or search billing notes
/api/signed_consent_forms:
post:
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/SignedConsentForm'
description: Created
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: integer
title: patient
required: true
description: ID of the patient to associate with the consent form
name: patient
in: query
- schema:
type: integer
title: appointment
required: true
description: ID of the appointment to associate with the consent form
name: appointment
in: query
- schema:
type: integer
title: consent_form
required: true
description: ID of the consent form that was signed
name: consent_form
in: query
- schema:
type: file
title: signature_file
required: false
description: File containing the patient's signature
name: signature_file
in: query
tags:
- Clinical
description: Create a signed consent form record for a patient and consent form
x-permissions:
- manage-patients
summary: signed_consent_forms Create
requestBody:
content:
multipart/form-data:
schema:
$ref: '#/components/schemas/SignedConsentFormUpdate'
x-practice-access: '"share_consent_forms" need to be set for data access among practice'
security:
- drchrono_oauth2:
- patients:read
- patients:write
operationId: signed_consent_forms_create
patch:
responses:
'204':
content: {}
description: No Content
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: integer
description: ID of the consent form signature to update
title: id
required: true
name: id
in: query
- schema:
type: integer
title: patient
required: false
description: ID of the patient to filter by
name: patient
in: query
tags:
- Clinical
description: Update an existing consent form signature
x-permissions:
- manage-patients
summary: signed_consent_forms Update
requestBody:
content:
multipart/form-data:
schema:
type: object
properties:
archived:
type: boolean
description: Whether to archive the consent form signature
appointment:
type: integer
description: ID of the appointment to assign the consent form signature to
id:
type: integer
description: ID of the consent form signature to update
signature_file:
type: string
description: Base64-encoded signature file to update
format: binary
examples:
ArchiveSignature:
value:
archived: true
id: 12345
AssignToDifferentAppointment:
value:
appointment: 67890
id: 12345
UpdateSignatureFile:
value:
id: 12345
signature_file: base64-encoded-signature-file
x-practice-access: '"share_consent_forms" need to be set for data access among practice'
security:
- drchrono_oauth2:
- patients:read
- patients:write
operationId: signed_consent_forms_partial_update
get:
responses:
'200':
content:
application/json:
schema:
title: ''
type: object
description: Paginated Result
properties:
previous:
type: string
description: Previous paginated page
title: previous
results:
items:
$ref: '#/components/schemas/SignedConsentForm'
type: array
description: List of consent form signatures
title: results
next:
type: string
description: Next Paginated page
title: next
description: OK
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: string
description: The pagination cursor value.
title: Cursor
required: false
name: cursor
in: query
- schema:
type: integer
description: Number of results to return per page.
title: Page size
required: false
name: page_size
in: query
- schema:
type: integer
description: ID of the patient to filter by
title: patient
required: false
description: ''
name: patient
in: query
- schema:
type: integer
description: ID of the doctor to filter by
title: doctor
required: false
description: ''
name: doctor
in: query
tags:
- Clinical
description: Retrieve or search signed consent forms
x-permissions:
- manage-patients
summary: signed_consent_forms Get
requestBody:
content:
application/json:
examples:
example1:
description: Example of filtering by patient
value:
patient: 12345
schema:
$ref: '#/components/schemas/SignedConsentForm'
x-practice-access: '"share_consent_forms" need to be set for data access among practice'
security:
- drchrono_oauth2:
- patients:read
- patients:write
operationId: signed_consent_forms_list
/api/custom_appointment_fields:
post:
responses:
'201':
content:
application/json:
schema:
$ref: '#/components/schemas/CustomAppointmentFieldType'
description: Created
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: integer
description: ''
title: doctor
required: false
description: ''
name: doctor
in: query
tags:
- Clinical
x-permissions:
- clinical-notes
- settings
x-practice-access: '"share_patients" need to be set for data access among practice'
security:
- drchrono_oauth2:
- clinical:read
- clinical:write
- settings:read
- settings:write
operationId: custom_appointment_fields_create
description: Create custom appointment fields
get:
responses:
'200':
content:
application/json:
schema:
title: ''
type: object
description: Paginated Result
properties:
previous:
type: string
description: Previous paginated page
title: previous
data:
items:
$ref: '#/components/schemas/CustomAppointmentFieldType'
type: array
description: result data
title: data
next:
type: string
description: Next Paginated page
title: next
description: OK
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: string
description: The pagination cursor value.
title: Cursor
required: false
name: cursor
in: query
- schema:
type: integer
description: Number of results to return per page.
title: Page size
required: false
name: page_size
in: query
- schema:
type: integer
description: ''
title: doctor
required: false
description: ''
name: doctor
in: query
tags:
- Clinical
x-permissions:
- clinical-notes
- settings
x-practice-access: '"share_patients" need to be set for data access among practice'
security:
- drchrono_oauth2:
- clinical:read
- clinical:write
- settings:read
- settings:write
operationId: custom_appointment_fields_list
description: Retrieve or search custom appointment fields
/api/lab_orders/{id}:
put:
responses:
'204':
content: {}
description: No Content
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: string
description: ''
title: ''
required: true
name: id
in: path
- schema:
type: string
description: ''
title: since
required: false
description: ''
name: since
in: query
- schema:
type: integer
description: ''
title: doctor
required: false
description: ''
name: doctor
in: query
tags:
- Clinical
x-permissions: []
x-practice-access: '"share_patients" need to be set for data access among practice'
security:
- drchrono_oauth2:
- labs:read
- labs:write
operationId: lab_orders_update
description: Update an existing lab order
patch:
responses:
'204':
content: {}
description: No Content
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: string
description: ''
title: ''
required: true
name: id
in: path
- schema:
type: string
description: ''
title: since
required: false
description: ''
name: since
in: query
- schema:
type: integer
description: ''
title: doctor
required: false
description: ''
name: doctor
in: query
tags:
- Clinical
x-permissions: []
x-practice-access: '"share_patients" need to be set for data access among practice'
security:
- drchrono_oauth2:
- labs:read
- labs:write
operationId: lab_orders_partial_update
description: Update an existing lab order
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LabOrder'
description: OK
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: string
description: ''
title: ''
required: true
name: id
in: path
- schema:
type: string
description: ''
title: since
required: false
description: ''
name: since
in: query
- schema:
type: integer
description: ''
title: doctor
required: false
description: ''
name: doctor
in: query
tags:
- Clinical
x-permissions: []
x-practice-access: '"share_patients" need to be set for data access among practice'
security:
- drchrono_oauth2:
- labs:read
- labs:write
operationId: lab_orders_read
description: Retrieve an existing lab order
delete:
responses:
'204':
content: {}
description: No Content
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: string
description: ''
title: ''
required: true
name: id
in: path
- schema:
type: string
description: ''
title: since
required: false
description: ''
name: since
in: query
- schema:
type: integer
description: ''
title: doctor
required: false
description: ''
name: doctor
in: query
tags:
- Clinical
x-permissions: []
x-practice-access: '"share_patients" need to be set for data access among practice'
security:
- drchrono_oauth2:
- labs:read
- labs:write
operationId: lab_orders_delete
description: Delete an existing lab order
/api/clinical_notes_list:
post:
responses:
'201':
content:
application/json:
schema:
properties:
status:
type: string
description: Status of the request. Upon creation this will be "In progress"
title: status
uuid:
type: string
description: UUID of the batch of patients.
title: uuid
description:
type: string
description: Contains link to load the batch by UUID
description: Created
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: string
title: order_by
required: false
description: 'Order results by a specific field. Valid options include [id, updated_at]. Default: id.'
name: order_by
in: query
- schema:
type: integer
description: Number of results to return per page. Value between 1 and 1000.
title: Page size
required: false
name: page_size
in: query
- schema:
type: integer
description: Number of page to return. Value between 1 and max number of pages in result set.
title: Page
required: false
name: page
in: query
- schema:
type: integer
description: Patient ID filter
title: patient
required: false
description: Patient ID filter
name: patient
in: query
- schema:
type: integer
description: Office ID filter
title: office
required: false
description: Office ID filter
name: office
in: query
- schema:
type: integer
description: Doctor ID filter
title: doctor
required: false
description: Doctor ID filter
name: doctor
in: query
- schema:
type: string
description: Inclusive lower bound on clinical note updated/created time.
title: since
required: false
description: Inclusive lower bound on clinical note updated/created time.
name: since
in: query
- schema:
type: string
description: Inclusive bounded date range on appointment scheduled date
title: date_range
required: false
description: Inclusive bounded date range on appointment scheduled date
name: date_range
in: query
- schema:
type: string
description: Filter on specific appointment scheduled date
title: date
required: false
description: Filter on specific appointment scheduled date
name: date
in: query
- schema:
type: boolean
description: When `true` includes yellow notes
title: verbose
required: false
description: When `true` includes yellow notes
name: verbose
in: query
tags:
- Clinical
x-permissions:
- clinical-notes
x-practice-access: '"share_clinical_templates" need to be set for data access among practice'
security:
- drchrono_oauth2:
- clinical:read
- clinical:write
operationId: clinical_notes_list_create
description: 'Create clinical note list request. Use the UUID returned in the response to retrieve the batch of records. Results returned in order of ID.
'
get:
responses:
'200':
content:
application/json:
schema:
title: ''
type: object
description: Paginated Result
properties:
status:
type: string
description: 'Status of the request. Possible values are "Complete" or "In progress".
'
title: status
pagination:
properties:
count:
type: int
description: the count of all records in the result set.
title: count
pages:
type: int
description: the total pages of all pages in the result set.
title: pages
page:
type: int
description: the current page (starting with 1) in the total pages.
title: page
type: object
description: information on the total pages, current page and total count.
title: pagination
results:
items:
$ref: '#/components/schemas/ClinicalNote'
type: array
description: result data. only presented when the status is "Complete"
title: data
uuid:
type: string
description: UUID of the batch of patients.
title: uuid
description: OK
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content:
application/json:
schema:
$ref: '#/components/schemas/AsyncResourceError'
description: Internal Server Error
parameters:
- schema:
type: string
description: ''
title: uuid
required: false
description: 'The UUID token for the batch of clinical notes. This is returned in the response of the `create` endpoint.
'
name: uuid
in: query
tags:
- Clinical
x-permissions:
- clinical-notes
x-practice-access: '"share_patients" need to be set for data access among practice'
security:
- drchrono_oauth2:
- clinical:read
operationId: clinical_notes_list_list
description: Retrieve or search clinical notes in batches. Results returned in order of ID.
/api/custom_vitals/{id}:
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/CustomVitalType'
description: OK
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: string
description: ''
title: ''
required: true
name: id
in: path
- schema:
type: integer
description: ''
title: doctor
required: false
description: ''
name: doctor
in: query
tags:
- Clinical
x-permissions:
- clinical-notes
- settings
x-practice-access: '"share_clinical_templates" need to be set for data access among practice'
security:
- drchrono_oauth2:
- clinical:read
- clinical:write
- settings:read
- settings:write
operationId: custom_vitals_read
description: Retrieve an existing custom vital type
/api/sublabs/{id}:
put:
responses:
'204':
content: {}
description: No Content
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: integer
description: A unique integer value identifying this lab vendor location.
title: ID
required: true
name: id
in: path
tags:
- Clinical
x-permissions: []
x-practice-access: Data access among practice is available
security:
- drchrono_oauth2:
- labs:read
- labs:write
operationId: sublabs_update
description: Update an existing sub vendor
patch:
responses:
'204':
content: {}
description: No Content
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: integer
description: A unique integer value identifying this lab vendor location.
title: ID
required: true
name: id
in: path
tags:
- Clinical
x-permissions: []
x-practice-access: Data access among practice is available
security:
- drchrono_oauth2:
- labs:read
- labs:write
operationId: sublabs_partial_update
description: Update an existing sub vendor
get:
responses:
'200':
content:
application/json:
schema:
$ref: '#/components/schemas/LabVendorLocation'
description: OK
'405':
content: {}
description: Method Not Allowed
'404':
content: {}
description: Not Found
'403':
content: {}
description: Permission Denied
'401':
content: {}
description: Unauthorized
'400':
content: {}
description: Bad Request
'500':
content: {}
description: Internal Server Error
parameters:
- schema:
type: integer
description: A unique integer value identifying this lab vendor location.
title: ID
required: true
name: id
in: path
tags:
- Clinical
x-permissions: []
x-practice-access: Data access among practice is available
security:
- drchrono_oauth2:
- labs:read
- labs:write
operationId: sublabs_read
description: Retrieve an existing sub vendor
delete:
responses:
'204':
content: {}
description: No Content
'405':
content: {}
description: Method Not Allowed
'404':
# --- truncated at 32 KB (623 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/drchrono/refs/heads/main/openapi/drchrono-clinical-api-openapi.yml