API Documentation is in beta. Report issues to developers@jump.health
API Reference
Appointments

Appointments

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

Endpoints

MethodEndpointDescription
GET/appointmentsList all appointments
GET/appointments/{id}Retrieve an appointment
POST/appointmentsCreate an appointment
PATCH/appointments/{id}Update an appointment

Required scopes: read_appointments for GET requests, write_appointments for POST/PATCH requests.

The Appointment Object

{
  "id": "apt_123e4567-e89b-12d3-a456-426614174000",
  "patient_id": "pat_456e7890-e89b-12d3-a456-426614174111",
  "clinician_profile_id": "cli_789a0123-e89b-12d3-a456-426614174222",
  "appointment_type_id": "type_012b3456-e89b-12d3-a456-426614174333",
  "location_id": "loc_345c6789-e89b-12d3-a456-426614174444",
  "title": "Follow-up Consultation",
  "start_time": "2025-01-20T14:00:00Z",
  "end_time": "2025-01-20T14:30:00Z",
  "status": "confirmed",
  "is_remote": false,
  "attendee_name": "Sarah Johnson",
  "attendee_email": "sarah@example.com",
  "attendee_phone": "+44 7700 900123",
  "notes": "Follow-up for blood test results",
  "created_at": "2025-01-15T10:30:00Z",
  "updated_at": "2025-01-15T10:30:00Z"
}

Attributes

FieldTypeDescription
idstringUnique identifier (UUID)
patient_idstringAssociated patient ID
clinician_profile_idstringAssigned clinician ID
appointment_type_idstringAppointment type ID
location_idstringLocation ID (null for remote)
titlestringAppointment title/description
start_timestringISO 8601 start time
end_timestringISO 8601 end time
statusstringStatus (see below)
is_remotebooleanWhether appointment is virtual
attendee_namestringAttendee's name
attendee_emailstringAttendee's email
attendee_phonestringAttendee's phone
notesstringAppointment notes
created_atstringISO 8601 creation timestamp
updated_atstringISO 8601 last update timestamp

Status Values

StatusDescription
pendingAwaiting confirmation
confirmedConfirmed appointment
cancelledCancelled by patient or clinic
completedAppointment has taken place
no_showPatient did not attend

List Appointments

GET /appointments

Retrieve a paginated list of appointments.

Query Parameters

ParameterTypeDefaultDescription
limitinteger100Number of records to return (max 100)
offsetinteger0Number of records to skip
patient_idstring-Filter by patient ID
clinician_idstring-Filter by clinician ID
start_datestring-Filter by start date (YYYY-MM-DD)
end_datestring-Filter by end date (YYYY-MM-DD)
statusstring-Filter by status

Request

curl -X GET "https://app.usejump.co.uk/functions/v1/api-v1/appointments?start_date=2025-01-20&end_date=2025-01-27&limit=10" \
  -H "Authorization: Bearer pk_live_your_api_key" \
  -H "Content-Type: application/json"

Response

{
  "data": [
    {
      "id": "apt_123e4567-e89b-12d3-a456-426614174000",
      "patient_id": "pat_456e7890-e89b-12d3-a456-426614174111",
      "clinician_profile_id": "cli_789a0123-e89b-12d3-a456-426614174222",
      "appointment_type_id": "type_012b3456-e89b-12d3-a456-426614174333",
      "title": "Follow-up Consultation",
      "start_time": "2025-01-20T14:00:00Z",
      "end_time": "2025-01-20T14:30:00Z",
      "status": "confirmed",
      "is_remote": false,
      "attendee_name": "Sarah Johnson",
      "created_at": "2025-01-15T10:30:00Z"
    }
  ],
  "pagination": {
    "total": 1,
    "limit": 10,
    "offset": 0,
    "has_more": false
  }
}

Retrieve an Appointment

GET /appointments/{id}

Retrieve a single appointment by ID.

Path Parameters

ParameterTypeDescription
idstringThe appointment UUID

Request

curl -X GET "https://app.usejump.co.uk/functions/v1/api-v1/appointments/apt_123e4567-e89b-12d3-a456-426614174000" \
  -H "Authorization: Bearer pk_live_your_api_key" \
  -H "Content-Type: application/json"

Response

{
  "data": {
    "id": "apt_123e4567-e89b-12d3-a456-426614174000",
    "patient_id": "pat_456e7890-e89b-12d3-a456-426614174111",
    "clinician_profile_id": "cli_789a0123-e89b-12d3-a456-426614174222",
    "appointment_type_id": "type_012b3456-e89b-12d3-a456-426614174333",
    "location_id": "loc_345c6789-e89b-12d3-a456-426614174444",
    "title": "Follow-up Consultation",
    "start_time": "2025-01-20T14:00:00Z",
    "end_time": "2025-01-20T14:30:00Z",
    "status": "confirmed",
    "is_remote": false,
    "attendee_name": "Sarah Johnson",
    "attendee_email": "sarah@example.com",
    "attendee_phone": "+44 7700 900123",
    "notes": "Follow-up for blood test results",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z"
  }
}

Create an Appointment

POST /appointments

Create a new appointment. Consider using the booking flow for patient-facing scheduling.

For patient self-booking, use the Holds API to temporarily reserve a slot before confirming.

Request Body

FieldTypeRequiredDescription
patient_idstringYesPatient ID
start_timestringYesISO 8601 start time
end_timestringYesISO 8601 end time
clinician_profile_idstringNoClinician ID
appointment_type_idstringNoAppointment type ID
location_idstringNoLocation ID
titlestringNoAppointment title
is_remotebooleanNoWhether virtual (default: false)
attendee_namestringNoAttendee's name
attendee_emailstringNoAttendee's email
attendee_phonestringNoAttendee's phone
notesstringNoAppointment notes

Request

curl -X POST "https://app.usejump.co.uk/functions/v1/api-v1/appointments" \
  -H "Authorization: Bearer pk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "patient_id": "pat_456e7890-e89b-12d3-a456-426614174111",
    "clinician_profile_id": "cli_789a0123-e89b-12d3-a456-426614174222",
    "appointment_type_id": "type_012b3456-e89b-12d3-a456-426614174333",
    "start_time": "2025-01-25T10:00:00Z",
    "end_time": "2025-01-25T10:30:00Z",
    "title": "Initial Consultation",
    "attendee_name": "Sarah Johnson",
    "attendee_email": "sarah@example.com"
  }'

Response

{
  "data": {
    "id": "apt_555e6666-e89b-12d3-a456-426614174555",
    "patient_id": "pat_456e7890-e89b-12d3-a456-426614174111",
    "clinician_profile_id": "cli_789a0123-e89b-12d3-a456-426614174222",
    "appointment_type_id": "type_012b3456-e89b-12d3-a456-426614174333",
    "location_id": null,
    "title": "Initial Consultation",
    "start_time": "2025-01-25T10:00:00Z",
    "end_time": "2025-01-25T10:30:00Z",
    "status": "pending",
    "is_remote": false,
    "attendee_name": "Sarah Johnson",
    "attendee_email": "sarah@example.com",
    "attendee_phone": null,
    "notes": null,
    "created_at": "2025-01-15T12:00:00Z",
    "updated_at": "2025-01-15T12:00:00Z"
  }
}

Update an Appointment

PATCH /appointments/{id}

Update an existing appointment. Only include fields you want to change.

Path Parameters

ParameterTypeDescription
idstringThe appointment UUID

Request Body

All fields from the create endpoint are accepted, plus:

FieldTypeDescription
statusstringUpdate appointment status

Request

curl -X PATCH "https://app.usejump.co.uk/functions/v1/api-v1/appointments/apt_555e6666-e89b-12d3-a456-426614174555" \
  -H "Authorization: Bearer pk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "confirmed",
    "notes": "Patient confirmed via phone"
  }'

Response

{
  "data": {
    "id": "apt_555e6666-e89b-12d3-a456-426614174555",
    "patient_id": "pat_456e7890-e89b-12d3-a456-426614174111",
    "clinician_profile_id": "cli_789a0123-e89b-12d3-a456-426614174222",
    "appointment_type_id": "type_012b3456-e89b-12d3-a456-426614174333",
    "title": "Initial Consultation",
    "start_time": "2025-01-25T10:00:00Z",
    "end_time": "2025-01-25T10:30:00Z",
    "status": "confirmed",
    "is_remote": false,
    "attendee_name": "Sarah Johnson",
    "attendee_email": "sarah@example.com",
    "notes": "Patient confirmed via phone",
    "created_at": "2025-01-15T12:00:00Z",
    "updated_at": "2025-01-15T12:30:00Z"
  }
}

Errors

StatusErrorDescription
400Bad RequestInvalid request body or parameters
401UnauthorizedInvalid or missing API key
403ForbiddenMissing required scope
404Not FoundAppointment not found
409ConflictScheduling conflict (time slot unavailable)
429Too Many RequestsRate limit exceeded

Error Response

{
  "error": "Conflict",
  "details": "The requested time slot is not available",
  "request_id": "req_abc123"
}

Related Resources