Loading API documentation...

Noa Notes Integration (v1)

Welcome to the Noa Notes Integration REST API!

This API is used to integrate Noa Notes with your existing systems. It allows you to create sessions, retrieve session statuses, and summaries.

Here is the available OpenAPI that you can import to Postman: noa_notes_integration.postman_collection.json.

Authentication

Authentication is based on clients of the API. The new client is set up by the Docplanner Team and provided to the development team of the client.

Sign In

Authenticates a client and returns an access token.

A client is a service that wants to use the Noa Notes API.

Authorizations:
Bearer
Request Body schema:
clientId
string <uuid>
secret
string or null

Responses

Request samples

Content type
{
  • "clientId": "5e505642-9024-474d-9434-e5a44f505cc5",
  • "secret": "string"
}

Response samples

Content type
No sample

Consumers

A consumer is an external system that consumes the Noa Notes Integration API.

Each client is meant to be a separate consumer.

The default configuration of the business logic for the other endpoints (e.g. default WebHook, Language, Speciality, Template) is being configured on the consumer level.

Get Current Consumer

Retrieves information about the currently authenticated consumer.

Authorizations:
Bearer
query Parameters
api-version
string

Responses

Response samples

Content type
No sample

Create Session

Creates a new session.

In this endpoint, episodeId and doctorId are IDs coming directly from your software. We consider them as external IDs on our side.

If a session already exists for the given episodeId, doctorId, and facilityId tuple, the most advanced one is returned: an in-progress or Verified session takes precedence over a New one, and a brand-new session is created only when neither exists. It can allow you to resume a session UI-wise in the widget. When resuming a non-final session, if template in the request body differs from the stored session template, the session template is updated to match the request.

Authorizations:
Bearer
query Parameters
api-version
string
Request Body schema:
episodeId
required
string or null
doctorId
required
string or null
webhookUrl
string or null
object or null
visitType
string or null
Enum: "FirstVisit" "FollowUpVisit" null
  • FirstVisit - First visit for a patient
  • FollowUpVisit - Next visit for a patient
object or null
facilityId
string or null
language
string or null
Enum: "en-US" "pl-PL" "pt-BR" "pt-PT" "es-MX" "es-ES" "es-AR" "es-CO" "es-CL" "es-PE" "it-IT" "de-DE" "cs-CZ" "tr-TR" "nr-NR" null
speciality
string or null
canUseDataForAiTraining
boolean or null
patientGender
string (NoaNotes.Shared.Abstractions.Core.Enums.PatientGender)
Enum: "Male" "Female" "Neutral"

Responses

Request samples

Content type
{
  • "episodeId": "episode-123",
  • "doctorId": "doctor-456",
  • "template": {
    • "value": {
      • "Personal Information": "Include patient demographics and insurance information",
      • "Reason for the Visit": "Detailed description of the presenting problem"
      }
    },
  • "visitType": "FirstVisit",
  • "metadata": {
    • "key1": "value1",
    • "key2": "value2"
    },
  • "facilityId": "facility-789",
  • "language": "en-US",
  • "speciality": "psychiatrist",
  • "canUseDataForAiTraining": null,
  • "patientGender": null
}

Response samples

Content type
No sample

Get Active Sessions For Facility

Retrieves the sessions for a facilityId that are not yet in a final status and were started within the last 2 hours. The 2-hour bound exists because a session that a client never cleanly closed (e.g. a crash) is otherwise indistinguishable from one still recording.

startedAt is UTC, without an offset — the same as every other timestamp in this API.

status is the session's current status. Only non-final statuses appear here: Verified, EmptySummaryVerified, Failed and Expired are filtered out, so a failed session never occupies a slot in this list. Interrupted is the one to act on — the client went away (closed tab, lost connection), and the session can be resumed by calling Create Session again with the same episodeId, doctorId and facilityId.

Authorizations:
Bearer
path Parameters
facilityId
required
string
query Parameters
api-version
string

Responses

Response samples

Content type
No sample

Get Session Summary

Retrieves the summary of a specific session. Returned data contains the content of the summary and information if a doctor approved its content in the Edit/Confirm Summary page.

Authorizations:
Bearer
path Parameters
sessionId
required
string <uuid>
query Parameters
api-version
string

Responses

Response samples

Content type
No sample

Re-summarize a session

Generates a new summary for a session from the transcript already held by Noa, optionally with a different template.

Only possible while the doctor has not verified the summary yet — a verified note is a finished document and is never replaced through this endpoint. Omitting template regenerates with the template the session already has.

The call only starts the regeneration and returns 202; the new summary arrives over the session webhook, and the doctor has to verify it again before it can be read back through Get Session Summary.

Authorizations:
Bearer
path Parameters
sessionId
required
string <uuid>
query Parameters
api-version
string
Request Body schema:
object or null

Responses

Request samples

Content type
{
  • "template": {
    • "property1": "string",
    • "property2": "string"
    }
}

Response samples

Content type
No sample

ConsumerSessions

A session is meant to serve as a single usage of Noa Notes with a specific expiration time. The client needs to create a new session to receive a Noa Notes Recorder URL enabling the doctor to open the Noa Notes Recorder. The result of a session is a summary of the appointment, which should be used to populate EHR data in the client application.

Each session can be created with specific optional parameters, if not provided then default configuration from the consumer configuration will be applied.

Metadata parameters may contain any additional data that you want to share.

Get Session

Retrieves information about a specific session.

Authorizations:
Bearer
path Parameters
sessionId
required
string <uuid>
query Parameters
api-version
string

Responses

Response samples

Content type
No sample

Get Session Status

Retrieves the status of a specific session.

This endpoint might be used proactively by the client to check statuses of a given session. An alternative scenario is for the client to expose a webhook that will be used by the Noa Notes Integration API to notify about status changes of the sessions.

Authorizations:
Bearer
path Parameters
sessionId
required
string <uuid>
query Parameters
api-version
string

Responses

Response samples

Content type
No sample

Get Verified Session Summary

Retrieves the verified summary of the session the supplied session token was issued for.

The response is identical to GET /api/v1/consumers/{sessionId}/summary: content is returned only once the doctor has approved the summary on the Edit/Confirm Summary page, and is null until then, while isVerified always reports whether the approval happened.

A session token grants access to exactly one session. Requesting any other session id returns 403, whether or not that session exists.

Authorizations:
Bearer
path Parameters
sessionId
required
string <uuid>
query Parameters
api-version
string

Responses

Response samples

Content type
No sample

Track Session Analytics

Attaches analytics context from the calling application to a session, so that product analytics raised by the embedded Noa Notes clients can be correlated with your own.

Call it once the session exists and before the doctor starts recording — typically right after Create Session, when the Recorder is opened. The stored context is read when Noa Notes reports on the session (recording started, processing started, recording finished, note generated, note sent) and is cached from the first of those events onwards, so a later update is not guaranteed to reach the events that follow it.

The call is an upsert: a session holds at most one analytics context and each call replaces the previous one in full, including the fields left out of the request. Every field is optional; analyticsSessionId, analyticsDeviceId and analyticsUserId are what stitch the events to the analytics session, device and user of your own application, while the page fields, dpSource and clientPlatform describe where the Recorder was opened from. Values that do not match the Docplanner tracking taxonomy are not rejected — they fall back to the Noa Notes defaults documented on each field.

Keep string values within the documented lengths, and note that the session is addressed by the session token issued with it: requesting any other session id returns 403 Forbidden, whether or not that session exists, and an unknown session returns 404 Not Found. A successful call answers 200 OK with an empty body.

This endpoint is only available to consumers for whom unified tracking has been enabled by the Docplanner team. For all other consumers it returns 404 Not Found.

Authorizations:
Bearer
path Parameters
sessionId
required
string <uuid>
query Parameters
api-version
string
Request Body schema:
analyticsSessionId
string or null

Identifier of the analytics session in your own application (for example the Amplitude session id). The backend events raised for this Noa Notes session are reported under it, so they land in the same analytics session as the events your application tracks. Up to 256 characters.

analyticsDeviceId
string or null

Identifier of the device in your own application (for example the Amplitude device id). Used as the device the backend events are attributed to. Up to 256 characters.

analyticsUserId
string or null

Identifier of the user the backend events are attributed to. When omitted, the doctorId the session was created with is used instead. Up to 256 characters.

pageCategory
string or null

Tracking category of the page the Recorder was opened from, for example medical episodes. Matched case-insensitively against the Docplanner tracking taxonomy; an unknown or omitted value is reported as noa notes. Up to 256 characters.

pageSection
string or null

Tracking section of the page the Recorder was opened from, for example noa notes widget. Matched case-insensitively against the Docplanner tracking taxonomy; an unknown or omitted value is reported as noa. Up to 256 characters.

pageType
string or null

Tracking type of the page the Recorder was opened from, for example medical files. Matched case-insensitively against the Docplanner tracking taxonomy; an unknown or omitted value is reported as notes. Up to 256 characters.

pageUrl
string or null

URL of the page the Recorder was opened from. Up to 2048 characters.

dpSource
string or null

Product the session originates from, for example clinic cloud, 3rd party pms or noa notes widget. Matched case-insensitively against the Docplanner tracking taxonomy; an unknown or omitted value is reported as noa app. The value is also part of the context used to resolve the unified tracking configuration of your consumer, so send the one agreed with the Docplanner team. Up to 256 characters.

templateId
string or null

Identifier, in your own system, of the template the note is generated from. Reported on the note generation event.

patientId
string or null

Identifier, in your own system, of the patient the appointment belongs to. Reported on the note generation event.

isAnalyticsBlockedOnClient
boolean or null

Whether client-side analytics is blocked or unavailable for this user (ad blocker, missing consent, application or browser settings). true means an equivalent front-end event would have been dropped on the client, false that it would have gone through; it is used to tell backend traffic that is also visible from the front end apart from traffic that is not.

clientPlatform
string or null

Client surface the doctor is using, either web or mobile app. An unknown or omitted value leaves the property unset on the events. Up to 256 characters.

Responses

Request samples

Content type
{
  • "analyticsSessionId": "1726048291000",
  • "analyticsDeviceId": "9f1c1b0e-6d2a-4f1e-9a1f-2c4b8d3e5a77",
  • "analyticsUserId": "user-123",
  • "pageCategory": "medical episodes",
  • "pageSection": "noa notes widget",
  • "pageType": "medical files",
  • "dpSource": "3rd party pms",
  • "templateId": "template-123",
  • "patientId": "patient-456",
  • "isAnalyticsBlockedOnClient": false,
  • "clientPlatform": "web"
}

Response samples

Content type
No sample

Add summary rating

Allows the doctor to add a rating and an optional comment to the summary of a specific session.

Authorizations:
Bearer
path Parameters
sessionId
required
string <uuid>
query Parameters
api-version
string
Request Body schema:
rating
string (NoaNotes.Modules.Integration.Core.Enums.SummaryRating)
Enum: "Dislike" "Like"
comment
string or null

Responses

Request samples

Content type
{
  • "rating": "Dislike",
  • "comment": "string"
}

Response samples

Content type
No sample

Update session details

Allows the doctor to update session details such as training consent

Authorizations:
Bearer
path Parameters
sessionId
required
string <uuid>
query Parameters
api-version
string
Request Body schema:
object (NoaNotes.Modules.Integration.Application.Clients.AppointmentWebHook)
object (NoaNotes.Modules.Integration.Application.Clients.AppointmentOptions)

Responses

Request samples

Content type
{
  • "webHook": {
    • "url": "string",
    • "token": "string"
    },
  • "options": {
    • "summarySections": {
      • "property1": "string",
      • "property2": "string"
      },
    • "isTraining": true,
    • "speciality": "string",
    • "redirectUrl": "string",
    • "useForTraining": true,
    • "features": {
      • "aiRolePlay": true,
      • "recorderVersion": "string",
      • "enableDiarization": true,
      • "enableBeautify": true
      },
    • "patientGender": "Male"
    }
}

Response samples

Content type
No sample

Get session configuration

Returns information about the feedback and training consent configuration of a specific session.

Authorizations:
Bearer
path Parameters
sessionId
required
string <uuid>
query Parameters
api-version
string

Responses

Response samples

Content type
No sample

Get Recorder URL

Returns the Noa Notes Recorder URL for an existing session, as a JSON string. Open it in a browser or embed it in your application to let the doctor record the appointment; the result is then retrieved with Get Verified Session Summary.

The URL points at the Recorder sign-in page and carries a freshly issued access token, so treat it as a credential: anyone holding the link can open that recording until the token expires. The token is time-limited rather than single-use, and the expiry is configured per environment.

Each call creates a new appointment behind the session and points the session at it, which is why the URL should be requested once, when the doctor is about to record. Calling it again replaces the appointment the session refers to, so a recording made through an earlier URL is no longer the one the session resolves to.

Failures are reported as 400 Bad Request with a plain-text Error processing token: ... message — including the case where the session the token was issued for no longer exists, and the case where the appointment could not be created. The session token grants access to exactly one session: requesting any other session id returns 403 Forbidden, whether or not that session exists.

Authorizations:
Bearer
path Parameters
sessionId
required
string <uuid>
query Parameters
language
required
string

Language of the Recorder interface, as an IETF tag such as en-US or pl-PL. It is forwarded to the Recorder front end and does not change the session: the appointment is always created with the language the session was created with. Required — a missing or empty value is rejected with 400 Bad Request.

redirectUrl
string

Where the doctor is sent once the recording is finished. It is both stored on the appointment and appended to the returned URL. When omitted, the redirect configured for this environment is used, which takes the doctor to the Noa-hosted Edit/Confirm Summary page through a freshly issued session token.

sourceClient
string

Optional free-form marker identifying the client that opened the Recorder. When not empty it is appended to the returned URL; it is not stored on the session.

api-version
string

Responses

Response samples

Content type
No sample

ExternalDoctors

Doctors that an external system has registered for one of its facilities.

Use these endpoints to keep the doctors known to Noa Notes in sync with your own system, and to control which of them can use the embedded Noa Notes widget.

Doctors are addressed by the identifiers from your own system (externalFacilityId, externalDoctorId), so you do not need to store any Noa Notes identifier on your side.

Get Facility Doctors

Returns every doctor currently registered for the given facility, as a JSON array.

Each entry reports the doctor's name, the externalDoctorId from your own system and whether the embedded Noa Notes widget is enabled for them. Doctors removed with Remove Facility Doctor are left out, and a facility with no doctors returns an empty array.

A facility that does not exist returns 404 Not Found, and one that belongs to another consumer returns 403 Forbidden.

Authorizations:
Bearer
path Parameters
externalFacilityId
required
string

Identifier of the facility in your own system, as registered with Noa Notes.

Responses

Response samples

Content type
No sample

Add Facility Doctor

Registers a doctor for the given facility and returns the registered doctor with 201 Created.

externalDoctorId is the identifier of the doctor in your own system and must be unique within the facility. Registering an identifier that is already registered returns 409 Conflict. Registering one that was removed earlier restores that doctor instead of creating a second one: it keeps its Noa Notes id and its previous isWidgetEnabled setting, and takes the name from this request.

isWidgetEnabled decides whether the doctor may use the embedded Noa Notes widget. It applies when the doctor is created and is ignored when an earlier registration is restored. name and externalDoctorId must both be non-empty.

An unknown facility returns 404 Not Found, and one belonging to another consumer 403 Forbidden.

Authorizations:
Bearer
path Parameters
externalFacilityId
required
string

Identifier of the facility in your own system, as registered with Noa Notes.

Request Body schema:
name
required
string or null

Display name of the doctor, as it should appear in Noa Notes. Must not be empty.

externalDoctorId
required
string or null

Identifier of the doctor in your own system. It must be unique within the facility and is how the doctor is addressed in the rest of the API, including as doctorId when a session is created. Must not be empty.

isWidgetEnabled
boolean

Whether the doctor may use the embedded Noa Notes widget. It is applied when the doctor is created, and ignored when the call restores a previously removed doctor, which keeps the setting it had before.

Responses

Request samples

Content type
{
  • "name": "Dr Anna Kowalska",
  • "externalDoctorId": "doctor-456",
  • "isWidgetEnabled": true
}

Response samples

Content type
No sample

Update Facility Doctor

Updates the display name of a doctor already registered for the facility and returns the updated doctor.

The doctor is identified by the externalDoctorId from your own system, and name is the only thing that changes: the Noa Notes id and isWidgetEnabled are left as they are.

A doctor that was removed can still be renamed this way; it stays out of Get Facility Doctors until it is registered again. 404 Not Found is returned if either the facility or the doctor is unknown, and 403 Forbidden if the facility belongs to another consumer.

Authorizations:
Bearer
path Parameters
externalFacilityId
required
string

Identifier of the facility in your own system, as registered with Noa Notes.

externalDoctorId
required
string

Identifier of the doctor in your own system, as supplied when the doctor was registered.

Request Body schema:
name
required
string or null

New display name of the doctor. It is the only property this endpoint changes.

Responses

Request samples

Content type
{
  • "name": "Dr Anna Kowalska-Nowak"
}

Response samples

Content type
No sample

Remove Facility Doctor

Removes a doctor from the facility and answers 204 No Content.

The removal is soft: the doctor stops being listed by Get Facility Doctors and the embedded Noa Notes widget is no longer offered for them, while their Noa Notes id, their widget setting and every session and summary already created for them are kept. Registering the same externalDoctorId again restores that doctor rather than creating a second one, and repeating the removal answers 204 No Content as well.

Sessions are created from the identifiers you supply and are not matched against this registry, so removing a doctor here does not by itself stop sessions being created for that externalDoctorId. Where the widget visibility check is enabled for your consumer, it is the doctor's isWidgetEnabled setting — not their removal — that makes Create Session reject a request carrying a facilityId.

404 Not Found is returned if either the facility or the doctor is unknown, and 403 Forbidden if the facility belongs to another consumer.

Authorizations:
Bearer
path Parameters
externalFacilityId
required
string

Identifier of the facility in your own system, as registered with Noa Notes.

externalDoctorId
required
string

Identifier of the doctor in your own system, as supplied when the doctor was registered.

Responses

Response samples

Content type
No sample