User Preferences
User Preferences
Update user personalization preferences for clinical note generation
PATCH
/
api
/
v1
/
user
/
preferences
cURL
curl --request PATCH \
--url https://sdp.suki.ai/api/v1/user/preferences \
--header 'Content-Type: application/json' \
--header 'sdp_suki_token: <sdp_suki_token>' \
--header 'sdp_provider_id: <sdp_provider_id>'import requests
url = "https://sdp.suki.ai/api/v1/user/preferences"
payload = { "personalization_preference": {
"section_format": [
{
"loinc": "10164-2",
"style": "NARRATIVE"
}
],
"verbosity": "CONCISE"
} }
headers = {
"sdp_suki_token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {sdp_suki_token: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
personalization_preference: {section_format: [{loinc: '10164-2', style: 'NARRATIVE'}], verbosity: 'CONCISE'}
})
};
fetch('https://sdp.suki.ai/api/v1/user/preferences', 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/user/preferences",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'personalization_preference' => [
'section_format' => [
[
'loinc' => '10164-2',
'style' => 'NARRATIVE'
]
],
'verbosity' => 'CONCISE'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sdp.suki.ai/api/v1/user/preferences"
payload := strings.NewReader("{\n \"personalization_preference\": {\n \"section_format\": [\n {\n \"loinc\": \"10164-2\",\n \"style\": \"NARRATIVE\"\n }\n ],\n \"verbosity\": \"CONCISE\"\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("sdp_suki_token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://sdp.suki.ai/api/v1/user/preferences")
.header("sdp_suki_token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"personalization_preference\": {\n \"section_format\": [\n {\n \"loinc\": \"10164-2\",\n \"style\": \"NARRATIVE\"\n }\n ],\n \"verbosity\": \"CONCISE\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdp.suki.ai/api/v1/user/preferences")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["sdp_suki_token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"personalization_preference\": {\n \"section_format\": [\n {\n \"loinc\": \"10164-2\",\n \"style\": \"NARRATIVE\"\n }\n ],\n \"verbosity\": \"CONCISE\"\n }\n}"
response = http.request(request)
puts response.read_body{
"preference": {
"personalization_preference": {
"section_format": [
{
"loinc": "10164-2",
"style": "NARRATIVE"
}
],
"verbosity": "CONCISE"
}
}
}{
"code": 400,
"message": "invalid request"
}{
"code": 401,
"message": "invalid token"
}{
"code": 403,
"message": "forbidden"
}{
"code": 404,
"message": "not found"
}{
"code": 500,
"message": "internal server error"
}Use this endpoint to update and save a userβs preferences. These settings are saved at the user level, not per , and will be applied to all of the userβs future interactions. For details, see Personalization. Section format preferences use codes to identify note sections.
This is a
PATCH request. Send only the fields you want to change. There is no partner-facing GET for preferences. Persist the values your UI shows, or call PATCH again when the clinician changes style.Call this endpoint before ambient session starts. Preferences apply to future notes for that provider. Do not send verbosity or
section_format in ambient session context. For settings UI, including what happens if style changes during a recording, refer to Note Personalization guide for recommendations.Code examples
- Python
- TypeScript
import requests
url = "https://sdp.suki-stage.com/api/v1/user/preferences"
headers = {
"sdp_suki_token": "<sdp_suki_token>",
"sdp_provider_id": "<sdp_provider_id>",
"Content-Type": "application/json"
}
payload = {
"personalization_preference": {
"verbosity": "CONCISE", # Options: CONCISE, BALANCED, DETAILED
"section_format": [
{
"loinc": "10164-2",
"style": "NARRATIVE" # Options: NARRATIVE, BULLETED
}
]
}
}
response = requests.patch(url, json=payload, headers=headers)
if response.status_code == 200:
data = response.json()
print("Preferences updated successfully")
print(f"Updated preferences: {data}")
else:
print(f"Failed to update preferences: {response.status_code}")
print(response.json())
const response = await fetch('https://sdp.suki-stage.com/api/v1/user/preferences', {
method: 'PATCH',
headers: {
'sdp_suki_token': '<sdp_suki_token>',
'sdp_provider_id': '<sdp_provider_id>',
'Content-Type': 'application/json'
},
body: JSON.stringify({
personalization_preference: {
verbosity: 'CONCISE', // Options: CONCISE, BALANCED, DETAILED
section_format: [
{
loinc: '10164-2',
style: 'NARRATIVE' // Options: NARRATIVE, BULLETED
}
]
}
})
});
if (response.ok) {
const data = await response.json();
console.log('Preferences updated successfully');
console.log('Updated preferences:', data);
} else {
const error = await response.json();
console.error(`Failed to update preferences: ${response.status}`, error);
}
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"
Body
application/json
Personalization settings to create or update for the authenticated user.
Optional - Personalization settings such as note verbosity and section format.
Show child attributes
Show child attributes
Response
Request succeeded.
Response body for the /user/preferences endpoint
Updated user preference settings
Show child attributes
Show child attributes
Last modified on August 20, 2026
Was this page helpful?
cURL
curl --request PATCH \
--url https://sdp.suki.ai/api/v1/user/preferences \
--header 'Content-Type: application/json' \
--header 'sdp_suki_token: <sdp_suki_token>' \
--header 'sdp_provider_id: <sdp_provider_id>'import requests
url = "https://sdp.suki.ai/api/v1/user/preferences"
payload = { "personalization_preference": {
"section_format": [
{
"loinc": "10164-2",
"style": "NARRATIVE"
}
],
"verbosity": "CONCISE"
} }
headers = {
"sdp_suki_token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.patch(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PATCH',
headers: {sdp_suki_token: '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
personalization_preference: {section_format: [{loinc: '10164-2', style: 'NARRATIVE'}], verbosity: 'CONCISE'}
})
};
fetch('https://sdp.suki.ai/api/v1/user/preferences', 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/user/preferences",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PATCH",
CURLOPT_POSTFIELDS => json_encode([
'personalization_preference' => [
'section_format' => [
[
'loinc' => '10164-2',
'style' => 'NARRATIVE'
]
],
'verbosity' => 'CONCISE'
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"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"
"strings"
"net/http"
"io"
)
func main() {
url := "https://sdp.suki.ai/api/v1/user/preferences"
payload := strings.NewReader("{\n \"personalization_preference\": {\n \"section_format\": [\n {\n \"loinc\": \"10164-2\",\n \"style\": \"NARRATIVE\"\n }\n ],\n \"verbosity\": \"CONCISE\"\n }\n}")
req, _ := http.NewRequest("PATCH", url, payload)
req.Header.Add("sdp_suki_token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.patch("https://sdp.suki.ai/api/v1/user/preferences")
.header("sdp_suki_token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"personalization_preference\": {\n \"section_format\": [\n {\n \"loinc\": \"10164-2\",\n \"style\": \"NARRATIVE\"\n }\n ],\n \"verbosity\": \"CONCISE\"\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://sdp.suki.ai/api/v1/user/preferences")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Patch.new(url)
request["sdp_suki_token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"personalization_preference\": {\n \"section_format\": [\n {\n \"loinc\": \"10164-2\",\n \"style\": \"NARRATIVE\"\n }\n ],\n \"verbosity\": \"CONCISE\"\n }\n}"
response = http.request(request)
puts response.read_body{
"preference": {
"personalization_preference": {
"section_format": [
{
"loinc": "10164-2",
"style": "NARRATIVE"
}
],
"verbosity": "CONCISE"
}
}
}{
"code": 400,
"message": "invalid request"
}{
"code": 401,
"message": "invalid token"
}{
"code": 403,
"message": "forbidden"
}{
"code": 404,
"message": "not found"
}{
"code": 500,
"message": "internal server error"
}