Skip to main content
A clinical note is what a clinician writes about a patient: a consultation, a progress note, a clerkship. Each note belongs to one patient and has a status: it starts as a draft, and a clinician later signs or finalises it. The text of a note is its content. With these endpoints you can:
  • list a patient’s notes (a short summary of each, never the text) and read one note in full;
  • discover which templates a clinic uses and which clinicians may hold a note;
  • create a draft note for a named clinician, and correct that draft until a person touches it.
A request can only ever create or edit a draft. Nothing you send can sign, lock, finalise or co-sign a note: those are a clinician’s decisions, made in the clinic’s own screens.

Who can use it

These are patient-data permissions, so a live key needs more than the permission itself: the clinic’s API add-on, the accepted data agreement (or, for an organization, patient-data approval for the Clinical notes kind and a connection the clinic has approved). The notes permissions are available to clinics on an Enterprise subscription. Read Patient information access for the full checklist and Permissions for the scope list. If a requirement is missing you get a 403 whose code tells you which one, see Errors. Try it in the sandbox first. A test key reaches only your workspace’s sandbox, which holds invented patients and notes, so you can try every request on this page without an agreement and without touching a real chart. See Authentication. Every example uses a test key and a placeholder clinic. Replace YOUR_CLINIC_ID and the ids with your own.

What a note looks like

A note summary (a list item) carries these fields. A single note adds custom_template_id, content and citations.

List a patient’s notes

Returns a short summary of each of one patient’s notes. It never returns the text. Read one note to get its text. GET /v1/clinics/{clinic_id}/notes
A patient the clinic has restricted is answered with 404 not_found, the same as a patient that does not exist. A note the clinic has marked sensitive is never listed.

Read one note

Returns one note, including its text. GET /v1/clinics/{clinic_id}/notes/{note_id}
content is returned as the clinic stored it, minus anything internal. Its keys depend on the template the note was written from, so read the template (below) rather than guessing. A note in another clinic, a restricted patient’s note and a sensitive note all answer 404 not_found; you cannot tell them apart from a note that does not exist.

Create a draft note

Creates a note for one patient, for a named clinician, with status: "draft". The note appears in the clinic’s notes, marked as coming from your app, and the clinician reviews and completes it. POST /v1/clinics/{clinic_id}/notes A field not on this list is refused with invalid_request. In particular there is no field for a status, a signature or a lock. What goes in content:
  • For a template note (note_type or custom_template_id), content is keyed by the template’s field ids. Read the template’s fields first. A key the template does not have is refused with unknown_field.
  • For a blank note, content is free-form, for example { "text": "Patient reports a mild cough." }. A blank note cannot carry treatment, service or diagnosis blocks. Keys named diagnosisData, treatment_plans, follow_up_plans, services or diagnoses, and any key beginning with an underscore, are refused with unknown_field. This keeps a draft free of anything that would order, prescribe or bill. Matching Encounters.
The answer to a create or an update shows the note’s details with content: null. Read the note to see its content. Idempotency-Key is optional on this route but strongly recommended: a retry with the same key and the same body returns the original result instead of a second draft. See Retries and duplicates.

Update a draft note

Replaces the content of a draft that your own key created, as long as no clinician has touched it since. PATCH /v1/clinics/{clinic_id}/notes/{note_id}
The answer has the same shape as a create. The update is refused in these cases: Once a clinician has edited a draft it is theirs. Read the note again to see what the clinic recorded rather than trying to overwrite it. There is no Idempotency-Key on this route, because replacing a draft’s content with the same content is already safe to repeat.

List note templates

Lists every standard template plus the clinic’s own active templates. Use it to find what to send as note_type or custom_template_id. GET /v1/clinics/{clinic_id}/note-templates

Read one template’s fields

Returns the fields of one template: the exact keys to use in content, in order, with their type and options. GET /v1/clinics/{clinic_id}/note-templates/{template_key}
A template that does not exist, or belongs to another clinic, answers 404 not_found.

List clinicians who may hold a note

Lists the clinic’s staff whose role may hold a note. Use it to find a valid clinician_id. GET /v1/clinics/{clinic_id}/note-clinicians
You get an id, a display name, a role and whether the person is active. Never an email address, a phone number or a licence number.

Things to know

Refusals you may see See Errors for the shape of every error and the permission-related codes. What is never returned. A note the clinic marked sensitive is never listed and answers 404 when read. A restricted patient’s notes are never reachable. Notes you did not create are readable with notes:read, but you can only change a draft your own key created. Pagination. Only the notes list is paginated, with limit and starting_after. See Pagination. FHIR. Send Accept: application/fhir+json on the notes list or a single note to receive a Bundle of DocumentReference or a bare DocumentReference. You can also create a draft by POSTing a FHIR DocumentReference with Content-Type: application/fhir+json: the subject is the patient, the author is the clinician, and a docStatus other than preliminary is refused. The text lands in a single Note field of the content. Updating a note and the template and clinician routes are JSON only. See FHIR R4. One id for the note and its visit. The note’s id is the same as its visit’s id in Encounters. Encounters never return clinical text; this page does.

Common tasks

Draft a note for a clinician to finish
  1. GET …/note-clinicians and choose a clinician_id.
  2. GET …/note-templates, then GET …/note-templates/{key} to learn the field ids (skip both for a blank note).
  3. POST …/notes with patient_id, clinician_id, content and an Idempotency-Key.
  4. The clinician finds the draft marked as coming from your app, reviews it and completes it.
Fix a typo in a draft you just created. PATCH …/notes/{note_id} with the whole corrected content. If it answers 409 note_not_editable, a clinician has already taken the draft over: read it and leave it alone. Show a patient’s notes in your app. GET …/notes?patient_id=… for the summaries, following next_cursor, then GET …/notes/{note_id} for the one the user opens.