Jane JDP API
Jane JDP API from Jane — 31 path(s) described in OpenAPI.
Jane JDP API from Jane — 31 path(s) described in OpenAPI.
# Harvested + merged from the per-operation OpenAPI 3.1.0 definitions embedded in
# each Jane Developer Platform ReadMe reference page (developers.jane.app/reference/*.md).
# generated: '2026-07-24' method: searched
# source: https://developers.jane.app/reference (per-endpoint embedded OpenAPI blocks)
openapi: 3.1.0
info:
title: JDP API
description: 'Open API specification for the JDP API
## Rate Limits
All JDP API endpoints have a rate limit of **100 requests per minute** per endpoint per clinic.
Rate limit information is returned in response headers:
- `X-Throttle-Match`: Rate limit identifier
- `Retry-After`: Number of seconds to wait before retrying (when rate limited)
When rate limits are exceeded, the API returns a 429 status code with a `Retry-After` header.
### Affected Endpoints:
- `/api/2026-01-01/treatments`
- `/api/2026-01-01/appointments`
- `/api/2026-01-01/locations`
- `/api/2026-01-01/disciplines`
- `/api/2026-01-01/patients`
- `/api/2026-01-01/staff_members`
- `/api/2026-01-01/company`
- `/api/2026-01-01/medical-record/medications`'
version: '2026-01-01'
servers:
- url: https://jdpdocsdemo.jane.qa
description: Partner playground clinic
security:
- OAuth2: []
tags:
- name: Appointments
- name: CarePlans
- name: Catalog
- name: Company
- name: Disciplines
- name: DocumentUploads
- name: Extensions
- name: Locations
- name: Medications
- name: Observations
- name: Patients
- name: StaffMembers
- name: Treatments
- name: Webhooks
paths:
/api/2026-01-01/medical-record/care-plans:
post:
operationId: createCarePlan
summary: Create a care plan
description: Create a care plan
security:
- OAuth2:
- care_plans:create
tags:
- CarePlans
requestBody:
description: The care plan to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/create_care_plan_request'
responses:
'201':
description: The care plan was created
content:
application/json:
schema:
$ref: '#/components/schemas/care_plan'
'400':
description: The care plan was not created
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
get:
operationId: listCarePlans
summary: List care plans
description: List medical record care plans for the current user's accessible patients.
security:
- OAuth2:
- care_plans:read
tags:
- CarePlans
parameters:
- $ref: '#/components/parameters/page_limit'
- $ref: '#/components/parameters/page_cursor'
- name: sort
in: query
required: false
description: 'Comma-separated sort fields. Prefix with `-` for descending order (e.g. `-created_at`).
Allowed: created_at, updated_at'
schema:
type: string
example: -created_at
- name: patient_id[eq]
in: query
required: false
description: Filter by patient public ID
schema:
type: string
format: uuid
- name: category[eq]
in: query
required: false
description: 'Filter by category. Allowed values: treatment_plan'
schema:
type: string
enum:
- treatment_plan
- name: encounter_id[eq]
in: query
required: false
description: Filter by encounter public ID
schema:
type: string
format: uuid
responses:
'200':
description: List of care plans
content:
application/json:
schema:
$ref: '#/components/schemas/care_plans_response'
'400':
description: Invalid request parameters
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
'401':
description: Unauthorized
'403':
description: Forbidden - insufficient permissions
/api/2026-01-01/medical-record/care-plans/{care_plan_id}/activities:
post:
operationId: createCarePlanActivity
summary: Create a care plan activity
description: Create a care plan activity
security:
- OAuth2:
- care_plans:create
parameters:
- name: care_plan_id
in: path
required: true
description: The ID of the care plan
schema:
type: string
tags:
- CarePlans
requestBody:
description: The care plan activity to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/create_care_plan_activity_request'
responses:
'201':
description: The care plan activity was created
content:
application/json:
schema:
$ref: '#/components/schemas/care_plan_activity'
'400':
description: The care plan activity was not created
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
/api/2025-02-28-beta/extensions:
post:
operationId: createExtension
summary: Create Extension
description: Creates a new extension
tags:
- Extensions
security:
- BearerAuth: []
requestBody:
description: Extension data to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/extension_request'
responses:
'201':
description: Extension created successfully
content:
application/json:
schema:
$ref: '#/components/schemas/extension'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/unauthorized_error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/forbidden_error'
'422':
description: Unprocessable entity
content:
application/json:
schema:
$ref: '#/components/schemas/unprocessable_entity_error'
get:
operationId: getExtensions
summary: List Extensions
description: Retrieves a list of extensions
tags:
- Extensions
security:
- BearerAuth: []
responses:
'200':
description: List of extensions
content:
application/json:
schema:
$ref: '#/components/schemas/extensions_response'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/unauthorized_error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/forbidden_error'
/api/2026-01-01/medical-record/medications:
post:
operationId: createMedication
summary: Create a medication
description: Create a new medication record for a patient
security:
- OAuth2:
- medications:create
tags:
- Medications
requestBody:
description: The medication to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/create_medication_request'
responses:
'201':
description: The medication was created
content:
application/json:
schema:
$ref: '#/components/schemas/medication'
'400':
description: The medication was not created - validation error
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
'401':
description: Unauthorized
'403':
description: Forbidden - insufficient permissions
'404':
description: Patient not found
content:
application/json:
schema:
$ref: '#/components/schemas/not_found_error_response'
get:
operationId: listMedications
summary: List medications
description: List medications for the current user's accessible patients
security:
- OAuth2:
- medications:read
tags:
- Medications
parameters:
- name: page[limit]
in: query
required: false
description: Maximum number of items to return (default 50)
schema:
type: integer
default: 50
- name: page[cursor]
in: query
required: false
description: Cursor for pagination
schema:
type: string
- name: sort
in: query
required: false
description: Sort field (default created_at)
schema:
type: string
default: created_at
responses:
'200':
description: List of medications
content:
application/json:
schema:
$ref: '#/components/schemas/medications_response'
'401':
description: Unauthorized
'403':
description: Forbidden - insufficient permissions
/api/2026-01-01/medical-record/observations:
post:
operationId: createObservation
summary: Create an observation
description: Create an observation
security:
- OAuth2:
- observations:create
tags:
- Observations
requestBody:
description: The observation to create
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/create_observation_request'
responses:
'201':
description: The observation was created
content:
application/json:
schema:
$ref: '#/components/schemas/observation'
'400':
description: The observation was not created
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
get:
operationId: listObservations
summary: List observations
description: List medical record observations for the current user's accessible patients.
security:
- OAuth2:
- observations:read
tags:
- Observations
parameters:
- $ref: '#/components/parameters/page_limit'
- $ref: '#/components/parameters/page_cursor'
- name: sort
in: query
required: false
description: 'Comma-separated sort fields. Prefix with `-` for descending order (e.g. `-created_at`).
Allowed: created_at, updated_at, issued_at'
schema:
type: string
example: -created_at
- name: patient_id[eq]
in: query
required: false
description: Filter by patient public ID
schema:
type: string
format: uuid
- name: category[eq]
in: query
required: false
description: 'Filter by category. Allowed values: vital_signs, laboratory, exam'
schema:
type: string
enum:
- vital_signs
- laboratory
- exam
- name: encounter_id[eq]
in: query
required: false
description: Filter by encounter public ID
schema:
type: string
format: uuid
responses:
'200':
description: List of observations
content:
application/json:
schema:
$ref: '#/components/schemas/observations_response'
'400':
description: Invalid request parameters
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
'401':
description: Unauthorized
'403':
description: Forbidden - insufficient permissions
/api/2025-02-28-beta/extensions/{extension_id}:
delete:
operationId: deleteExtension
summary: Delete Extension
description: Deletes an extension
tags:
- Extensions
security:
- BearerAuth: []
parameters:
- name: extension_id
in: path
required: true
description: The ID of the extension
schema:
type: string
format: uuid
responses:
'200':
description: Extension deleted successfully
content:
application/json:
schema:
$ref: '#/components/schemas/extension_delete_response'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/unauthorized_error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/forbidden_error'
'404':
description: Extension not found
content:
application/json:
schema:
$ref: '#/components/schemas/not_found_error'
get:
operationId: getExtension
summary: Get Extension
description: Retrieves a specific extension by ID
tags:
- Extensions
security:
- BearerAuth: []
parameters:
- name: extension_id
in: path
required: true
description: The ID of the extension
schema:
type: string
format: uuid
responses:
'200':
description: Extension details
content:
application/json:
schema:
$ref: '#/components/schemas/extension'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/unauthorized_error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/forbidden_error'
'404':
description: Extension not found
content:
application/json:
schema:
$ref: '#/components/schemas/not_found_error'
put:
operationId: updateExtension
summary: Update Extension
description: Updates an existing extension
tags:
- Extensions
security:
- BearerAuth: []
parameters:
- name: extension_id
in: path
required: true
description: The ID of the extension
schema:
type: string
format: uuid
requestBody:
description: Extension data to update
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/extension_request'
responses:
'200':
description: Extension updated successfully
content:
application/json:
schema:
$ref: '#/components/schemas/extension'
'400':
description: Bad request
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/unauthorized_error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/forbidden_error'
'404':
description: Extension not found
content:
application/json:
schema:
$ref: '#/components/schemas/not_found_error'
'422':
description: Unprocessable entity
content:
application/json:
schema:
$ref: '#/components/schemas/unprocessable_entity_error'
/api/2026-01-01/webhooks/{webhook_id}:
delete:
operationId: deleteWebhook
summary: Deregister a webhook subscription
description: Permanently removes a webhook subscription. The partner will no longer receive events
for this subscription.
security:
- OAuth2:
- webhooks:delete
tags:
- Webhooks
parameters:
- name: webhook_id
in: path
required: true
description: The ID of the webhook subscription
schema:
type: string
format: uuid
responses:
'204':
description: The webhook subscription was deregistered
'401':
description: The request is not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/errors_message_response'
'403':
description: The authenticated partner does not have permission to deregister this webhook subscription
content:
application/json:
schema:
$ref: '#/components/schemas/errors_message_response'
'404':
description: The webhook subscription was not found
content:
application/json:
schema:
$ref: '#/components/schemas/errors_message_response'
'422':
description: The webhook subscription could not be deregistered due to validation errors
content:
application/json:
schema:
$ref: '#/components/schemas/errors_message_response'
'503':
description: The service is temporarily unavailable
get:
operationId: getWebhook
summary: Retrieve a webhook subscription
description: Returns the details of a single webhook subscription by ID.
security:
- OAuth2:
- webhooks:read
tags:
- Webhooks
parameters:
- name: webhook_id
in: path
required: true
description: The ID of the webhook subscription
schema:
type: string
format: uuid
responses:
'200':
description: The webhook subscription
content:
application/json:
schema:
$ref: '#/components/schemas/webhook-subscription-response'
'401':
description: The request is not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/errors_message_response'
'403':
description: The authenticated partner does not have permission to view this webhook subscription
content:
application/json:
schema:
$ref: '#/components/schemas/errors_message_response'
'404':
description: The webhook subscription was not found
content:
application/json:
schema:
$ref: '#/components/schemas/errors_message_response'
'503':
description: The service is temporarily unavailable
/api/2026-01-01/appointments/{appointment_id}:
get:
operationId: getAnAppointment
summary: Get an Appointment
description: Retrieve detailed appointment information using its unique identifier
tags:
- Appointments
security:
- OAuth2:
- appointments:read
parameters:
- name: appointment_id
in: path
required: true
description: The ID of the appointment
schema:
type: string
format: uuid
responses:
'200':
description: The appointment
content:
application/json:
schema:
$ref: '#/components/schemas/appointment'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/errors_message_response'
'404':
description: The appointment was not found
content:
application/json:
schema:
$ref: '#/components/schemas/errors_message_response'
'429':
description: Rate limit exceeded - 100 requests per minute per endpoint per clinic
headers:
X-Throttle-Match:
description: Rate limit identifier
schema:
type: string
example: marketing_api/ip/clinic
Retry-After:
description: Number of seconds to wait before retrying
schema:
type: integer
example: 60
content:
application/json:
schema:
$ref: '#/components/schemas/errors'
/api/2026-01-01/staff_members/{staff_member_id}:
get:
operationId: getAStaffMember
summary: Get a Staff Member
description: Retrieve detailed staff member using their unique identifier
tags:
- StaffMembers
security:
- OAuth2:
- staff_members:read
parameters:
- name: staff_member_id
in: path
required: true
description: The ID of the staff member
schema:
type: string
format: uuid
responses:
'200':
description: The staff member
content:
application/json:
schema:
$ref: '#/components/schemas/staff_member-2'
'400':
description: Bad Request
content:
application/json:
schema:
$ref: '#/components/schemas/errors_message_response'
'404':
description: The staff member was not found
content:
application/json:
schema:
$ref: '#/components/schemas/errors_message_response'
'429':
description: Rate limit exceeded - 100 requests per minute per endpoint per clinic
headers:
X-Throttle-Match:
description: Rate limit identifier
schema:
type: string
example: marketing_api/ip/clinic
Retry-After:
description: Number of seconds to wait before retrying
schema:
type: integer
example: 60
content:
application/json:
schema:
$ref: '#/components/schemas/errors'
/api/2026-01-01/medical-record/care-plans/{care_plan_id}:
get:
operationId: getCarePlan
summary: Get a care plan
description: Get a care plan by its ID
security:
- OAuth2:
- care_plans:read
tags:
- CarePlans
parameters:
- name: care_plan_id
in: path
required: true
description: The ID of the care plan
schema:
type: string
responses:
'200':
description: The care plan
content:
application/json:
schema:
$ref: '#/components/schemas/care_plan'
'404':
description: The care plan was not found
content:
application/json:
schema:
$ref: '#/components/schemas/not_found_error_response'
patch:
operationId: updateCarePlan
summary: Update a care plan
description: Update a care plan by its ID
security:
- OAuth2:
- care_plans:update
tags:
- CarePlans
parameters:
- name: care_plan_id
in: path
required: true
description: The ID of the care plan
schema:
type: string
requestBody:
description: The care plan to update
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/update_care_plan_request'
responses:
'200':
description: The care plan was updated
content:
application/json:
schema:
$ref: '#/components/schemas/care_plan'
'400':
description: The care plan was not updated
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
'404':
description: The care plan was not found
content:
application/json:
schema:
$ref: '#/components/schemas/not_found_error_response'
'422':
description: The care plan validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
/api/2026-01-01/medical-record/care-plans/{care_plan_id}/activities/{care_plan_activity_id}:
get:
operationId: getCarePlanActivity
summary: Get a care plan activity
description: Get a care plan activity by its ID
security:
- OAuth2:
- care_plans:read
tags:
- CarePlans
parameters:
- name: care_plan_id
in: path
required: true
description: The ID of the care plan
schema:
type: string
- name: care_plan_activity_id
in: path
required: true
description: The ID of the care plan activity
schema:
type: string
responses:
'200':
description: The care plan activity
content:
application/json:
schema:
$ref: '#/components/schemas/care_plan_activity'
'404':
description: The care plan activity was not found
content:
application/json:
schema:
$ref: '#/components/schemas/not_found_error_response'
patch:
operationId: updateCarePlanActivity
summary: Update a care plan activity
description: Update a care plan activity by its ID
security:
- OAuth2:
- care_plans:update
tags:
- CarePlans
parameters:
- name: care_plan_id
in: path
required: true
description: The ID of the care plan
schema:
type: string
- name: care_plan_activity_id
in: path
required: true
description: The ID of the care plan activity
schema:
type: string
requestBody:
description: The care plan activity to update
required: true
content:
application/json:
schema:
$ref: '#/components/schemas/update_care_plan_activity_request'
responses:
'200':
description: The care plan activity was updated
content:
application/json:
schema:
$ref: '#/components/schemas/care_plan_activity'
'400':
description: The care plan activity was not updated
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
'404':
description: The care plan activity was not found
content:
application/json:
schema:
$ref: '#/components/schemas/not_found_error_response'
'422':
description: The care plan activity validation failed
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
/api/2025-02-28-beta/catalog/extensions/{id}:
get:
operationId: getCatalogExtension
summary: Get Catalog Extension
description: Retrieves a specific extension from the catalog
tags:
- Catalog
security:
- BearerAuth: []
parameters:
- name: id
in: path
required: true
description: Extension ID
schema:
type: string
format: uuid
responses:
'200':
description: Catalog extension details
content:
application/json:
schema:
$ref: '#/components/schemas/catalog_extension'
'401':
description: Unauthorized
content:
application/json:
schema:
$ref: '#/components/schemas/unauthorized_error'
'403':
description: Forbidden
content:
application/json:
schema:
$ref: '#/components/schemas/forbidden_error'
'404':
description: Not Found
content:
application/json:
schema:
$ref: '#/components/schemas/not_found_error'
/api/2025-02-28-beta/catalog/extensions:
get:
operationId: getCatalogExtensions
summary: Get Catalog Extensions
description: Retrieves the catalog with all available approved extensions
tags:
- Catalog
responses:
'200':
description: List of catalog extensions with pagination metadata
content:
application/json:
schema:
$ref: '#/components/schemas/catalog_extensions_response'
/api/2026-01-01/company:
get:
operationId: getCompany
summary: Get details about the company
description: Retrieve details about the company
tags:
- Company
security:
- OAuth2:
- companies:read
responses:
'200':
description: The company details
content:
application/json:
schema:
$ref: '#/components/schemas/company'
'400':
description: The request is invalid
content:
application/json:
schema:
$ref: '#/components/schemas/invalid_request_error'
'401':
description: The request is not authorized
content:
application/json:
schema:
$ref: '#/components/schemas/unauthorized_error'
'404':
description: The company was not found
content:
application/json:
schema:
$ref: '#/components/schemas/not_found_error'
'429':
description: Rate limit exceeded - 100 requests per minute per endpoint per clinic
headers:
X-Throttle-Match:
description: Rate limit identifier
schema:
type: string
example: marketing_api/ip/clinic
Retry-After:
description: Number of seconds to wait before retrying
schema:
type: integer
example: 60
content:
application/json:
schema:
$ref: '#/components/schemas/errors'
/api/2026-01-01/disciplines/{discipline_id}:
get:
operationId: getDiscipline
summary: Get a Discipline
description: Get a Discipline by its ID
tags:
- Disciplines
security:
- OAuth2:
- disciplines:read
parameters:
- name: discipline_id
in: path
required: true
description: The Id of the discipline
schema:
type: string
format: uuid
responses:
'200':
description: The discipline
content:
application/json:
schema:
$ref: '#/components/schemas/discipline'
'400':
description: Invalid request parameters
content:
application/json:
schema:
$ref: '#/components/schemas/bad_request_error_response'
'404':
description: The discipline was not found
# --- truncated at 32 KB (150 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/jane-app/refs/heads/main/openapi/jane-app-jdp-openapi.yml