Ambient Content Retrieval
Retrieve E/M Codes Using Encounter ID
Retrieve E/M codes for the encounter’s latest ambient session used for structured data
Listen to this pageabout 1 min
GET
/
api
/
v1
/
ambient
/
encounter
/
{encounter_id}
/
structured-data
/
em-codes
Gets the E/M codes for the encounter.
curl --request GET \
--url https://sdp.suki.ai/api/v1/ambient/encounter/{encounter_id}/structured-data/em-codes \
--header 'sdp_suki_token: <api-key>'import requests
url = "https://sdp.suki.ai/api/v1/ambient/encounter/{encounter_id}/structured-data/em-codes"
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/{encounter_id}/structured-data/em-codes', 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/{encounter_id}/structured-data/em-codes",
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/{encounter_id}/structured-data/em-codes"
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/{encounter_id}/structured-data/em-codes")
.header("sdp_suki_token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdp.suki.ai/api/v1/ambient/encounter/{encounter_id}/structured-data/em-codes")
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{
"em_codes": {
"values": [
{
"add_on_codes": [],
"code": "99214",
"family": "PROBLEM_BASED",
"id": "01JQ8Z2W9X4Y6Z8A0B2C4D6E8F",
"level": 4,
"mdm_based_features": {
"data_reviewed": "DATA_REVIEWED_LIMITED",
"data_reviewed_details": {
"entities": [
{
"entity": "Basic metabolic panel",
"evidence": "Labs from 2026-01-01 reviewed and interpreted"
}
],
"evidence": "Prior labs reviewed",
"level": "DATA_REVIEWED_LIMITED"
},
"problem_complexity": "PROBLEM_COMPLEXITY_MODERATE",
"problem_complexity_details": {
"entities": [
{
"entity": "Essential hypertension",
"evidence": "BP 150/95 discussed, lisinopril continued"
}
],
"evidence": "Two stable chronic illnesses managed",
"level": "PROBLEM_COMPLEXITY_MODERATE"
},
"rationale": "Moderate complexity with prescription drug management",
"risk": "RISK_MODERATE",
"risk_details": {
"entities": [
{
"entity": "Prescription drug management",
"evidence": "Lisinopril dose increased to 20mg"
}
],
"evidence": "Prescription drug management",
"level": "RISK_MODERATE"
}
},
"modifiers": [
"25"
],
"patient_type": "ESTABLISHED_PATIENT",
"time_based_features": {
"evidence": "35 minutes of total clinician time documented",
"time_taken": 35
},
"wellness_features": {
"evidence": "Annual wellness visit with preventive counseling"
}
}
]
}
}{
"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 retrieve Evaluation and Management (E/M) codes for an encounter. Pass the
encounter_id to get the em_codes generated from the encounter’s latest ambient session.
Suki uses the same session as the source for other structured encounter data, including diagnoses and orders, keeping the codes consistent with the rest of the visit.
Code examples
- Python
- TypeScript
import requests
encounter_id = "4d753ce1-bbff-43e1-950a-82dea2d86873"
url = f"https://sdp.suki.ai/api/v1/ambient/encounter/{encounter_id}/structured-data/em-codes"
headers = {
"sdp_suki_token": "<sdp_suki_token>",
"sdp_provider_id": "<sdp_provider_id>",
}
response = requests.get(url, headers=headers)
print(response.status_code)
print(response.json())
const encounterId = "4d753ce1-bbff-43e1-950a-82dea2d86873";
const url = `https://sdp.suki.ai/api/v1/ambient/encounter/${encounterId}/structured-data/em-codes`;
const response = await fetch(url, {
headers: {
sdp_suki_token: "<sdp_suki_token>",
sdp_provider_id: "<sdp_provider_id>",
},
});
console.log(response.status, await response.json());
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 patient encounter (visit). Use the encounter_id from session create or the UUID you assigned when grouping multiple sessions under one visit.
Response
Success Response
Response body for the /encounter/{encounter_id}/structured-data/em-codes endpoint
Generated E/M codes
Show child attributes
Show child attributes
Last modified on November 5, 2026
Was this page helpful?
Gets the E/M codes for the encounter.
curl --request GET \
--url https://sdp.suki.ai/api/v1/ambient/encounter/{encounter_id}/structured-data/em-codes \
--header 'sdp_suki_token: <api-key>'import requests
url = "https://sdp.suki.ai/api/v1/ambient/encounter/{encounter_id}/structured-data/em-codes"
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/{encounter_id}/structured-data/em-codes', 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/{encounter_id}/structured-data/em-codes",
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/{encounter_id}/structured-data/em-codes"
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/{encounter_id}/structured-data/em-codes")
.header("sdp_suki_token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdp.suki.ai/api/v1/ambient/encounter/{encounter_id}/structured-data/em-codes")
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{
"em_codes": {
"values": [
{
"add_on_codes": [],
"code": "99214",
"family": "PROBLEM_BASED",
"id": "01JQ8Z2W9X4Y6Z8A0B2C4D6E8F",
"level": 4,
"mdm_based_features": {
"data_reviewed": "DATA_REVIEWED_LIMITED",
"data_reviewed_details": {
"entities": [
{
"entity": "Basic metabolic panel",
"evidence": "Labs from 2026-01-01 reviewed and interpreted"
}
],
"evidence": "Prior labs reviewed",
"level": "DATA_REVIEWED_LIMITED"
},
"problem_complexity": "PROBLEM_COMPLEXITY_MODERATE",
"problem_complexity_details": {
"entities": [
{
"entity": "Essential hypertension",
"evidence": "BP 150/95 discussed, lisinopril continued"
}
],
"evidence": "Two stable chronic illnesses managed",
"level": "PROBLEM_COMPLEXITY_MODERATE"
},
"rationale": "Moderate complexity with prescription drug management",
"risk": "RISK_MODERATE",
"risk_details": {
"entities": [
{
"entity": "Prescription drug management",
"evidence": "Lisinopril dose increased to 20mg"
}
],
"evidence": "Prescription drug management",
"level": "RISK_MODERATE"
}
},
"modifiers": [
"25"
],
"patient_type": "ESTABLISHED_PATIENT",
"time_based_features": {
"evidence": "35 minutes of total clinician time documented",
"time_taken": 35
},
"wellness_features": {
"evidence": "Annual wellness visit with preventive counseling"
}
}
]
}
}{
"code": 400,
"message": "invalid request"
}{
"code": 401,
"message": "invalid token"
}{
"code": 404,
"message": "not found"
}{
"code": 500,
"message": "internal server error"
}