Ambient Content Retrieval
List Encounter Notes
List Ambient notes linked to an EMR encounter for cross-modality workflows
GET
/
api
/
v1
/
ambient
/
encounter
/
{emr_encounter_id}
/
notes
Lists notes for an EMR encounter.
curl --request GET \
--url https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes \
--header 'sdp_suki_token: <api-key>'import requests
url = "https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes"
headers = {"sdp_suki_token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {sdp_suki_token: '<api-key>'}};
fetch('https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"sdp_suki_token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("sdp_suki_token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes")
.header("sdp_suki_token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["sdp_suki_token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"notes": [
{
"created_at": "2026-01-01T00:00:00Z",
"id": "123dfg-456dfg-789dfg-012dfg",
"status": "DEFAULT",
"updated_at": "2026-01-01T00:00:00Z"
}
]
}{
"code": 400,
"message": "invalid request"
}{
"code": 401,
"message": "invalid token"
}{
"code": 404,
"message": "not found"
}{
"code": 500,
"message": "internal server error"
}Use this endpoint to list all finished and unfinished notes tied to an .
Pass the same
emr_encounter_id you sent when creating interoperable ambient sessions. Use each returned note id as with the note-level content, context, and structured data endpoints.
For when to list notes vs session or note content in your application UI, refer to Work with shared notes.
Cross-modality Ambient workflows require
emr_encounter_id on session create. Without it, notes are not interoperable across modalities. Refer to Ambient interoperability for more details.Code examples
- Python
- TypeScript
import json
import requests
BASE_URL = "https://sdp.suki.ai"
# Same emr_encounter_id you passed on Create Ambient Session
emr_encounter_id = "<emr_encounter_id>"
# Get sdp_suki_token from Login: POST /api/v1/auth/login
sdp_suki_token = "<sdp_suki_token>"
# Required for single_auth partners
sdp_provider_id = "<sdp_provider_id>"
url = f"{BASE_URL}/api/v1/ambient/encounter/{emr_encounter_id}/notes"
headers = {
"sdp_suki_token": sdp_suki_token,
"sdp_provider_id": sdp_provider_id,
}
response = requests.get(url, headers=headers, timeout=60)
print("HTTP status:", response.status_code)
try:
response_body = response.json()
except ValueError:
print("Response was not JSON:")
print(response.text)
raise SystemExit(1)
print("Response body:")
print(json.dumps(response_body, indent=2))
if response.status_code == 200:
notes = response_body.get("notes") or []
print(f"Notes found: {len(notes)}")
for note in notes:
note_id = note.get("id")
created_at = note.get("created_at")
updated_at = note.get("updated_at")
print("note_id:", note_id)
print("created_at:", created_at)
print("updated_at:", updated_at)
print(
"Use note_id with Get Note Content, Get Note Context, "
"and Get Note Structured Data."
)
else:
print("List Encounter Notes failed.")
if isinstance(response_body, dict):
print("code:", response_body.get("code"))
print("message:", response_body.get("message"))
const BASE_URL = "https://sdp.suki.ai";
// Same emr_encounter_id you passed on Create Ambient Session
const emrEncounterId = "<emr_encounter_id>";
// Get sdp_suki_token from Login: POST /api/v1/auth/login
const sdpSukiToken = "<sdp_suki_token>";
// Required for single_auth partners
const sdpProviderId = "<sdp_provider_id>";
type EncounterNote = {
id?: string;
created_at?: string;
updated_at?: string;
};
type ListEncounterNotesResponse = {
notes?: EncounterNote[];
};
type ApiErrorResponse = {
code?: number;
message?: string;
};
const response = await fetch(
`${BASE_URL}/api/v1/ambient/encounter/${emrEncounterId}/notes`,
{
method: "GET",
headers: {
sdp_suki_token: sdpSukiToken,
sdp_provider_id: sdpProviderId,
},
}
);
const responseText = await response.text();
let responseBody: ListEncounterNotesResponse | ApiErrorResponse | unknown;
try {
responseBody = responseText ? JSON.parse(responseText) : {};
} catch {
console.error("Response was not JSON:");
console.error(responseText);
throw new Error("List Encounter Notes returned non-JSON response");
}
console.log("HTTP status:", response.status);
console.log("Response body:", JSON.stringify(responseBody, null, 2));
if (response.status === 200) {
const payload = responseBody as ListEncounterNotesResponse;
const notes = payload.notes || [];
console.log(`Notes found: ${notes.length}`);
for (const note of notes) {
console.log("note_id:", note.id);
console.log("created_at:", note.created_at);
console.log("updated_at:", note.updated_at);
console.log(
"Use note_id with Get Note Content, Get Note Context, and Get Note Structured Data."
);
}
} else {
const error = responseBody as ApiErrorResponse;
console.error("List Encounter Notes failed.");
console.error("code:", error.code);
console.error("message:", error.message);
}
Authorizations
Suki access token (suki_token) from Login or Register. Expires after one hour.
Headers
Optional for standard partners.
Required for:
- Bearer authentication. Use the same
provider_idreturned by the Login or Register API. - Single Auth Token authentication. Include the same
provider_idon every request assdp_provider_id.
Example:
"provider-123"
Path Parameters
UUID for the EMR encounter. Same value you pass as emr_encounter_id on Ambient session create for interoperable workflows.
Response
Success Response
Notes linked to the EMR encounter.
All notes (compositions) for the EMR encounter.
Show child attributes
Show child attributes
Last modified on August 20, 2026
Was this page helpful?
Lists notes for an EMR encounter.
curl --request GET \
--url https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes \
--header 'sdp_suki_token: <api-key>'import requests
url = "https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes"
headers = {"sdp_suki_token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {sdp_suki_token: '<api-key>'}};
fetch('https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"sdp_suki_token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("sdp_suki_token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes")
.header("sdp_suki_token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdp.suki.ai/api/v1/ambient/encounter/{emr_encounter_id}/notes")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["sdp_suki_token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"notes": [
{
"created_at": "2026-01-01T00:00:00Z",
"id": "123dfg-456dfg-789dfg-012dfg",
"status": "DEFAULT",
"updated_at": "2026-01-01T00:00:00Z"
}
]
}{
"code": 400,
"message": "invalid request"
}{
"code": 401,
"message": "invalid token"
}{
"code": 404,
"message": "not found"
}{
"code": 500,
"message": "internal server error"
}