API Reference

Patients

Manage patient records with the Jump EHR Patients API. Create, read, update, and search patient data.

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.

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

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

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

GET
/patients

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
status?string

Value in

  • "active"
  • "inactive"
  • "archived"
  • "merged"
patient_type?string

Value in

  • "active"
  • "temporary"
  • "dummy"
  • "archived"
  • "merged"
status_in?string

Comma-separated list of statuses

created_at_gte?string
Formatdate-time
created_at_lte?string
Formatdate-time
search?string

Case-insensitive search across first_name, last_name, email, nhs_number

Response Body

application/json

application/json

application/json

curl -X GET "https://example.com/patients"
{  "data": [    {      "id": "123e4567-e89b-12d3-a456-426614174000",      "first_name": "Sarah",      "last_name": "Johnson",      "middle_name": "Anne",      "preferred_name": "Sally",      "title": "Ms",      "date_of_birth": "1985-03-15",      "biological_sex": "female",      "gender": "woman",      "ethnicity": "Example ethnicity",      "nhs_number": "9990000018",      "email": "sarah.johnson@example.com",      "phone": "+44 7700 900123",      "mobile_phone": "+44 7700 900123",      "home_phone": "+44 7700 900456",      "address_line_1": "123 Example 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": "Example review reason",      "accessibility_needs": {        "requiresInterpreter": true,        "interpreterLanguage": {          "code": "pl",          "display": "Polish"        },        "requiresBSL": false,        "accessNeeds": [          "wheelchair_access_required"        ]      },      "accessibility_notes": "Example accessibility notes",      "occupation": "Teacher",      "pronouns": "she/her",      "named_clinician_id": "123e4567-e89b-12d3-a456-426614174001",      "patient_id": "P-100428",      "external_id": "crm-4821",      "patient_notes": "Example patient notes",      "consent_sms": false,      "consent_email": false,      "consent_marketing": false,      "consent_electronic_communication": false,      "archived_at": "2026-01-15T10:30:00Z",      "archived_by": "123e4567-e89b-12d3-a456-426614174002",      "archive_reason": "Example archive reason",      "archive_notes": "Example archive notes",      "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 /patients

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/patients" \  -H "Content-Type: application/json" \  -d '{    "first_name": "string",    "last_name": "string",    "date_of_birth": "2019-08-24"  }'
{  "data": {    "id": "123e4567-e89b-12d3-a456-426614174000",    "first_name": "Sarah",    "last_name": "Johnson",    "middle_name": "Anne",    "preferred_name": "Sally",    "title": "Ms",    "date_of_birth": "1985-03-15",    "biological_sex": "female",    "gender": "woman",    "ethnicity": "Example ethnicity",    "nhs_number": "9990000018",    "email": "sarah.johnson@example.com",    "phone": "+44 7700 900123",    "mobile_phone": "+44 7700 900123",    "home_phone": "+44 7700 900456",    "address_line_1": "123 Example 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": "Example review reason",    "accessibility_needs": {      "requiresInterpreter": true,      "interpreterLanguage": {        "code": "pl",        "display": "Polish"      },      "requiresBSL": false,      "accessNeeds": [        "wheelchair_access_required"      ]    },    "accessibility_notes": "Example accessibility notes",    "occupation": "Teacher",    "pronouns": "she/her",    "named_clinician_id": "123e4567-e89b-12d3-a456-426614174001",    "patient_id": "P-100428",    "external_id": "crm-4821",    "patient_notes": "Example patient notes",    "consent_sms": false,    "consent_email": false,    "consent_marketing": false,    "consent_electronic_communication": false,    "archived_at": "2026-01-15T10:30:00Z",    "archived_by": "123e4567-e89b-12d3-a456-426614174002",    "archive_reason": "Example archive reason",    "archive_notes": "Example archive notes",    "created_at": "2026-01-15T10:30:00Z",    "updated_at": "2026-01-15T10:30:00Z"  },  "meta": {    "request_id": "req_abc123"  }}
GET
/patients/{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/patients/497f6eca-6276-4993-bfeb-53cbbbba6f08"
{  "data": {    "id": "123e4567-e89b-12d3-a456-426614174000",    "first_name": "Sarah",    "last_name": "Johnson",    "middle_name": "Anne",    "preferred_name": "Sally",    "title": "Ms",    "date_of_birth": "1985-03-15",    "biological_sex": "female",    "gender": "woman",    "ethnicity": "Example ethnicity",    "nhs_number": "9990000018",    "email": "sarah.johnson@example.com",    "phone": "+44 7700 900123",    "mobile_phone": "+44 7700 900123",    "home_phone": "+44 7700 900456",    "address_line_1": "123 Example 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": "Example review reason",    "accessibility_needs": {      "requiresInterpreter": true,      "interpreterLanguage": {        "code": "pl",        "display": "Polish"      },      "requiresBSL": false,      "accessNeeds": [        "wheelchair_access_required"      ]    },    "accessibility_notes": "Example accessibility notes",    "occupation": "Teacher",    "pronouns": "she/her",    "named_clinician_id": "123e4567-e89b-12d3-a456-426614174001",    "patient_id": "P-100428",    "external_id": "crm-4821",    "patient_notes": "Example patient notes",    "consent_sms": false,    "consent_email": false,    "consent_marketing": false,    "consent_electronic_communication": false,    "archived_at": "2026-01-15T10:30:00Z",    "archived_by": "123e4567-e89b-12d3-a456-426614174002",    "archive_reason": "Example archive reason",    "archive_notes": "Example archive notes",    "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 /patients/{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 — only supplied fields are changed.

Response Body

application/json

application/json

application/json

application/json

application/json

curl -X PATCH "https://example.com/patients/497f6eca-6276-4993-bfeb-53cbbbba6f08" \  -H "Content-Type: application/json" \  -d '{}'
{  "data": {    "id": "123e4567-e89b-12d3-a456-426614174000",    "first_name": "Sarah",    "last_name": "Johnson",    "middle_name": "Anne",    "preferred_name": "Sally",    "title": "Ms",    "date_of_birth": "1985-03-15",    "biological_sex": "female",    "gender": "woman",    "ethnicity": "Example ethnicity",    "nhs_number": "9990000018",    "email": "sarah.johnson@example.com",    "phone": "+44 7700 900123",    "mobile_phone": "+44 7700 900123",    "home_phone": "+44 7700 900456",    "address_line_1": "123 Example 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": "Example review reason",    "accessibility_needs": {      "requiresInterpreter": true,      "interpreterLanguage": {        "code": "pl",        "display": "Polish"      },      "requiresBSL": false,      "accessNeeds": [        "wheelchair_access_required"      ]    },    "accessibility_notes": "Example accessibility notes",    "occupation": "Teacher",    "pronouns": "she/her",    "named_clinician_id": "123e4567-e89b-12d3-a456-426614174001",    "patient_id": "P-100428",    "external_id": "crm-4821",    "patient_notes": "Example patient notes",    "consent_sms": false,    "consent_email": false,    "consent_marketing": false,    "consent_electronic_communication": false,    "archived_at": "2026-01-15T10:30:00Z",    "archived_by": "123e4567-e89b-12d3-a456-426614174002",    "archive_reason": "Example archive reason",    "archive_notes": "Example archive notes",    "created_at": "2026-01-15T10:30:00Z",    "updated_at": "2026-01-15T10:30:00Z"  },  "meta": {    "request_id": "req_abc123"  }}
GET
/patients/{id}/observations

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

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
code?string

Filter by SNOMED/observation code

status?string
effective_datetime_gte?string
Formatdate-time
effective_datetime_lte?string
Formatdate-time

Response Body

application/json

application/json

curl -X GET "https://example.com/patients/497f6eca-6276-4993-bfeb-53cbbbba6f08/observations"
{  "data": [    {}  ],  "meta": {    "limit": 20,    "next_offset": 1,    "has_more": true,    "request_id": "req_abc123"  }}
GET
/patients/{id}/medications

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

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
status?string
status_in?string

Comma-separated status values

Response Body

application/json

application/json

curl -X GET "https://example.com/patients/497f6eca-6276-4993-bfeb-53cbbbba6f08/medications"
{  "data": [    {}  ],  "meta": {    "limit": 20,    "next_offset": 1,    "has_more": true,    "request_id": "req_abc123"  }}
GET
/patients/{id}/problems

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

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
status?string
status_in?string

Comma-separated status values

significance?string

Response Body

application/json

application/json

curl -X GET "https://example.com/patients/497f6eca-6276-4993-bfeb-53cbbbba6f08/problems"
{  "data": [    {}  ],  "meta": {    "limit": 20,    "next_offset": 1,    "has_more": true,    "request_id": "req_abc123"  }}
GET
/patients/{id}/referrals

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

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
status?string
priority?string
authored_on_gte?string
Formatdate
authored_on_lte?string
Formatdate

Response Body

application/json

application/json

curl -X GET "https://example.com/patients/497f6eca-6276-4993-bfeb-53cbbbba6f08/referrals"
{  "data": [    {}  ],  "meta": {    "limit": 20,    "next_offset": 1,    "has_more": true,    "request_id": "req_abc123"  }}
GET
/patients/{id}/allergies

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

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
clinical_status?string
criticality?string

Response Body

application/json

application/json

curl -X GET "https://example.com/patients/497f6eca-6276-4993-bfeb-53cbbbba6f08/allergies"
{  "data": [    {}  ],  "meta": {    "limit": 20,    "next_offset": 1,    "has_more": true,    "request_id": "req_abc123"  }}
GET
/patients/{id}/immunisations

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

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
status?string

Response Body

application/json

application/json

curl -X GET "https://example.com/patients/497f6eca-6276-4993-bfeb-53cbbbba6f08/immunisations"
{  "data": [    {}  ],  "meta": {    "limit": 20,    "next_offset": 1,    "has_more": true,    "request_id": "req_abc123"  }}