API Reference
Patients

Patients

The Patients API allows you to manage patient records in Jump EHR. Patients are the core resource that other clinical data (episodes, appointments, questionnaires) relates to.

Endpoints

MethodEndpointDescription
GET/patientsList patients
GET/patients/{id}Retrieve a patient
POST/patientsCreate a patient
PATCH/patients/{id}Update a patient
GET/patients/{id}/observationsPatient observations (longitudinal)
GET/patients/{id}/medicationsPatient medications (longitudinal)
GET/patients/{id}/problemsPatient problem list (longitudinal)
GET/patients/{id}/referralsPatient referrals (longitudinal)
GET/patients/{id}/allergiesPatient allergy record (longitudinal)
GET/patients/{id}/immunisationsPatient immunisations (longitudinal)

Deleting patients is not permitted (clinical data protection). Use PATCH to archive instead.

The Patient Object

{
  "id": "123e4567-e89b-12d3-a456-426614174000",
  "first_name": "Sarah",
  "last_name": "Johnson",
  "middle_name": null,
  "preferred_name": "Sally",
  "title": "Ms",
  "date_of_birth": "1985-03-15",
  "biological_sex": "female",
  "gender": "woman",
  "ethnicity": null,
  "nhs_number": "1234567890",
  "email": "sarah.johnson@example.com",
  "phone": "+44 7700 900123",
  "mobile_phone": "+44 7700 900123",
  "home_phone": null,
  "address_line_1": "123 High Street",
  "address_line_2": "Flat 4",
  "address_line_3": null,
  "town_city": "London",
  "postcode": "SW1A 1AA",
  "country": "United Kingdom",
  "preferred_contact_method": "email",
  "status": "active",
  "patient_type": "active",
  "is_deceased": false,
  "date_of_death": null,
  "requires_review": false,
  "review_reason": null,
  "accessibility_needs": null,
  "accessibility_notes": null,
  "occupation": "Teacher",
  "patient_notes": null,
  "consent_sms": true,
  "consent_email": true,
  "consent_marketing": false,
  "consent_electronic_communication": true,
  "archived_at": null,
  "archived_by": null,
  "archive_reason": null,
  "archive_notes": null,
  "created_at": "2024-01-15T10:30:00Z",
  "updated_at": "2024-06-20T14:45:00Z"
}

Status Values

ValueDescription
activeCurrent patient
inactiveNo longer attending
archivedArchived record
mergedMerged into another record

Patient Types

ValueDescription
activeStandard patient
temporaryTemporary registration
dummyTest record
archivedArchived
mergedMerged

List Patients

GET /patients

Retrieve a paginated list of patients.

Query Parameters

ParameterTypeDescription
limitintegerRecords per page (1–100, default 20)
offsetintegerRecords to skip (default 0)
searchstringSearch by first name, last name, email, or NHS number
statusstringFilter by status
status_instringFilter by multiple statuses (comma-separated)
patient_typestringFilter by patient type
created_at_gtestringCreated on or after (ISO 8601)
created_at_ltestringCreated on or before (ISO 8601)

Request

curl -X GET "https://app.usejump.co.uk/functions/v1/api-v1/patients?search=sarah&limit=10" \
  -H "Authorization: Bearer pk_live_your_api_key"

Response

{
  "data": [
    {
      "id": "123e4567-e89b-12d3-a456-426614174000",
      "first_name": "Sarah",
      "last_name": "Johnson",
      "date_of_birth": "1985-03-15",
      "email": "sarah.johnson@example.com",
      "status": "active",
      "created_at": "2024-01-15T10:30:00Z",
      "updated_at": "2024-06-20T14:45:00Z"
    }
  ],
  "meta": {
    "limit": 10,
    "next_offset": null,
    "has_more": false,
    "request_id": "req_abc123"
  }
}

Retrieve a Patient

GET /patients/{id}

Request

curl -X GET "https://app.usejump.co.uk/functions/v1/api-v1/patients/123e4567-e89b-12d3-a456-426614174000" \
  -H "Authorization: Bearer pk_live_your_api_key"

Create a Patient

POST /patients

Required Fields

FieldTypeDescription
first_namestringPatient's first name
last_namestringPatient's last name
date_of_birthstringDate of birth (YYYY-MM-DD)

Optional Fields

All other fields from the patient object are accepted. Key optional fields:

FieldTypeValidation
emailstringMust be a valid email format
nhs_numberstringMust match \d{3}-?\d{3}-?\d{4} pattern
statusstringactive, inactive, archived, merged
patient_typestringactive, temporary, dummy, archived, merged
biological_sexstringmale, female, unknown, indeterminate
genderstringman, woman, non_binary, other, prefer_not_to_say

Request

curl -X POST "https://app.usejump.co.uk/functions/v1/api-v1/patients" \
  -H "Authorization: Bearer pk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "first_name": "John",
    "last_name": "Smith",
    "date_of_birth": "1990-07-22",
    "email": "john.smith@example.com",
    "phone": "+44 7700 900456"
  }'

Response (201 Created)

{
  "data": {
    "id": "456e7890-e89b-12d3-a456-426614174111",
    "first_name": "John",
    "last_name": "Smith",
    "date_of_birth": "1990-07-22",
    "email": "john.smith@example.com",
    "phone": "+44 7700 900456",
    "status": "active",
    "created_at": "2025-01-15T10:30:00Z",
    "updated_at": "2025-01-15T10:30:00Z"
  },
  "meta": {
    "request_id": "req_abc123"
  }
}

Update a Patient

PATCH /patients/{id}

Only include fields you want to change. All fields from the patient object are updatable except id, created_at, updated_at, and archived_* fields.

Request

curl -X PATCH "https://app.usejump.co.uk/functions/v1/api-v1/patients/456e7890-e89b-12d3-a456-426614174111" \
  -H "Authorization: Bearer pk_live_your_api_key" \
  -H "Content-Type: application/json" \
  -d '{
    "phone": "+44 7700 900789",
    "address_line_1": "456 New Street",
    "town_city": "Manchester"
  }'

Clinical Collections

These endpoints expose patient-level longitudinal clinical data directly from the underlying patient record tables. Unlike consultation endpoints, they are not scoped to a single encounter and do not reconstruct the consultation card or POMR structure.

Each collection returns unfiltered full history by default (including past, stopped, and inactive records). Use query filters to narrow results — for example, ?status=active for current medications.

⚠️

Status filters are case-sensitive and must match exact values. See individual collection docs below for valid values.

Available Collections

MethodEndpointDescription
GET/patients/{id}/observationsAll clinical observations
GET/patients/{id}/medicationsAll medications
GET/patients/{id}/problemsFull problem list
GET/patients/{id}/referralsAll referrals
GET/patients/{id}/allergiesFull allergy record
GET/patients/{id}/immunisationsAll immunisations

All collection endpoints support limit and offset pagination (default: 20 per page, max: 100).

Provenance

Where available, records include provenance fields to indicate where and when they were created:

  • consultation_context — UUID of the consultation in which the record was created (nullable, no FK constraint)
  • created_by / recorder_id / authored_by_user_id — the user who created the record (field name varies by collection)
  • source_system, external_id — present on imported records (observations, medications, allergies)
  • created_at, updated_at — system timestamps

consultation_context is not a substitute for consultation endpoints. To reconstruct what happened in a specific consultation, use GET /consultations/{id}.


Observations

GET /patients/{id}/observations

All clinical observations for a patient, sorted by effective_datetime DESC (clinical time), then id DESC. Records with null effective_datetime appear last.

  • effective_datetime — when the measurement was clinically taken
  • created_at — when the record was entered into the system

Filters

ParameterTypeDescription
codestringSNOMED code (exact match)
statusstringfinal, preliminary, amended, cancelled
effective_datetime_gtestringOn or after (ISO 8601)
effective_datetime_ltestringOn or before (ISO 8601)

Request

curl -X GET "https://app.usejump.co.uk/functions/v1/api-v1/patients/{id}/observations?status=final&limit=50" \
  -H "Authorization: Bearer pk_live_your_api_key"

Medications

GET /patients/{id}/medications

All medications (active and stopped), sorted by created_at DESC. Draft medications are excluded.

Filters

ParameterTypeDescription
statusstringactive, stopped, expired
status_instringComma-separated statuses

Request

curl -X GET "https://app.usejump.co.uk/functions/v1/api-v1/patients/{id}/medications?status=active" \
  -H "Authorization: Bearer pk_live_your_api_key"

Problems

GET /patients/{id}/problems

Full problem list (active and past), sorted by created_at DESC.

Filters

ParameterTypeDescription
statusstringActive, Health Administration, Past Ended (case-sensitive)
status_instringComma-separated statuses
significancestringSignificant, Minor

Request

curl -X GET "https://app.usejump.co.uk/functions/v1/api-v1/patients/{id}/problems?status=Active" \
  -H "Authorization: Bearer pk_live_your_api_key"

Referrals

GET /patients/{id}/referrals

All referral records, sorted by authored_on DESC. Draft referrals are excluded.

Filters

ParameterTypeDescription
statusstringactive, completed, cancelled
prioritystringroutine, urgent, asap, stat
authored_on_gtestringOn or after (ISO 8601)
authored_on_ltestringOn or before (ISO 8601)

Request

curl -X GET "https://app.usejump.co.uk/functions/v1/api-v1/patients/{id}/referrals?status=active" \
  -H "Authorization: Bearer pk_live_your_api_key"

Allergies

GET /patients/{id}/allergies

Full allergy record, sorted by created_at DESC. Includes nested allergy codes and reactions.

Filters

ParameterTypeDescription
clinical_statusstringactive, inactive, resolved
criticalitystringlow, high, unable-to-assess

Request

curl -X GET "https://app.usejump.co.uk/functions/v1/api-v1/patients/{id}/allergies?clinical_status=active" \
  -H "Authorization: Bearer pk_live_your_api_key"

Immunisations

GET /patients/{id}/immunisations

All immunisation records, sorted by created_at DESC. Draft records are excluded.

Filters

ParameterTypeDescription
statusstringcompleted, entered-in-error, not-done

Request

curl -X GET "https://app.usejump.co.uk/functions/v1/api-v1/patients/{id}/immunisations?status=completed" \
  -H "Authorization: Bearer pk_live_your_api_key"

Related Resources