Episodes
Manage clinical episodes (inbox items) with the Jump EHR API. Create, update, close, reopen, and assign workflow episodes.
Episodes are the core clinical workflow unit in Jump EHR — they represent items in the practice inbox. Each episode tracks a clinical workflow for a patient, from initial trigger (appointment booking, lab result, questionnaire submission) through to resolution.
Status, priority, and assignment changes must use action endpoints — they cannot be changed via PATCH. This ensures audit trails are maintained.
Consistency rules are enforced on create: status: "pending_patient" requires responsibility: "patient", and responsibility: "none" is only valid for closed episodes.
You cannot set responsibility: "practice" with assigned_to: null. Either provide an assignee or set responsibility to patient.
Authorization
BearerApiKey API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.
In: header
Query Parameters
Maximum number of records to return (1–100, default 20)
1 <= value <= 10020Number of records to skip (default 0)
0 <= value0uuidValue in
- "open"
- "pending_patient"
- "awaiting_review"
- "closed"
Comma-separated
Value in
- "practice"
- "patient"
- "none"
uuidValue in
- "low"
- "medium"
- "high"
- "urgent"
Value in
- "surface"
- "silent"
Response Body
application/json
curl -X GET "https://example.com/episodes"{ "data": [ { "id": "string", "patient_id": "string", "title": "string", "description": "string", "status": "open", "responsibility": "practice", "assigned_to": "string", "priority": "low", "journey_type": "string", "source_type": "string", "source_id": "string", "problem_ids": [ "string" ], "tags": [ "string" ], "due_date": "string", "closed_at": "string", "programme_id": "string", "inbox_visibility": "surface", "created_at": "string", "updated_at": "string" } ], "meta": { "limit": 20, "next_offset": 1, "has_more": true, "request_id": "req_abc123" }}Try-it is disabled for POST /episodes
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 API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.
In: header
Header Parameters
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.
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
curl -X POST "https://example.com/episodes" \ -H "Content-Type: application/json" \ -d '{ "patient_id": "3854866a-5476-48be-8313-77029ccdd7a7", "title": "string" }'{ "data": { "id": "string", "patient_id": "string", "title": "string", "description": "string", "status": "open", "responsibility": "practice", "assigned_to": "string", "priority": "low", "journey_type": "string", "source_type": "string", "source_id": "string", "problem_ids": [ "string" ], "tags": [ "string" ], "due_date": "string", "closed_at": "string", "programme_id": "string", "inbox_visibility": "surface", "created_at": "string", "updated_at": "string" }, "meta": { "request_id": "req_abc123" }}Authorization
BearerApiKey API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.
In: header
Path Parameters
uuidResponse Body
application/json
application/json
curl -X GET "https://example.com/episodes/497f6eca-6276-4993-bfeb-53cbbbba6f08"{ "data": { "id": "string", "patient_id": "string", "title": "string", "description": "string", "status": "open", "responsibility": "practice", "assigned_to": "string", "priority": "low", "journey_type": "string", "source_type": "string", "source_id": "string", "problem_ids": [ "string" ], "tags": [ "string" ], "due_date": "string", "closed_at": "string", "programme_id": "string", "inbox_visibility": "surface", "created_at": "string", "updated_at": "string" }, "meta": { "request_id": "req_abc123" }}Try-it is disabled for PATCH /episodes/{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 API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Metadata only. Status/priority/assignment use action endpoints.
Response Body
application/json
application/json
application/json
curl -X PATCH "https://example.com/episodes/497f6eca-6276-4993-bfeb-53cbbbba6f08" \ -H "Content-Type: application/json" \ -d '{}'{ "data": { "id": "string", "patient_id": "string", "title": "string", "description": "string", "status": "open", "responsibility": "practice", "assigned_to": "string", "priority": "low", "journey_type": "string", "source_type": "string", "source_id": "string", "problem_ids": [ "string" ], "tags": [ "string" ], "due_date": "string", "closed_at": "string", "programme_id": "string", "inbox_visibility": "surface", "created_at": "string", "updated_at": "string" }, "meta": { "request_id": "req_abc123" }}Try-it is disabled for POST /episodes/{id}/close
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 API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/episodes/497f6eca-6276-4993-bfeb-53cbbbba6f08/close" \ -H "Content-Type: application/json" \ -d '{}'{ "data": { "id": "string", "patient_id": "string", "title": "string", "description": "string", "status": "open", "responsibility": "practice", "assigned_to": "string", "priority": "low", "journey_type": "string", "source_type": "string", "source_id": "string", "problem_ids": [ "string" ], "tags": [ "string" ], "due_date": "string", "closed_at": "string", "programme_id": "string", "inbox_visibility": "surface", "created_at": "string", "updated_at": "string" }, "meta": { "request_id": "req_abc123", "action": "cancelled", "performed_at": "2026-01-15T10:30:00Z", "performed_by": "Example performed by" }}Try-it is disabled for POST /episodes/{id}/reopen
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 API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X POST "https://example.com/episodes/497f6eca-6276-4993-bfeb-53cbbbba6f08/reopen" \ -H "Content-Type: application/json" \ -d '{}'{ "data": { "id": "string", "patient_id": "string", "title": "string", "description": "string", "status": "open", "responsibility": "practice", "assigned_to": "string", "priority": "low", "journey_type": "string", "source_type": "string", "source_id": "string", "problem_ids": [ "string" ], "tags": [ "string" ], "due_date": "string", "closed_at": "string", "programme_id": "string", "inbox_visibility": "surface", "created_at": "string", "updated_at": "string" }, "meta": { "request_id": "req_abc123", "action": "cancelled", "performed_at": "2026-01-15T10:30:00Z", "performed_by": "Example performed by" }}Try-it is disabled for POST /episodes/{id}/assign
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 API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X POST "https://example.com/episodes/497f6eca-6276-4993-bfeb-53cbbbba6f08/assign" \ -H "Content-Type: application/json" \ -d '{ "assigned_to": "b9f52997-ff03-4166-bbff-22fd35e12939" }'{ "data": { "id": "string", "patient_id": "string", "title": "string", "description": "string", "status": "open", "responsibility": "practice", "assigned_to": "string", "priority": "low", "journey_type": "string", "source_type": "string", "source_id": "string", "problem_ids": [ "string" ], "tags": [ "string" ], "due_date": "string", "closed_at": "string", "programme_id": "string", "inbox_visibility": "surface", "created_at": "string", "updated_at": "string" }, "meta": { "request_id": "req_abc123", "action": "cancelled", "performed_at": "2026-01-15T10:30:00Z", "performed_by": "Example performed by" }}Try-it is disabled for POST /episodes/{id}/change-priority
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 API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.
In: header
Path Parameters
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X POST "https://example.com/episodes/497f6eca-6276-4993-bfeb-53cbbbba6f08/change-priority" \ -H "Content-Type: application/json" \ -d '{ "priority": "low" }'{ "data": { "id": "string", "patient_id": "string", "title": "string", "description": "string", "status": "open", "responsibility": "practice", "assigned_to": "string", "priority": "low", "journey_type": "string", "source_type": "string", "source_id": "string", "problem_ids": [ "string" ], "tags": [ "string" ], "due_date": "string", "closed_at": "string", "programme_id": "string", "inbox_visibility": "surface", "created_at": "string", "updated_at": "string" }, "meta": { "request_id": "req_abc123", "action": "cancelled", "performed_at": "2026-01-15T10:30:00Z", "performed_by": "Example performed by" }}Authorization
BearerApiKey API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.
In: header
Path Parameters
uuidQuery Parameters
Maximum number of records to return (1–100, default 20)
1 <= value <= 10020Number of records to skip (default 0)
0 <= value0Value in
- "user"
- "system"
- "patient"
Response Body
application/json
application/json
curl -X GET "https://example.com/episodes/497f6eca-6276-4993-bfeb-53cbbbba6f08/events"{ "data": [ { "id": "string", "episode_id": "string", "event_type": "string", "title": "string", "description": "string", "created_by": "string", "created_by_type": "user", "mentioned_users": [ "string" ], "extracted_tags": [ "string" ], "related_object_type": "string", "related_object_id": "string", "created_at": "string", "updated_at": "string" } ], "meta": { "limit": 20, "next_offset": 1, "has_more": true, "request_id": "req_abc123" }}Try-it is disabled for POST /episodes/{id}/events
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 API key with the pk_live_ prefix. pk_test_ keys are refused (403 TEST_MODE_UNAVAILABLE) until a sandbox exists.
In: header
Path Parameters
uuidHeader Parameters
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.
uuidRequest Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
application/json
application/json
curl -X POST "https://example.com/episodes/497f6eca-6276-4993-bfeb-53cbbbba6f08/events" \ -H "Content-Type: application/json" \ -d '{ "event_type": "note", "description": "string" }'{ "data": { "id": "string", "episode_id": "string", "event_type": "string", "title": "string", "description": "string", "created_by": "string", "created_by_type": "user", "mentioned_users": [ "string" ], "extracted_tags": [ "string" ], "related_object_type": "string", "related_object_id": "string", "created_at": "string", "updated_at": "string" }, "meta": { "request_id": "req_abc123" }}