API Reference

Appointments

Schedule and manage appointments with the Jump EHR Appointments API. Create, update, cancel, and list bookings.

The Appointments API allows you to manage patient appointments in Jump EHR. Appointments connect patients with clinicians at specific times and locations.

Status changes must use the cancel action endpoint. You cannot change status via PATCH.

GET
/appointments

Authorization

BearerApiKey
AuthorizationBearer <token>

API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.

In: header

Query Parameters

limit?integer

Maximum number of records to return (1–100, default 20)

Range1 <= value <= 100
Default20
offset?integer

Number of records to skip (default 0)

Range0 <= value
Default0
patient_id?string
Formatuuid
clinician_id?string

Maps to clinician_profile_id

Formatuuid
status?string

Value in

  • "pending_approval"
  • "confirmed"
  • "pending"
  • "scheduled"
  • "in_progress"
  • "completed"
  • "no_show"
  • "rejected"
  • "cancelled"
status_in?string

Comma-separated list of statuses

date_gte?string

Filter start_time >= value

Formatdate-time
date_lte?string

Filter start_time <= value

Formatdate-time
appointment_type_id?string
location_id?string
Formatuuid

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/appointments"
{  "data": [    {      "id": "123e4567-e89b-12d3-a456-426614174006",      "patient_id": "P-100428",      "clinician_profile_id": "123e4567-e89b-12d3-a456-426614174007",      "title": "Ms",      "description": "Example description",      "start_time": "2026-01-15T10:30:00Z",      "end_time": "2026-01-15T10:30:00Z",      "status": "pending_approval",      "appointment_type_id": "123e4567-e89b-12d3-a456-426614174008",      "location_id": "123e4567-e89b-12d3-a456-426614174009",      "is_remote": true,      "remote_channel": "video",      "video_link": "Example video link",      "video_provider": "Example video provider",      "duration_minutes": 1,      "attendee_email": "Example attendee email",      "attendee_name": "Example attendee name",      "meeting_url": "https://example.com/resource",      "meeting_started_at": "2026-01-15T10:30:00Z",      "meeting_ended_at": "2026-01-15T10:30:00Z",      "attendance_status": "Example attendance status",      "arrived_at": "2026-01-15T10:30:00Z",      "sent_in": "2026-01-15T10:30:00Z",      "left_at": "2026-01-15T10:30:00Z",      "cancellation_reason": "Example cancellation reason",      "rejection_reason": "Example rejection reason",      "reschedule_reason": "Example reschedule reason",      "booking_source": "Example booking source",      "is_guest_booking": true,      "guest_first_name": "Example guest first name",      "guest_last_name": "Example guest last name",      "guest_dob": "2026-01-15",      "guest_mobile": "Example guest mobile",      "guest_relationship": "Example guest relationship",      "is_team_booking": true,      "episode_id": "123e4567-e89b-12d3-a456-426614174010",      "patient_timezone": "Example patient timezone",      "booked_by_patient_id": "123e4567-e89b-12d3-a456-426614174011",      "created_at": "2026-01-15T10:30:00Z",      "updated_at": "2026-01-15T10:30:00Z"    }  ],  "meta": {    "limit": 20,    "next_offset": 1,    "has_more": true,    "request_id": "req_abc123"  }}

Try-it is disabled for POST /appointments

This operation writes data. Running it from these docs would target the production API and change a real record. Copy the request sample and run it against staging first.

Authorization

BearerApiKey
AuthorizationBearer <token>

API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.

In: header

Header Parameters

Idempotency-Key?string

Optional UUID for request deduplication. Same key + same body returns the cached response. Same key + different body returns 409 CONFLICT. Keys are scoped to your organisation and endpoint, and expire after 24 hours.

Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/appointments" \  -H "Content-Type: application/json" \  -d '{    "title": "string",    "start_time": "2019-08-24T14:15:22Z",    "end_time": "2019-08-24T14:15:22Z"  }'
{  "data": {    "id": "123e4567-e89b-12d3-a456-426614174006",    "patient_id": "P-100428",    "clinician_profile_id": "123e4567-e89b-12d3-a456-426614174007",    "title": "Ms",    "description": "Example description",    "start_time": "2026-01-15T10:30:00Z",    "end_time": "2026-01-15T10:30:00Z",    "status": "pending_approval",    "appointment_type_id": "123e4567-e89b-12d3-a456-426614174008",    "location_id": "123e4567-e89b-12d3-a456-426614174009",    "is_remote": true,    "remote_channel": "video",    "video_link": "Example video link",    "video_provider": "Example video provider",    "duration_minutes": 1,    "attendee_email": "Example attendee email",    "attendee_name": "Example attendee name",    "meeting_url": "https://example.com/resource",    "meeting_started_at": "2026-01-15T10:30:00Z",    "meeting_ended_at": "2026-01-15T10:30:00Z",    "attendance_status": "Example attendance status",    "arrived_at": "2026-01-15T10:30:00Z",    "sent_in": "2026-01-15T10:30:00Z",    "left_at": "2026-01-15T10:30:00Z",    "cancellation_reason": "Example cancellation reason",    "rejection_reason": "Example rejection reason",    "reschedule_reason": "Example reschedule reason",    "booking_source": "Example booking source",    "is_guest_booking": true,    "guest_first_name": "Example guest first name",    "guest_last_name": "Example guest last name",    "guest_dob": "2026-01-15",    "guest_mobile": "Example guest mobile",    "guest_relationship": "Example guest relationship",    "is_team_booking": true,    "episode_id": "123e4567-e89b-12d3-a456-426614174010",    "patient_timezone": "Example patient timezone",    "booked_by_patient_id": "123e4567-e89b-12d3-a456-426614174011",    "created_at": "2026-01-15T10:30:00Z",    "updated_at": "2026-01-15T10:30:00Z"  },  "meta": {    "request_id": "req_abc123"  }}
GET
/appointments/{id}

Authorization

BearerApiKey
AuthorizationBearer <token>

API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.

In: header

Path Parameters

id*string
Formatuuid

Response Body

application/json

application/json

application/json

application/json

curl -X GET "https://example.com/appointments/497f6eca-6276-4993-bfeb-53cbbbba6f08"
{  "data": {    "id": "123e4567-e89b-12d3-a456-426614174006",    "patient_id": "P-100428",    "clinician_profile_id": "123e4567-e89b-12d3-a456-426614174007",    "title": "Ms",    "description": "Example description",    "start_time": "2026-01-15T10:30:00Z",    "end_time": "2026-01-15T10:30:00Z",    "status": "pending_approval",    "appointment_type_id": "123e4567-e89b-12d3-a456-426614174008",    "location_id": "123e4567-e89b-12d3-a456-426614174009",    "is_remote": true,    "remote_channel": "video",    "video_link": "Example video link",    "video_provider": "Example video provider",    "duration_minutes": 1,    "attendee_email": "Example attendee email",    "attendee_name": "Example attendee name",    "meeting_url": "https://example.com/resource",    "meeting_started_at": "2026-01-15T10:30:00Z",    "meeting_ended_at": "2026-01-15T10:30:00Z",    "attendance_status": "Example attendance status",    "arrived_at": "2026-01-15T10:30:00Z",    "sent_in": "2026-01-15T10:30:00Z",    "left_at": "2026-01-15T10:30:00Z",    "cancellation_reason": "Example cancellation reason",    "rejection_reason": "Example rejection reason",    "reschedule_reason": "Example reschedule reason",    "booking_source": "Example booking source",    "is_guest_booking": true,    "guest_first_name": "Example guest first name",    "guest_last_name": "Example guest last name",    "guest_dob": "2026-01-15",    "guest_mobile": "Example guest mobile",    "guest_relationship": "Example guest relationship",    "is_team_booking": true,    "episode_id": "123e4567-e89b-12d3-a456-426614174010",    "patient_timezone": "Example patient timezone",    "booked_by_patient_id": "123e4567-e89b-12d3-a456-426614174011",    "created_at": "2026-01-15T10:30:00Z",    "updated_at": "2026-01-15T10:30:00Z"  },  "meta": {    "request_id": "req_abc123"  }}

Try-it is disabled for PATCH /appointments/{id}

This operation writes data. Running it from these docs would target the production API and change a real record. Copy the request sample and run it against staging first.

Authorization

BearerApiKey
AuthorizationBearer <token>

API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.

In: header

Path Parameters

id*string
Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Partial update. status is excluded — use action endpoints for state transitions.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/appointments/497f6eca-6276-4993-bfeb-53cbbbba6f08" \  -H "Content-Type: application/json" \  -d '{}'
{  "data": {    "id": "123e4567-e89b-12d3-a456-426614174006",    "patient_id": "P-100428",    "clinician_profile_id": "123e4567-e89b-12d3-a456-426614174007",    "title": "Ms",    "description": "Example description",    "start_time": "2026-01-15T10:30:00Z",    "end_time": "2026-01-15T10:30:00Z",    "status": "pending_approval",    "appointment_type_id": "123e4567-e89b-12d3-a456-426614174008",    "location_id": "123e4567-e89b-12d3-a456-426614174009",    "is_remote": true,    "remote_channel": "video",    "video_link": "Example video link",    "video_provider": "Example video provider",    "duration_minutes": 1,    "attendee_email": "Example attendee email",    "attendee_name": "Example attendee name",    "meeting_url": "https://example.com/resource",    "meeting_started_at": "2026-01-15T10:30:00Z",    "meeting_ended_at": "2026-01-15T10:30:00Z",    "attendance_status": "Example attendance status",    "arrived_at": "2026-01-15T10:30:00Z",    "sent_in": "2026-01-15T10:30:00Z",    "left_at": "2026-01-15T10:30:00Z",    "cancellation_reason": "Example cancellation reason",    "rejection_reason": "Example rejection reason",    "reschedule_reason": "Example reschedule reason",    "booking_source": "Example booking source",    "is_guest_booking": true,    "guest_first_name": "Example guest first name",    "guest_last_name": "Example guest last name",    "guest_dob": "2026-01-15",    "guest_mobile": "Example guest mobile",    "guest_relationship": "Example guest relationship",    "is_team_booking": true,    "episode_id": "123e4567-e89b-12d3-a456-426614174010",    "patient_timezone": "Example patient timezone",    "booked_by_patient_id": "123e4567-e89b-12d3-a456-426614174011",    "created_at": "2026-01-15T10:30:00Z",    "updated_at": "2026-01-15T10:30:00Z"  },  "meta": {    "request_id": "req_abc123"  }}

Try-it is disabled for POST /appointments/{id}/cancel

This operation writes data. Running it from these docs would target the production API and change a real record. Copy the request sample and run it against staging first.

Authorization

BearerApiKey
AuthorizationBearer <token>

API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.

In: header

Path Parameters

id*string
Formatuuid

Request Body

application/json

TypeScript Definitions

Use the request body type in TypeScript.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X POST "https://example.com/appointments/497f6eca-6276-4993-bfeb-53cbbbba6f08/cancel" \  -H "Content-Type: application/json" \  -d '{}'
{  "data": {    "id": "123e4567-e89b-12d3-a456-426614174000",    "status": "cancelled",    "title": "Check-up"  },  "meta": {    "request_id": "req_abc123",    "action": "cancelled",    "performed_at": "2026-03-25T10:00:00Z",    "performed_by": "key_abc123"  }}