curl --request POST \ --url https://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId} \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "name": "Al-Falah credit card payment reminder", "description": "Reminds cardholders of the due date and offers to log a payment promise", "public": false, "config": { "agent": { "instructions": "آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔", "initialGreeting": true, "greetingInstructions": "السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔" }, "session": { "ttl": 1800, "roomPrefix": "al-falah" }, "stt": { "default": { "provider": "soniox", "model": "stt-rt-preview", "language": "ur" } }, "tts": { "default": { "provider": "upliftai", "voiceId": "v_meklc281", "outputFormat": "MP3_22050_32" } }, "llm": { "default": { "provider": "google", "model": "gemini-2.5-flash" } } }}'
import requests
url = "https://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}"
payload = {
"name": "Al-Falah credit card payment reminder",
"description": "Reminds cardholders of the due date and offers to log a payment promise",
"public": False,
"config": {
"agent": {
"instructions": "آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔",
"initialGreeting": True,
"greetingInstructions": "السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔"
},
"session": {
"ttl": 1800,
"roomPrefix": "al-falah"
},
"stt": { "default": {
"provider": "soniox",
"model": "stt-rt-preview",
"language": "ur"
} },
"tts": { "default": {
"provider": "upliftai",
"voiceId": "v_meklc281",
"outputFormat": "MP3_22050_32"
} },
"llm": { "default": {
"provider": "google",
"model": "gemini-2.5-flash"
} }
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Al-Falah credit card payment reminder',
description: 'Reminds cardholders of the due date and offers to log a payment promise',
public: false,
config: {
agent: {
instructions: 'آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔',
initialGreeting: true,
greetingInstructions: 'السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔'
},
session: {ttl: 1800, roomPrefix: 'al-falah'},
stt: {default: {provider: 'soniox', model: 'stt-rt-preview', language: 'ur'}},
tts: {
default: {provider: 'upliftai', voiceId: 'v_meklc281', outputFormat: 'MP3_22050_32'}
},
llm: {default: {provider: 'google', model: 'gemini-2.5-flash'}}
}
})
};
fetch('https://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}', 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://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Al-Falah credit card payment reminder',
'description' => 'Reminds cardholders of the due date and offers to log a payment promise',
'public' => false,
'config' => [
'agent' => [
'instructions' => 'آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔',
'initialGreeting' => true,
'greetingInstructions' => 'السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔'
],
'session' => [
'ttl' => 1800,
'roomPrefix' => 'al-falah'
],
'stt' => [
'default' => [
'provider' => 'soniox',
'model' => 'stt-rt-preview',
'language' => 'ur'
]
],
'tts' => [
'default' => [
'provider' => 'upliftai',
'voiceId' => 'v_meklc281',
'outputFormat' => 'MP3_22050_32'
]
],
'llm' => [
'default' => [
'provider' => 'google',
'model' => 'gemini-2.5-flash'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}"
payload := strings.NewReader("{\n \"name\": \"Al-Falah credit card payment reminder\",\n \"description\": \"Reminds cardholders of the due date and offers to log a payment promise\",\n \"public\": false,\n \"config\": {\n \"agent\": {\n \"instructions\": \"آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔\",\n \"initialGreeting\": true,\n \"greetingInstructions\": \"السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔\"\n },\n \"session\": {\n \"ttl\": 1800,\n \"roomPrefix\": \"al-falah\"\n },\n \"stt\": {\n \"default\": {\n \"provider\": \"soniox\",\n \"model\": \"stt-rt-preview\",\n \"language\": \"ur\"\n }\n },\n \"tts\": {\n \"default\": {\n \"provider\": \"upliftai\",\n \"voiceId\": \"v_meklc281\",\n \"outputFormat\": \"MP3_22050_32\"\n }\n },\n \"llm\": {\n \"default\": {\n \"provider\": \"google\",\n \"model\": \"gemini-2.5-flash\"\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.post("https://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Al-Falah credit card payment reminder\",\n \"description\": \"Reminds cardholders of the due date and offers to log a payment promise\",\n \"public\": false,\n \"config\": {\n \"agent\": {\n \"instructions\": \"آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔\",\n \"initialGreeting\": true,\n \"greetingInstructions\": \"السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔\"\n },\n \"session\": {\n \"ttl\": 1800,\n \"roomPrefix\": \"al-falah\"\n },\n \"stt\": {\n \"default\": {\n \"provider\": \"soniox\",\n \"model\": \"stt-rt-preview\",\n \"language\": \"ur\"\n }\n },\n \"tts\": {\n \"default\": {\n \"provider\": \"upliftai\",\n \"voiceId\": \"v_meklc281\",\n \"outputFormat\": \"MP3_22050_32\"\n }\n },\n \"llm\": {\n \"default\": {\n \"provider\": \"google\",\n \"model\": \"gemini-2.5-flash\"\n }\n }\n }\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Al-Falah credit card payment reminder\",\n \"description\": \"Reminds cardholders of the due date and offers to log a payment promise\",\n \"public\": false,\n \"config\": {\n \"agent\": {\n \"instructions\": \"آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔\",\n \"initialGreeting\": true,\n \"greetingInstructions\": \"السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔\"\n },\n \"session\": {\n \"ttl\": 1800,\n \"roomPrefix\": \"al-falah\"\n },\n \"stt\": {\n \"default\": {\n \"provider\": \"soniox\",\n \"model\": \"stt-rt-preview\",\n \"language\": \"ur\"\n }\n },\n \"tts\": {\n \"default\": {\n \"provider\": \"upliftai\",\n \"voiceId\": \"v_meklc281\",\n \"outputFormat\": \"MP3_22050_32\"\n }\n },\n \"llm\": {\n \"default\": {\n \"provider\": \"google\",\n \"model\": \"gemini-2.5-flash\"\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body
{ "realtimeAssistantId": "80b00435-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "organizationId": "a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "projectId": "c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "name": "Al-Falah credit card payment reminder", "description": "Reminds cardholders of the due date and offers to log a payment promise", "config": { "agent": { "instructions": "آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔", "initialGreeting": true, "greetingInstructions": "السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔" }, "session": { "ttl": 1800, "roomPrefix": "al-falah" }, "stt": { "default": { "provider": "soniox", "model": "stt-rt-preview", "language": "ur" } }, "tts": { "default": { "provider": "upliftai", "voiceId": "v_meklc281", "outputFormat": "MP3_22050_32" } }, "llm": { "default": { "provider": "google", "model": "gemini-2.5-flash" } } }, "public": false, "createdAt": "2026-08-18T04:37:53.727Z", "updatedAt": "2026-08-18T04:39:28.828Z", "createdBy": "ef80cc74-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "updatedBy": "ef80cc74-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "version": 6}
Assistants
Update an assistant
This replaces rather than merges, so read the assistant, change what you need, and send the whole object back. Leaving out description or public clears them — public resets to false — while name and config keep their stored values. Only populated parts of config are validated, so a config missing agent.instructions saves fine and leaves the assistant unable to take calls.
Until the assistant’s first publish, a save goes live at once. After that, an update changes the draft only. Calls and share links keep running the published version, and the public check reads it too, until you publish again.
noiseCancellation and backgroundNoise are checked on every save that sends config. An assistant stored with a bad value before these checks gets a 400 on that save until you fix it. A save without config still goes through.
POST
/
realtime-assistants
/
{realtimeAssistantId}
Update an assistant
curl --request POST \ --url https://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId} \ --header 'Authorization: Bearer <token>' \ --header 'Content-Type: application/json' \ --data '{ "name": "Al-Falah credit card payment reminder", "description": "Reminds cardholders of the due date and offers to log a payment promise", "public": false, "config": { "agent": { "instructions": "آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔", "initialGreeting": true, "greetingInstructions": "السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔" }, "session": { "ttl": 1800, "roomPrefix": "al-falah" }, "stt": { "default": { "provider": "soniox", "model": "stt-rt-preview", "language": "ur" } }, "tts": { "default": { "provider": "upliftai", "voiceId": "v_meklc281", "outputFormat": "MP3_22050_32" } }, "llm": { "default": { "provider": "google", "model": "gemini-2.5-flash" } } }}'
import requests
url = "https://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}"
payload = {
"name": "Al-Falah credit card payment reminder",
"description": "Reminds cardholders of the due date and offers to log a payment promise",
"public": False,
"config": {
"agent": {
"instructions": "آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔",
"initialGreeting": True,
"greetingInstructions": "السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔"
},
"session": {
"ttl": 1800,
"roomPrefix": "al-falah"
},
"stt": { "default": {
"provider": "soniox",
"model": "stt-rt-preview",
"language": "ur"
} },
"tts": { "default": {
"provider": "upliftai",
"voiceId": "v_meklc281",
"outputFormat": "MP3_22050_32"
} },
"llm": { "default": {
"provider": "google",
"model": "gemini-2.5-flash"
} }
}
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)
const options = {
method: 'POST',
headers: {Authorization: 'Bearer <token>', 'Content-Type': 'application/json'},
body: JSON.stringify({
name: 'Al-Falah credit card payment reminder',
description: 'Reminds cardholders of the due date and offers to log a payment promise',
public: false,
config: {
agent: {
instructions: 'آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔',
initialGreeting: true,
greetingInstructions: 'السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔'
},
session: {ttl: 1800, roomPrefix: 'al-falah'},
stt: {default: {provider: 'soniox', model: 'stt-rt-preview', language: 'ur'}},
tts: {
default: {provider: 'upliftai', voiceId: 'v_meklc281', outputFormat: 'MP3_22050_32'}
},
llm: {default: {provider: 'google', model: 'gemini-2.5-flash'}}
}
})
};
fetch('https://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}', 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://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "POST",
CURLOPT_POSTFIELDS => json_encode([
'name' => 'Al-Falah credit card payment reminder',
'description' => 'Reminds cardholders of the due date and offers to log a payment promise',
'public' => false,
'config' => [
'agent' => [
'instructions' => 'آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔',
'initialGreeting' => true,
'greetingInstructions' => 'السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔'
],
'session' => [
'ttl' => 1800,
'roomPrefix' => 'al-falah'
],
'stt' => [
'default' => [
'provider' => 'soniox',
'model' => 'stt-rt-preview',
'language' => 'ur'
]
],
'tts' => [
'default' => [
'provider' => 'upliftai',
'voiceId' => 'v_meklc281',
'outputFormat' => 'MP3_22050_32'
]
],
'llm' => [
'default' => [
'provider' => 'google',
'model' => 'gemini-2.5-flash'
]
]
]
]),
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>",
"Content-Type: application/json"
],
]);
$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://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}"
payload := strings.NewReader("{\n \"name\": \"Al-Falah credit card payment reminder\",\n \"description\": \"Reminds cardholders of the due date and offers to log a payment promise\",\n \"public\": false,\n \"config\": {\n \"agent\": {\n \"instructions\": \"آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔\",\n \"initialGreeting\": true,\n \"greetingInstructions\": \"السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔\"\n },\n \"session\": {\n \"ttl\": 1800,\n \"roomPrefix\": \"al-falah\"\n },\n \"stt\": {\n \"default\": {\n \"provider\": \"soniox\",\n \"model\": \"stt-rt-preview\",\n \"language\": \"ur\"\n }\n },\n \"tts\": {\n \"default\": {\n \"provider\": \"upliftai\",\n \"voiceId\": \"v_meklc281\",\n \"outputFormat\": \"MP3_22050_32\"\n }\n },\n \"llm\": {\n \"default\": {\n \"provider\": \"google\",\n \"model\": \"gemini-2.5-flash\"\n }\n }\n }\n}")
req, _ := http.NewRequest("POST", url, payload)
req.Header.Add("Authorization", "Bearer <token>")
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.post("https://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}")
.header("Authorization", "Bearer <token>")
.header("Content-Type", "application/json")
.body("{\n \"name\": \"Al-Falah credit card payment reminder\",\n \"description\": \"Reminds cardholders of the due date and offers to log a payment promise\",\n \"public\": false,\n \"config\": {\n \"agent\": {\n \"instructions\": \"آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔\",\n \"initialGreeting\": true,\n \"greetingInstructions\": \"السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔\"\n },\n \"session\": {\n \"ttl\": 1800,\n \"roomPrefix\": \"al-falah\"\n },\n \"stt\": {\n \"default\": {\n \"provider\": \"soniox\",\n \"model\": \"stt-rt-preview\",\n \"language\": \"ur\"\n }\n },\n \"tts\": {\n \"default\": {\n \"provider\": \"upliftai\",\n \"voiceId\": \"v_meklc281\",\n \"outputFormat\": \"MP3_22050_32\"\n }\n },\n \"llm\": {\n \"default\": {\n \"provider\": \"google\",\n \"model\": \"gemini-2.5-flash\"\n }\n }\n }\n}")
.asString();
require 'uri'
require 'net/http'
url = URI("https://api.upliftai.org/v1/realtime-assistants/{realtimeAssistantId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["Authorization"] = 'Bearer <token>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"name\": \"Al-Falah credit card payment reminder\",\n \"description\": \"Reminds cardholders of the due date and offers to log a payment promise\",\n \"public\": false,\n \"config\": {\n \"agent\": {\n \"instructions\": \"آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔\",\n \"initialGreeting\": true,\n \"greetingInstructions\": \"السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔\"\n },\n \"session\": {\n \"ttl\": 1800,\n \"roomPrefix\": \"al-falah\"\n },\n \"stt\": {\n \"default\": {\n \"provider\": \"soniox\",\n \"model\": \"stt-rt-preview\",\n \"language\": \"ur\"\n }\n },\n \"tts\": {\n \"default\": {\n \"provider\": \"upliftai\",\n \"voiceId\": \"v_meklc281\",\n \"outputFormat\": \"MP3_22050_32\"\n }\n },\n \"llm\": {\n \"default\": {\n \"provider\": \"google\",\n \"model\": \"gemini-2.5-flash\"\n }\n }\n }\n}"
response = http.request(request)
puts response.read_body
{ "realtimeAssistantId": "80b00435-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "organizationId": "a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "projectId": "c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "name": "Al-Falah credit card payment reminder", "description": "Reminds cardholders of the due date and offers to log a payment promise", "config": { "agent": { "instructions": "آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔", "initialGreeting": true, "greetingInstructions": "السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔" }, "session": { "ttl": 1800, "roomPrefix": "al-falah" }, "stt": { "default": { "provider": "soniox", "model": "stt-rt-preview", "language": "ur" } }, "tts": { "default": { "provider": "upliftai", "voiceId": "v_meklc281", "outputFormat": "MP3_22050_32" } }, "llm": { "default": { "provider": "google", "model": "gemini-2.5-flash" } } }, "public": false, "createdAt": "2026-08-18T04:37:53.727Z", "updatedAt": "2026-08-18T04:39:28.828Z", "createdBy": "ef80cc74-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "updatedBy": "ef80cc74-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "version": 6}
Allows anyone to open a browser session against this assistant without an API key. On a published assistant, the change takes effect at the next publish.
The version this response shows. Every save bumps it, so published numbers skip the saves in between.
Required range: x >= 1
{"docsConfig":{"theme":"mint","$schema":"https://leaves.mintlify.com/schema/docs.json","name":"Uplift AI API Docs","colors":{"primary":"#16A34A","light":"#07C983","dark":"#15803D"},"logo":{"light":"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/logo/logo.png?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=c3823c19a41e66e704751aa27b97cde9","dark":"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/logo/logo.png?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=c3823c19a41e66e704751aa27b97cde9"},"favicon":"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/favicon.ico?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=a680f5e0b8dc59015e866648796975b1","appearance":{"default":"light","strict":true},"navbar":{"links":[{"href":"mailto:founders@upliftai.org","label":"Support"}],"primary":{"type":"button","label":"Sign Up","href":"https://upliftai.org"}},"footer":{"socials":{"linkedin":"https://www.linkedin.com/company/upliftai"}},"integrations":{"posthog":{"apiKey":"phc_EGK5H7jrhZrIhLXWfAWCmjjljJQwF6ejp1P73EtmG7q","apiHost":"https://us.i.posthog.com"}},"contextual":{"options":["copy","view","chatgpt","claude"],"display":"header"},"styling":{"latex":false},"navigation":{"pages":[]}},"deployment":{"deploymentMetadataValue":{"subdomain":"upliftai","hasAudioNarration":false,"actualSubdomain":"upliftai","customDomains":["docs.upliftai.org"],"gitSource":{"type":"github","owner":"uplift-initiative","repo":"runtime-api-mintlify-docs","deployBranch":"main","contentDirectory":"","isPrivate":true,"mountPath":"","label":""},"entitlements":{},"buildId":"6ae19c28ba4b20fd94ecdb26","clientVersion":"0.0.4102","searchFilterCounts":[{"language":"default","tag":"Voice Agents","count":81},{"language":"default","tag":"API Reference","count":51},{"language":"default","tag":"Orator API","count":25},{"language":"default","tag":"SDKs","count":18},{"language":"default","tag":"Assistants","count":16},{"language":"default","tag":"Campaigns","count":11},{"language":"default","tag":"Contacts","count":11},{"language":"default","tag":"Orator REST API","count":9},{"language":"default","tag":"Node.js SDK","count":8},{"language":"default","tag":"Campaign outcomes","count":7}]},"assistantConfig":{},"basePath":"","hasChatPermissions":false,"hasWebMcpPermissions":false,"toggles":[{"name":"kill-isr","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-rbac-roles","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-mintlify-slack","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"agent-integrations-settings","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"rbac-expansion","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-pr-grouping","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"custom-prefix","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"analytics-v7","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"user-flows-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"no-publish-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-onboarding","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"llms-txt-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving-live","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"stripTemperatureMiddleware","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"support-platform-pylon-zendesk","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"snapshot-serving","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"instant-rollback","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications-server","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"granular-notifications","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automations-fable","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fixed-ai-action-pricing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"automation-resolve-merge-conflict","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"scoped-publishing","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"mintql","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"page-level-analytics","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-version-history-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"billing-page-v2","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"full-page-search","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workspace-projects","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"assistant-v5","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"fork-pr-previews","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"revalidation-jwt","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-sso-scim","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"hobby-abuse-scan","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"dashboard-inbox","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-signup","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-dual-write","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"workos-enabled","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"approve-review-flow","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"editor-metadata","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"sso-setup-deadline-banner","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"turbopuffer-serve","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false},{"name":"live-agents","enabled":true,"variant":{"name":"disabled","enabled":false,"feature_enabled":true},"impressionData":false}],"googleFontsInlined":false},"customCss":[{"filePath":"style.css","content":".urdu{font-family:'Noto Nastaliq Urdu', sans-serif;font-size:1.2em;line-height:1.5em;text-align:justify;direction:rtl;unicode-bidi:embed;font-weight:normal;font-style:normal;font-variant:normal;text-transform:none}"}],"page":{"pagePath":"api-reference/assistants/update-an-assistant","slug":"/api-reference/assistants/update-an-assistant","pageMetadata":{"title":"Update an assistant","description":"This replaces rather than merges, so read the assistant, change what you need, and send the whole object back. Leaving out `description` or `public` clears them — `public` resets to false — while `name` and `config` keep their stored values. Only populated parts of `config` are validated, so a config missing `agent.instructions` saves fine and leaves the assistant unable to take calls.\n\nUntil the assistant's first publish, a save goes live at once. After that, an update changes the draft only. Calls and share links keep running the published version, and the `public` check reads it too, until you [publish](/api-reference/assistants/publish-an-assistant-version) again.\n\n`noiseCancellation` and `backgroundNoise` are checked on every save that sends `config`. An assistant stored with a bad value before these checks gets a 400 on that save until you fix it. A save without `config` still goes through.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}","href":"/api-reference/assistants/update-an-assistant","autogeneratedByOpenApi":true},"description":{"compiledSource":"\"use strict\";\nconst {Fragment: _Fragment, jsx: _jsx, jsxs: _jsxs} = arguments[0];\nconst {useMDXComponents: _provideComponents} = arguments[0];\nfunction _createMdxContent(props) {\n const _components = {\n a: \"a\",\n code: \"code\",\n p: \"p\",\n ..._provideComponents(),\n ...props.components\n };\n return _jsxs(_Fragment, {\n children: [_jsxs(_components.p, {\n children: [\"This replaces rather than merges, so read the assistant, change what you need, and send the whole object back. Leaving out \", _jsx(_components.code, {\n children: \"description\"\n }), \" or \", _jsx(_components.code, {\n children: \"public\"\n }), \" clears them — \", _jsx(_components.code, {\n children: \"public\"\n }), \" resets to false — while \", _jsx(_components.code, {\n children: \"name\"\n }), \" and \", _jsx(_components.code, {\n children: \"config\"\n }), \" keep their stored values. Only populated parts of \", _jsx(_components.code, {\n children: \"config\"\n }), \" are validated, so a config missing \", _jsx(_components.code, {\n children: \"agent.instructions\"\n }), \" saves fine and leaves the assistant unable to take calls.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [\"Until the assistant’s first publish, a save goes live at once. After that, an update changes the draft only. Calls and share links keep running the published version, and the \", _jsx(_components.code, {\n children: \"public\"\n }), \" check reads it too, until you \", _jsx(_components.a, {\n href: \"/api-reference/assistants/publish-an-assistant-version\",\n children: \"publish\"\n }), \" again.\"]\n }), \"\\n\", _jsxs(_components.p, {\n children: [_jsx(_components.code, {\n children: \"noiseCancellation\"\n }), \" and \", _jsx(_components.code, {\n children: \"backgroundNoise\"\n }), \" are checked on every save that sends \", _jsx(_components.code, {\n children: \"config\"\n }), \". An assistant stored with a bad value before these checks gets a 400 on that save until you fix it. A save without \", _jsx(_components.code, {\n children: \"config\"\n }), \" still goes through.\"]\n })]\n });\n}\nfunction MDXContent(props = {}) {\n const {wrapper: MDXLayout} = {\n ..._provideComponents(),\n ...props.components\n };\n return MDXLayout ? _jsx(MDXLayout, {\n ...props,\n children: _jsx(_createMdxContent, {\n ...props\n })\n }) : _createMdxContent(props);\n}\nreturn {\n default: MDXContent\n};\n","frontmatter":{},"scope":{}},"pageType":"default","mdx":{"mdxSource":{"compiledSource":"\"use strict\";const{Fragment:_Fragment,jsx:_jsx}=arguments[0];const{useMDXComponents:_provideComponents}=arguments[0];function _createMdxContent(props){return _jsx(_Fragment,{})}function MDXContent(props={}){const{wrapper:MDXLayout}={..._provideComponents(),...props.components};return MDXLayout?_jsx(MDXLayout,{...props,children:_jsx(_createMdxContent,{...props})}):_createMdxContent(props)}return{default:MDXContent}","frontmatter":{},"scope":{"config":{},"pageMetadata":{"title":"Update an assistant","description":"This replaces rather than merges, so read the assistant, change what you need, and send the whole object back. Leaving out `description` or `public` clears them — `public` resets to false — while `name` and `config` keep their stored values. Only populated parts of `config` are validated, so a config missing `agent.instructions` saves fine and leaves the assistant unable to take calls.\n\nUntil the assistant's first publish, a save goes live at once. After that, an update changes the draft only. Calls and share links keep running the published version, and the `public` check reads it too, until you [publish](/api-reference/assistants/publish-an-assistant-version) again.\n\n`noiseCancellation` and `backgroundNoise` are checked on every save that sends `config`. An assistant stored with a bad value before these checks gets a 400 on that save until you fix it. A save without `config` still goes through.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}","href":"/api-reference/assistants/update-an-assistant","autogeneratedByOpenApi":true}}},"mdxSourceWithNoJs":null},"mdxExtracts":{"tableOfContents":[],"codeExamples":{}},"jsLinks":["/_mintlify/custom/upliftai/ed1a602c792dd94e/data/voices.js"],"openApiReferenceData":{"operation":{"operationId":"updateRealtimeAssistant","tags":["Assistants"],"summary":"Update an assistant","description":"This replaces rather than merges, so read the assistant, change what you need, and send the whole object back. Leaving out `description` or `public` clears them — `public` resets to false — while `name` and `config` keep their stored values. Only populated parts of `config` are validated, so a config missing `agent.instructions` saves fine and leaves the assistant unable to take calls.\n\nUntil the assistant's first publish, a save goes live at once. After that, an update changes the draft only. Calls and share links keep running the published version, and the `public` check reads it too, until you [publish](/api-reference/assistants/publish-an-assistant-version) again.\n\n`noiseCancellation` and `backgroundNoise` are checked on every save that sends `config`. An assistant stored with a bad value before these checks gets a 400 on that save until you fix it. A save without `config` still goes through.","parameters":["d87f682d-959f-4063-b4d0-b2575b14b820"],"requestBody":"f220c525-dd49-4d4a-a860-f21a82575558","responses":{"200":"a742b869-b387-4335-b7e7-3ff30f8212c4","400":"05b60784-cf78-42b0-ae85-cb665bef7781","401":"d9b22b97-92b0-4b86-a6d6-8c2aa3087df4","403":"3cb82877-ceff-439c-a436-3b1681253586","404":"11a3aab3-0e87-4abe-83f8-ff68780a0aab"},"method":"post","type":"path","servers":["f8e1e33f-9cf0-4bbb-b41e-9136c129f7ef"],"security":["73bac4ee-98c5-4fa2-834c-9f180d41c637"],"path":"/realtime-assistants/{realtimeAssistantId}","baseUrlOptions":["https://api.upliftai.org/v1"],"title":"Update an assistant","codeSamples":[],"requiredOnlyExamples":false,"requestExampleType":"generated","responseExampleType":"generated"},"dependencies":{"parameters":{"d87f682d-959f-4063-b4d0-b2575b14b820":{"name":"realtimeAssistantId","in":"path","required":true,"schema":{"type":"string","format":"uuid","isRequired":true,"uniqueKey":"","typeLabel":"string\u003cuuid>"},"example":"80b00435-4f7d-4555-b7c2-778229512f0b"}},"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"name":{"type":"string","description":"An empty string is accepted.","uniqueKey":"name","typeLabel":"string"},"description":{"type":"string","uniqueKey":"description","typeLabel":"string"},"config":{"type":"object","additionalProperties":true,"description":"Keys beyond those listed are stored and returned unchanged.","properties":{"agent":{"type":"object","properties":{"instructions":{"type":"string","minLength":1,"description":"System prompt. For Urdu assistants, tell the model to reply in Nastaliq script — otherwise it tends to answer in Roman Urdu.","isRequired":true,"uniqueKey":"config.agent.instructions","typeLabel":"string"},"initialGreeting":{"type":"boolean","default":false,"description":"Whether the assistant speaks first instead of waiting for the caller.","uniqueKey":"config.agent.initialGreeting","typeLabel":"boolean"},"greetingInstructions":{"type":"string","description":"Describe how the agent should greet — it uses the prompt to come up with the opening line, so you can say \"Say salam and confirm you are talking to the right person.\" Ignored unless `initialGreeting` is true.","uniqueKey":"config.agent.greetingInstructions","typeLabel":"string"},"tools":{"type":"array","description":"A tool with no `execution` is a client tool: we deliver the call to your browser client over the session, with the tool name as the RPC method. A tool whose `execution` points at a tool endpoint connection goes to that endpoint instead, on phone calls and web sessions alike.","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","minLength":1,"description":"What the tool does. The model picks the tool from this text.","isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].description","typeLabel":"string"},"parameters":{"type":"object","description":"JSON Schema for the tool's arguments.","properties":{"type":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].parameters.type","typeLabel":"string"},"properties":{"type":"object","isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].parameters.properties","typeLabel":"object"},"required":{"type":"array","items":{"type":"string","uniqueKey":"config.agent.tools.items.[INDEX].parameters.required.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.agent.tools.items.[INDEX].parameters.required","typeLabel":"string[]"}},"required":["type","properties"],"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].parameters","typeLabel":"object"},"timeout":{"type":"number","minimum":0,"description":"Seconds to wait for a client tool's handler before the assistant moves on. Default 10. Webhook tools always get 10 seconds.","uniqueKey":"config.agent.tools.items.[INDEX].timeout","typeLabel":"number"},"execution":{"type":"object","description":"Where the tool runs. Omit it for a client tool, which your web page or mobile app executes over the session. Set `type: tool_endpoint` with the id of a tool endpoint you added on the [portal](https://upliftai.org/app/calling/webhooks) to have the platform POST the call to your server instead. See [Webhook tools](/voice-agents/tools/webhook-tools).","properties":{"type":{"type":"string","enum":["client_rpc","tool_endpoint"],"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].execution.type","typeLabel":"enum\u003cstring>"},"connectionId":{"type":"string","description":"Required when `type` is `tool_endpoint`. The id of a tool endpoint in this project, from the [portal](https://upliftai.org/app/calling/webhooks). A webhook's id is rejected at call time. Not checked on create: a missing or wrong id surfaces as an error result on the call, not a 400.","uniqueKey":"config.agent.tools.items.[INDEX].execution.connectionId","typeLabel":"string"}},"required":["type"],"uniqueKey":"config.agent.tools.items.[INDEX].execution","typeLabel":"object"}},"required":["name","description","parameters"],"uniqueKey":"config.agent.tools.items.[INDEX]","typeLabel":"object"},"uniqueKey":"config.agent.tools","typeLabel":"object[]"}},"required":["instructions"],"isRequired":true,"uniqueKey":"config.agent","typeLabel":"object"},"grading":{"type":"object","description":"Assistant-level scorecard. Every non-campaign call of this assistant — web, inbound, raw API dial — is graded against it; campaign calls use the campaign's own scorecard instead. See [Scorecards](/voice-agents/assistants/scorecards). A `scorecard` that is not an object, or whose points don't total 100, is a 400.","properties":{"scorecard":{"type":"object","description":"The rubric every call on this campaign is graded against. It freezes once any call has been graded, so revise it before launching.","properties":{"rubricVersionId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rubricVersionId","typeLabel":"string"},"rules":{"type":"array","minItems":1,"description":"Rule ids must be unique and their `points` must total exactly 100.","items":{"type":"object","properties":{"ruleId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].ruleId","typeLabel":"string"},"title":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].title","typeLabel":"string"},"instruction":{"type":"string","minLength":1,"description":"What the grader looks for in the transcript to award this rule.","isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].instruction","typeLabel":"string"},"scoringType":{"type":"string","enum":["binary"],"description":"Each rule is earned in full or not at all.","isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].scoringType","typeLabel":"enum\u003cstring>"},"points":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].points","typeLabel":"integer"},"evidenceRequired":{"type":"boolean","description":"When true, the grader must cite a transcript quote to award the rule.","uniqueKey":"config.grading.scorecard.rules.items.[INDEX].evidenceRequired","typeLabel":"boolean"}},"required":["ruleId","title","instruction","scoringType","points"],"uniqueKey":"config.grading.scorecard.rules.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"config.grading.scorecard.rules","typeLabel":"object[]"}},"required":["rubricVersionId","rules"],"uniqueKey":"config.grading.scorecard","typeLabel":"object"}},"uniqueKey":"config.grading","typeLabel":"object"},"noiseCancellation":{"type":"object","description":"Cleans the caller's audio before speech-to-text. `enabled` is required, and an unknown `model` is a 400.","properties":{"enabled":{"type":"boolean","isRequired":true,"uniqueKey":"config.noiseCancellation.enabled","typeLabel":"boolean"},"model":{"type":"string","enum":["quail_vf_s","quail_vf_l","quail_l"],"default":"quail_vf_s","uniqueKey":"config.noiseCancellation.model","typeLabel":"enum\u003cstring>"},"level":{"type":"number","default":0.1,"description":"Suppression strength. Stronger settings clipped short Urdu backchannels, which is why the default is low.","uniqueKey":"config.noiseCancellation.level","typeLabel":"number"}},"required":["enabled"],"uniqueKey":"config.noiseCancellation","typeLabel":"object"},"backgroundNoise":{"type":"object","description":"Plays ambient room sound under the call. `enabled` is required.","properties":{"enabled":{"type":"boolean","isRequired":true,"uniqueKey":"config.backgroundNoise.enabled","typeLabel":"boolean"}},"required":["enabled"],"uniqueKey":"config.backgroundNoise","typeLabel":"object"},"session":{"type":"object","properties":{"ttl":{"type":"integer","minimum":1,"default":600,"description":"Lifetime in seconds of each web session's join token. Caps how long a client has to connect, not how long a call may run.","uniqueKey":"config.session.ttl","typeLabel":"integer"},"roomPrefix":{"type":"string","maxLength":32,"description":"Cosmetic prefix on generated room names. The server appends the session id.","uniqueKey":"config.session.roomPrefix","typeLabel":"string"}},"uniqueKey":"config.session","typeLabel":"object"},"stt":{"type":"object","description":"`default` is the only supported key today (same for `tts`/`llm`).","properties":{"default":{"oneOf":[{"type":"object","title":"Soniox","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["soniox"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.0.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`stt-rt-v4` (default) or `stt-rt-v5`.","example":"stt-rt-v4","uniqueKey":"config.stt.default.oneOf.0.model","typeLabel":"string"},"language":{"type":"string","description":"Bias hint, not a hard filter — language identification stays on, so other languages in the audio are still recognized. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.0.language","typeLabel":"string"},"context":{"type":"string","description":"Free-text biasing — names, products, phrases the model should expect to hear.","uniqueKey":"config.stt.default.oneOf.0.context","typeLabel":"string"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"description":"How hard Soniox cuts the wait between the caller stopping and the final transcript. Higher is faster, with a small risk of ending a turn at a pause. Omit for the Soniox default.","example":1,"uniqueKey":"config.stt.default.oneOf.0.endpointLatencyAdjustmentLevel","typeLabel":"integer"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"description":"How readily Soniox ends a turn. Higher ends turns sooner. Omit for the Soniox default.","uniqueKey":"config.stt.default.oneOf.0.endpointSensitivity","typeLabel":"number"},"maxEndpointDelayMs":{"type":"integer","minimum":500,"maximum":3000,"description":"The longest Soniox waits after the caller stops before it ends the turn. Omit for the Soniox default (2000).","uniqueKey":"config.stt.default.oneOf.0.maxEndpointDelayMs","typeLabel":"integer"},"apiKey":{"type":"string","description":"Your own Soniox key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.0.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.0","typeLabel":"Soniox · object"},{"type":"object","title":"Deepgram","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["deepgram"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`nova-3` (default) or `nova-2`.","example":"nova-3","uniqueKey":"config.stt.default.oneOf.1.model","typeLabel":"string"},"language":{"type":"string","description":"Defaults to `multi` (multilingual).","example":"multi","uniqueKey":"config.stt.default.oneOf.1.language","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Deepgram key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.1.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.1","typeLabel":"Deepgram · object"},{"type":"object","title":"OpenAI","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["openai"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.2.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"Defaults to `whisper-1`.","example":"whisper-1","uniqueKey":"config.stt.default.oneOf.2.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.2.language","typeLabel":"string"},"prompt":{"type":"string","description":"Free-text biasing — names, products, phrases the model should expect to hear.","uniqueKey":"config.stt.default.oneOf.2.prompt","typeLabel":"string"},"useRealtime":{"type":"boolean","description":"Use OpenAI's realtime transcription. Defaults to false.","uniqueKey":"config.stt.default.oneOf.2.useRealtime","typeLabel":"boolean"},"apiKey":{"type":"string","description":"Your own OpenAI key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.2.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.2","typeLabel":"OpenAI · object"},{"type":"object","title":"Groq","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["groq"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.3.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`whisper-large-v3-turbo` (default), `whisper-large-v3`, or `distil-whisper-large-v3-en`.","example":"whisper-large-v3-turbo","uniqueKey":"config.stt.default.oneOf.3.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.3.language","typeLabel":"string"},"prompt":{"type":"string","description":"Free-text biasing — names, products, phrases the model should expect to hear.","uniqueKey":"config.stt.default.oneOf.3.prompt","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Groq key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.3.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.3","typeLabel":"Groq · object"},{"type":"object","title":"Uplift AI","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["upliftai"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.4.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`large-v3`.","example":"large-v3","uniqueKey":"config.stt.default.oneOf.4.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.4.language","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.4","typeLabel":"Uplift AI · object"}],"isRequired":true,"uniqueKey":"config.stt.default","typeLabel":"Soniox · object | Deepgram · object | OpenAI · object | Groq · object | Uplift AI · object"}},"required":["default"],"uniqueKey":"config.stt","typeLabel":"object"},"tts":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","title":"Uplift AI","description":"Pick the shape matching your provider. A TTS block without a usable `voiceId` stores fine and fails at connect time.","required":["provider","voiceId"],"properties":{"provider":{"type":"string","enum":["upliftai"],"isRequired":true,"uniqueKey":"config.tts.default.oneOf.0.provider","typeLabel":"enum\u003cstring>"},"voiceId":{"type":"string","description":"Pick an id from the [voices gallery](/orator_voices) — 80+ voices tuned for Urdu and regional languages.","example":"helpdesk-agent","isRequired":true,"uniqueKey":"config.tts.default.oneOf.0.voiceId","typeLabel":"string"},"outputFormat":{"type":"string","description":"Defaults to `MP3_22050_32`.","example":"MP3_22050_32","uniqueKey":"config.tts.default.oneOf.0.outputFormat","typeLabel":"string"},"speed":{"type":"number","minimum":0.5,"maximum":2,"default":1,"description":"How fast the voice speaks. `1` is the normal rate, `0.5` is half the speed and `2` is twice as fast. A value outside 0.5 to 2 is not rejected: the call speaks at the normal rate.","example":1,"uniqueKey":"config.tts.default.oneOf.0.speed","typeLabel":"number"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.tts.default.oneOf.0","typeLabel":"Uplift AI · object"},{"type":"object","title":"OpenAI","description":"Pick the shape matching your provider. A TTS block without a usable `voiceId` stores fine and fails at connect time.","required":["provider"],"properties":{"provider":{"type":"string","enum":["openai"],"isRequired":true,"uniqueKey":"config.tts.default.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"Defaults to `gpt-4o-mini-tts`.","example":"gpt-4o-mini-tts","uniqueKey":"config.tts.default.oneOf.1.model","typeLabel":"string"},"voiceId":{"type":"string","description":"An OpenAI voice name. Defaults to `alloy`.","example":"alloy","uniqueKey":"config.tts.default.oneOf.1.voiceId","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own OpenAI key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.tts.default.oneOf.1.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.tts.default.oneOf.1","typeLabel":"OpenAI · object"},{"type":"object","title":"Soniox","description":"Pick the shape matching your provider. A TTS block without a usable `voiceId` stores fine and fails at connect time.","required":["provider","voiceId"],"properties":{"provider":{"type":"string","enum":["soniox"],"isRequired":true,"uniqueKey":"config.tts.default.oneOf.2.provider","typeLabel":"enum\u003cstring>"},"voiceId":{"type":"string","description":"A Soniox voice name.","example":"Maya","isRequired":true,"uniqueKey":"config.tts.default.oneOf.2.voiceId","typeLabel":"string"},"model":{"type":"string","description":"Defaults to `tts-rt-v1`.","example":"tts-rt-v1","uniqueKey":"config.tts.default.oneOf.2.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.tts.default.oneOf.2.language","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Soniox key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.tts.default.oneOf.2.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.tts.default.oneOf.2","typeLabel":"Soniox · object"}],"isRequired":true,"uniqueKey":"config.tts.default","typeLabel":"Uplift AI · object | OpenAI · object | Soniox · object"}},"required":["default"],"uniqueKey":"config.tts","typeLabel":"object"},"llm":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","title":"Google Gemini","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["google"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.0.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`gemini-3.5-flash`, `gemini-3.1-flash-lite`, or `gemini-2.5-flash`.","example":"gemini-2.5-flash","isRequired":true,"uniqueKey":"config.llm.default.oneOf.0.model","typeLabel":"string"},"thinkingLevel":{"type":"string","enum":["minimal","low","medium","high"],"description":"Gemini 3.x models only. Reasoning depth per response — each step up adds latency, so `high` is rarely right for live calls. Absent behaves as the voice-tuned `low`.","uniqueKey":"config.llm.default.oneOf.0.thinkingLevel","typeLabel":"enum\u003cstring>"},"thinkingBudget":{"type":"integer","minimum":-1,"maximum":24576,"description":"Gemini 2.5 models only (not `-lite`). Maximum thinking tokens per response: `0` turns thinking off, `-1` lets the model decide, `1`–`24576` sets an explicit cap. Absent uses a voice-tuned low cap (512).","uniqueKey":"config.llm.default.oneOf.0.thinkingBudget","typeLabel":"integer"},"apiKey":{"type":"string","description":"Your own Gemini key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.0.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.0","typeLabel":"Google Gemini · object"},{"type":"object","title":"OpenAI","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["openai"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`gpt-5.4-nano`, `gpt-5.4-mini`, or `gpt-4o-mini`.","example":"gpt-5.4-nano","isRequired":true,"uniqueKey":"config.llm.default.oneOf.1.model","typeLabel":"string"},"reasoningEffort":{"type":"string","enum":["none","low","medium","high","xhigh"],"description":"gpt-5.x models. Each step up adds latency per reply. Unset runs the model without a reasoning phase (classic `temperature: 0`).","uniqueKey":"config.llm.default.oneOf.1.reasoningEffort","typeLabel":"enum\u003cstring>"},"verbosity":{"type":"string","enum":["low","medium","high"],"description":"Answer-length control, gpt-5.x models only.","uniqueKey":"config.llm.default.oneOf.1.verbosity","typeLabel":"enum\u003cstring>"},"apiKey":{"type":"string","description":"Your own OpenAI key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.1.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.1","typeLabel":"OpenAI · object"},{"type":"object","title":"Cerebras","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["cerebras"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.2.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`gpt-oss-120b`.","example":"gpt-oss-120b","isRequired":true,"uniqueKey":"config.llm.default.oneOf.2.model","typeLabel":"string"},"reasoningEffort":{"type":"string","enum":["low","medium","high"],"description":"Supported by the reasoning models (`gpt-oss-120b`). `none` is rejected by Cerebras; `verbosity` is not supported on any Cerebras model.","uniqueKey":"config.llm.default.oneOf.2.reasoningEffort","typeLabel":"enum\u003cstring>"},"apiKey":{"type":"string","description":"Your own Cerebras key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.2.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.2","typeLabel":"Cerebras · object"},{"type":"object","title":"Groq","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["groq"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.3.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`openai/gpt-oss-120b` or `openai/gpt-oss-20b`. No reasoning or verbosity knobs on this provider.","example":"openai/gpt-oss-120b","isRequired":true,"uniqueKey":"config.llm.default.oneOf.3.model","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Groq key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.3.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.3","typeLabel":"Groq · object"}],"isRequired":true,"uniqueKey":"config.llm.default","typeLabel":"Google Gemini · object | OpenAI · object | Cerebras · object | Groq · object"}},"required":["default"],"uniqueKey":"config.llm","typeLabel":"object"}},"required":["agent"],"uniqueKey":"config","typeLabel":"object"},"public":{"type":"boolean","description":"Allows anyone to open a browser session against this assistant without an API key. On a published assistant, the change takes effect at the next publish.","uniqueKey":"public","typeLabel":"boolean"}},"uniqueKey":"","typeLabel":"object"},"example":{"name":"Al-Falah credit card payment reminder","description":"Reminds cardholders of the due date and offers to log a payment promise","public":false,"config":{"agent":{"instructions":"آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔","initialGreeting":true,"greetingInstructions":"السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔"},"session":{"ttl":1800,"roomPrefix":"al-falah"},"stt":{"default":{"provider":"soniox","model":"stt-rt-preview","language":"ur"}},"tts":{"default":{"provider":"upliftai","voiceId":"v_meklc281","outputFormat":"MP3_22050_32"}},"llm":{"default":{"provider":"google","model":"gemini-2.5-flash"}}}},"examples":{"Example":{"title":"Example","value":{"name":"Al-Falah credit card payment reminder","description":"Reminds cardholders of the due date and offers to log a payment promise","public":false,"config":{"agent":{"instructions":"آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔","initialGreeting":true,"greetingInstructions":"السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔"},"session":{"ttl":1800,"roomPrefix":"al-falah"},"stt":{"default":{"provider":"soniox","model":"stt-rt-preview","language":"ur"}},"tts":{"default":{"provider":"upliftai","voiceId":"v_meklc281","outputFormat":"MP3_22050_32"}},"llm":{"default":{"provider":"google","model":"gemini-2.5-flash"}}}}}},"exampleType":"examples"}},"exampleType":"examples"},"responses":{"a742b869-b387-4335-b7e7-3ff30f8212c4":{"description":"The assistant as stored after the update.","content":{"application/json":{"schema":{"type":"object","properties":{"realtimeAssistantId":{"type":"string","format":"uuid","uniqueKey":"realtimeAssistantId","typeLabel":"string\u003cuuid>"},"organizationId":{"type":"string","format":"uuid","uniqueKey":"organizationId","typeLabel":"string\u003cuuid>"},"projectId":{"type":"string","format":"uuid","uniqueKey":"projectId","typeLabel":"string\u003cuuid>"},"name":{"type":"string","uniqueKey":"name","typeLabel":"string"},"description":{"type":"string","uniqueKey":"description","typeLabel":"string"},"config":{"type":"object","additionalProperties":true,"description":"Keys beyond those listed are stored and returned unchanged.","properties":{"agent":{"type":"object","properties":{"instructions":{"type":"string","minLength":1,"description":"System prompt. For Urdu assistants, tell the model to reply in Nastaliq script — otherwise it tends to answer in Roman Urdu.","isRequired":true,"uniqueKey":"config.agent.instructions","typeLabel":"string"},"initialGreeting":{"type":"boolean","default":false,"description":"Whether the assistant speaks first instead of waiting for the caller.","uniqueKey":"config.agent.initialGreeting","typeLabel":"boolean"},"greetingInstructions":{"type":"string","description":"Describe how the agent should greet — it uses the prompt to come up with the opening line, so you can say \"Say salam and confirm you are talking to the right person.\" Ignored unless `initialGreeting` is true.","uniqueKey":"config.agent.greetingInstructions","typeLabel":"string"},"tools":{"type":"array","description":"A tool with no `execution` is a client tool: we deliver the call to your browser client over the session, with the tool name as the RPC method. A tool whose `execution` points at a tool endpoint connection goes to that endpoint instead, on phone calls and web sessions alike.","items":{"type":"object","properties":{"name":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].name","typeLabel":"string"},"description":{"type":"string","minLength":1,"description":"What the tool does. The model picks the tool from this text.","isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].description","typeLabel":"string"},"parameters":{"type":"object","description":"JSON Schema for the tool's arguments.","properties":{"type":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].parameters.type","typeLabel":"string"},"properties":{"type":"object","isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].parameters.properties","typeLabel":"object"},"required":{"type":"array","items":{"type":"string","uniqueKey":"config.agent.tools.items.[INDEX].parameters.required.items.[INDEX]","typeLabel":"string"},"uniqueKey":"config.agent.tools.items.[INDEX].parameters.required","typeLabel":"string[]"}},"required":["type","properties"],"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].parameters","typeLabel":"object"},"timeout":{"type":"number","minimum":0,"description":"Seconds to wait for a client tool's handler before the assistant moves on. Default 10. Webhook tools always get 10 seconds.","uniqueKey":"config.agent.tools.items.[INDEX].timeout","typeLabel":"number"},"execution":{"type":"object","description":"Where the tool runs. Omit it for a client tool, which your web page or mobile app executes over the session. Set `type: tool_endpoint` with the id of a tool endpoint you added on the [portal](https://upliftai.org/app/calling/webhooks) to have the platform POST the call to your server instead. See [Webhook tools](/voice-agents/tools/webhook-tools).","properties":{"type":{"type":"string","enum":["client_rpc","tool_endpoint"],"isRequired":true,"uniqueKey":"config.agent.tools.items.[INDEX].execution.type","typeLabel":"enum\u003cstring>"},"connectionId":{"type":"string","description":"Required when `type` is `tool_endpoint`. The id of a tool endpoint in this project, from the [portal](https://upliftai.org/app/calling/webhooks). A webhook's id is rejected at call time. Not checked on create: a missing or wrong id surfaces as an error result on the call, not a 400.","uniqueKey":"config.agent.tools.items.[INDEX].execution.connectionId","typeLabel":"string"}},"required":["type"],"uniqueKey":"config.agent.tools.items.[INDEX].execution","typeLabel":"object"}},"required":["name","description","parameters"],"uniqueKey":"config.agent.tools.items.[INDEX]","typeLabel":"object"},"uniqueKey":"config.agent.tools","typeLabel":"object[]"}},"required":["instructions"],"isRequired":true,"uniqueKey":"config.agent","typeLabel":"object"},"grading":{"type":"object","description":"Assistant-level scorecard. Every non-campaign call of this assistant — web, inbound, raw API dial — is graded against it; campaign calls use the campaign's own scorecard instead. See [Scorecards](/voice-agents/assistants/scorecards). A `scorecard` that is not an object, or whose points don't total 100, is a 400.","properties":{"scorecard":{"type":"object","description":"The rubric every call on this campaign is graded against. It freezes once any call has been graded, so revise it before launching.","properties":{"rubricVersionId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rubricVersionId","typeLabel":"string"},"rules":{"type":"array","minItems":1,"description":"Rule ids must be unique and their `points` must total exactly 100.","items":{"type":"object","properties":{"ruleId":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].ruleId","typeLabel":"string"},"title":{"type":"string","minLength":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].title","typeLabel":"string"},"instruction":{"type":"string","minLength":1,"description":"What the grader looks for in the transcript to award this rule.","isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].instruction","typeLabel":"string"},"scoringType":{"type":"string","enum":["binary"],"description":"Each rule is earned in full or not at all.","isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].scoringType","typeLabel":"enum\u003cstring>"},"points":{"type":"integer","minimum":1,"isRequired":true,"uniqueKey":"config.grading.scorecard.rules.items.[INDEX].points","typeLabel":"integer"},"evidenceRequired":{"type":"boolean","description":"When true, the grader must cite a transcript quote to award the rule.","uniqueKey":"config.grading.scorecard.rules.items.[INDEX].evidenceRequired","typeLabel":"boolean"}},"required":["ruleId","title","instruction","scoringType","points"],"uniqueKey":"config.grading.scorecard.rules.items.[INDEX]","typeLabel":"object"},"isRequired":true,"uniqueKey":"config.grading.scorecard.rules","typeLabel":"object[]"}},"required":["rubricVersionId","rules"],"uniqueKey":"config.grading.scorecard","typeLabel":"object"}},"uniqueKey":"config.grading","typeLabel":"object"},"noiseCancellation":{"type":"object","description":"Cleans the caller's audio before speech-to-text. `enabled` is required, and an unknown `model` is a 400.","properties":{"enabled":{"type":"boolean","isRequired":true,"uniqueKey":"config.noiseCancellation.enabled","typeLabel":"boolean"},"model":{"type":"string","enum":["quail_vf_s","quail_vf_l","quail_l"],"default":"quail_vf_s","uniqueKey":"config.noiseCancellation.model","typeLabel":"enum\u003cstring>"},"level":{"type":"number","default":0.1,"description":"Suppression strength. Stronger settings clipped short Urdu backchannels, which is why the default is low.","uniqueKey":"config.noiseCancellation.level","typeLabel":"number"}},"required":["enabled"],"uniqueKey":"config.noiseCancellation","typeLabel":"object"},"backgroundNoise":{"type":"object","description":"Plays ambient room sound under the call. `enabled` is required.","properties":{"enabled":{"type":"boolean","isRequired":true,"uniqueKey":"config.backgroundNoise.enabled","typeLabel":"boolean"}},"required":["enabled"],"uniqueKey":"config.backgroundNoise","typeLabel":"object"},"session":{"type":"object","properties":{"ttl":{"type":"integer","minimum":1,"default":600,"description":"Lifetime in seconds of each web session's join token. Caps how long a client has to connect, not how long a call may run.","uniqueKey":"config.session.ttl","typeLabel":"integer"},"roomPrefix":{"type":"string","maxLength":32,"description":"Cosmetic prefix on generated room names. The server appends the session id.","uniqueKey":"config.session.roomPrefix","typeLabel":"string"}},"uniqueKey":"config.session","typeLabel":"object"},"stt":{"type":"object","description":"`default` is the only supported key today (same for `tts`/`llm`).","properties":{"default":{"oneOf":[{"type":"object","title":"Soniox","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["soniox"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.0.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`stt-rt-v4` (default) or `stt-rt-v5`.","example":"stt-rt-v4","uniqueKey":"config.stt.default.oneOf.0.model","typeLabel":"string"},"language":{"type":"string","description":"Bias hint, not a hard filter — language identification stays on, so other languages in the audio are still recognized. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.0.language","typeLabel":"string"},"context":{"type":"string","description":"Free-text biasing — names, products, phrases the model should expect to hear.","uniqueKey":"config.stt.default.oneOf.0.context","typeLabel":"string"},"endpointLatencyAdjustmentLevel":{"type":"integer","minimum":0,"maximum":3,"description":"How hard Soniox cuts the wait between the caller stopping and the final transcript. Higher is faster, with a small risk of ending a turn at a pause. Omit for the Soniox default.","example":1,"uniqueKey":"config.stt.default.oneOf.0.endpointLatencyAdjustmentLevel","typeLabel":"integer"},"endpointSensitivity":{"type":"number","minimum":-1,"maximum":1,"description":"How readily Soniox ends a turn. Higher ends turns sooner. Omit for the Soniox default.","uniqueKey":"config.stt.default.oneOf.0.endpointSensitivity","typeLabel":"number"},"maxEndpointDelayMs":{"type":"integer","minimum":500,"maximum":3000,"description":"The longest Soniox waits after the caller stops before it ends the turn. Omit for the Soniox default (2000).","uniqueKey":"config.stt.default.oneOf.0.maxEndpointDelayMs","typeLabel":"integer"},"apiKey":{"type":"string","description":"Your own Soniox key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.0.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.0","typeLabel":"Soniox · object"},{"type":"object","title":"Deepgram","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["deepgram"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`nova-3` (default) or `nova-2`.","example":"nova-3","uniqueKey":"config.stt.default.oneOf.1.model","typeLabel":"string"},"language":{"type":"string","description":"Defaults to `multi` (multilingual).","example":"multi","uniqueKey":"config.stt.default.oneOf.1.language","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Deepgram key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.1.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.1","typeLabel":"Deepgram · object"},{"type":"object","title":"OpenAI","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["openai"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.2.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"Defaults to `whisper-1`.","example":"whisper-1","uniqueKey":"config.stt.default.oneOf.2.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.2.language","typeLabel":"string"},"prompt":{"type":"string","description":"Free-text biasing — names, products, phrases the model should expect to hear.","uniqueKey":"config.stt.default.oneOf.2.prompt","typeLabel":"string"},"useRealtime":{"type":"boolean","description":"Use OpenAI's realtime transcription. Defaults to false.","uniqueKey":"config.stt.default.oneOf.2.useRealtime","typeLabel":"boolean"},"apiKey":{"type":"string","description":"Your own OpenAI key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.2.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.2","typeLabel":"OpenAI · object"},{"type":"object","title":"Groq","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["groq"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.3.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`whisper-large-v3-turbo` (default), `whisper-large-v3`, or `distil-whisper-large-v3-en`.","example":"whisper-large-v3-turbo","uniqueKey":"config.stt.default.oneOf.3.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.3.language","typeLabel":"string"},"prompt":{"type":"string","description":"Free-text biasing — names, products, phrases the model should expect to hear.","uniqueKey":"config.stt.default.oneOf.3.prompt","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Groq key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.stt.default.oneOf.3.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.3","typeLabel":"Groq · object"},{"type":"object","title":"Uplift AI","description":"Pick the shape matching your provider.","required":["provider"],"properties":{"provider":{"type":"string","enum":["upliftai"],"isRequired":true,"uniqueKey":"config.stt.default.oneOf.4.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`large-v3`.","example":"large-v3","uniqueKey":"config.stt.default.oneOf.4.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.stt.default.oneOf.4.language","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.stt.default.oneOf.4","typeLabel":"Uplift AI · object"}],"isRequired":true,"uniqueKey":"config.stt.default","typeLabel":"Soniox · object | Deepgram · object | OpenAI · object | Groq · object | Uplift AI · object"}},"required":["default"],"uniqueKey":"config.stt","typeLabel":"object"},"tts":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","title":"Uplift AI","description":"Pick the shape matching your provider. A TTS block without a usable `voiceId` stores fine and fails at connect time.","required":["provider","voiceId"],"properties":{"provider":{"type":"string","enum":["upliftai"],"isRequired":true,"uniqueKey":"config.tts.default.oneOf.0.provider","typeLabel":"enum\u003cstring>"},"voiceId":{"type":"string","description":"Pick an id from the [voices gallery](/orator_voices) — 80+ voices tuned for Urdu and regional languages.","example":"helpdesk-agent","isRequired":true,"uniqueKey":"config.tts.default.oneOf.0.voiceId","typeLabel":"string"},"outputFormat":{"type":"string","description":"Defaults to `MP3_22050_32`.","example":"MP3_22050_32","uniqueKey":"config.tts.default.oneOf.0.outputFormat","typeLabel":"string"},"speed":{"type":"number","minimum":0.5,"maximum":2,"default":1,"description":"How fast the voice speaks. `1` is the normal rate, `0.5` is half the speed and `2` is twice as fast. A value outside 0.5 to 2 is not rejected: the call speaks at the normal rate.","example":1,"uniqueKey":"config.tts.default.oneOf.0.speed","typeLabel":"number"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.tts.default.oneOf.0","typeLabel":"Uplift AI · object"},{"type":"object","title":"OpenAI","description":"Pick the shape matching your provider. A TTS block without a usable `voiceId` stores fine and fails at connect time.","required":["provider"],"properties":{"provider":{"type":"string","enum":["openai"],"isRequired":true,"uniqueKey":"config.tts.default.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"Defaults to `gpt-4o-mini-tts`.","example":"gpt-4o-mini-tts","uniqueKey":"config.tts.default.oneOf.1.model","typeLabel":"string"},"voiceId":{"type":"string","description":"An OpenAI voice name. Defaults to `alloy`.","example":"alloy","uniqueKey":"config.tts.default.oneOf.1.voiceId","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own OpenAI key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.tts.default.oneOf.1.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.tts.default.oneOf.1","typeLabel":"OpenAI · object"},{"type":"object","title":"Soniox","description":"Pick the shape matching your provider. A TTS block without a usable `voiceId` stores fine and fails at connect time.","required":["provider","voiceId"],"properties":{"provider":{"type":"string","enum":["soniox"],"isRequired":true,"uniqueKey":"config.tts.default.oneOf.2.provider","typeLabel":"enum\u003cstring>"},"voiceId":{"type":"string","description":"A Soniox voice name.","example":"Maya","isRequired":true,"uniqueKey":"config.tts.default.oneOf.2.voiceId","typeLabel":"string"},"model":{"type":"string","description":"Defaults to `tts-rt-v1`.","example":"tts-rt-v1","uniqueKey":"config.tts.default.oneOf.2.model","typeLabel":"string"},"language":{"type":"string","description":"ISO code. Defaults to `ur`.","example":"ur","uniqueKey":"config.tts.default.oneOf.2.language","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Soniox key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.tts.default.oneOf.2.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.tts.default.oneOf.2","typeLabel":"Soniox · object"}],"isRequired":true,"uniqueKey":"config.tts.default","typeLabel":"Uplift AI · object | OpenAI · object | Soniox · object"}},"required":["default"],"uniqueKey":"config.tts","typeLabel":"object"},"llm":{"type":"object","properties":{"default":{"oneOf":[{"type":"object","title":"Google Gemini","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["google"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.0.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`gemini-3.5-flash`, `gemini-3.1-flash-lite`, or `gemini-2.5-flash`.","example":"gemini-2.5-flash","isRequired":true,"uniqueKey":"config.llm.default.oneOf.0.model","typeLabel":"string"},"thinkingLevel":{"type":"string","enum":["minimal","low","medium","high"],"description":"Gemini 3.x models only. Reasoning depth per response — each step up adds latency, so `high` is rarely right for live calls. Absent behaves as the voice-tuned `low`.","uniqueKey":"config.llm.default.oneOf.0.thinkingLevel","typeLabel":"enum\u003cstring>"},"thinkingBudget":{"type":"integer","minimum":-1,"maximum":24576,"description":"Gemini 2.5 models only (not `-lite`). Maximum thinking tokens per response: `0` turns thinking off, `-1` lets the model decide, `1`–`24576` sets an explicit cap. Absent uses a voice-tuned low cap (512).","uniqueKey":"config.llm.default.oneOf.0.thinkingBudget","typeLabel":"integer"},"apiKey":{"type":"string","description":"Your own Gemini key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.0.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.0","typeLabel":"Google Gemini · object"},{"type":"object","title":"OpenAI","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["openai"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.1.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`gpt-5.4-nano`, `gpt-5.4-mini`, or `gpt-4o-mini`.","example":"gpt-5.4-nano","isRequired":true,"uniqueKey":"config.llm.default.oneOf.1.model","typeLabel":"string"},"reasoningEffort":{"type":"string","enum":["none","low","medium","high","xhigh"],"description":"gpt-5.x models. Each step up adds latency per reply. Unset runs the model without a reasoning phase (classic `temperature: 0`).","uniqueKey":"config.llm.default.oneOf.1.reasoningEffort","typeLabel":"enum\u003cstring>"},"verbosity":{"type":"string","enum":["low","medium","high"],"description":"Answer-length control, gpt-5.x models only.","uniqueKey":"config.llm.default.oneOf.1.verbosity","typeLabel":"enum\u003cstring>"},"apiKey":{"type":"string","description":"Your own OpenAI key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.1.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.1","typeLabel":"OpenAI · object"},{"type":"object","title":"Cerebras","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["cerebras"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.2.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`gpt-oss-120b`.","example":"gpt-oss-120b","isRequired":true,"uniqueKey":"config.llm.default.oneOf.2.model","typeLabel":"string"},"reasoningEffort":{"type":"string","enum":["low","medium","high"],"description":"Supported by the reasoning models (`gpt-oss-120b`). `none` is rejected by Cerebras; `verbosity` is not supported on any Cerebras model.","uniqueKey":"config.llm.default.oneOf.2.reasoningEffort","typeLabel":"enum\u003cstring>"},"apiKey":{"type":"string","description":"Your own Cerebras key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.2.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.2","typeLabel":"Cerebras · object"},{"type":"object","title":"Groq","description":"Pick the shape matching your provider — each takes different knobs, and a knob sent to the wrong provider is silently ignored.","required":["provider","model"],"properties":{"provider":{"type":"string","enum":["groq"],"isRequired":true,"uniqueKey":"config.llm.default.oneOf.3.provider","typeLabel":"enum\u003cstring>"},"model":{"type":"string","description":"`openai/gpt-oss-120b` or `openai/gpt-oss-20b`. No reasoning or verbosity knobs on this provider.","example":"openai/gpt-oss-120b","isRequired":true,"uniqueKey":"config.llm.default.oneOf.3.model","typeLabel":"string"},"apiKey":{"type":"string","description":"Your own Groq key; omit to bill through Uplift AI. Reads return it verbatim, so anyone who can read the assistant can see it.","uniqueKey":"config.llm.default.oneOf.3.apiKey","typeLabel":"string"}},"additionalProperties":true,"isRequired":true,"uniqueKey":"config.llm.default.oneOf.3","typeLabel":"Groq · object"}],"isRequired":true,"uniqueKey":"config.llm.default","typeLabel":"Google Gemini · object | OpenAI · object | Cerebras · object | Groq · object"}},"required":["default"],"uniqueKey":"config.llm","typeLabel":"object"}},"required":["agent"],"uniqueKey":"config","typeLabel":"object"},"public":{"type":"boolean","uniqueKey":"public","typeLabel":"boolean"},"createdAt":{"type":"string","format":"date-time","uniqueKey":"createdAt","typeLabel":"string\u003cdate-time>"},"updatedAt":{"type":"string","format":"date-time","uniqueKey":"updatedAt","typeLabel":"string\u003cdate-time>"},"createdBy":{"type":"string","description":"Who created the assistant — an API key or a portal user.","uniqueKey":"createdBy","typeLabel":"string"},"updatedBy":{"type":"string","uniqueKey":"updatedBy","typeLabel":"string"},"version":{"type":"integer","minimum":1,"description":"The version this response shows. Every save bumps it, so published numbers skip the saves in between.","uniqueKey":"version","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"realtimeAssistantId":"80b00435-xxxx-xxxx-xxxx-xxxxxxxxxxxx","organizationId":"a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx","projectId":"c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx","name":"Al-Falah credit card payment reminder","description":"Reminds cardholders of the due date and offers to log a payment promise","config":{"agent":{"instructions":"آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔","initialGreeting":true,"greetingInstructions":"السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔"},"session":{"ttl":1800,"roomPrefix":"al-falah"},"stt":{"default":{"provider":"soniox","model":"stt-rt-preview","language":"ur"}},"tts":{"default":{"provider":"upliftai","voiceId":"v_meklc281","outputFormat":"MP3_22050_32"}},"llm":{"default":{"provider":"google","model":"gemini-2.5-flash"}}},"public":false,"createdAt":"2026-08-18T04:37:53.727Z","updatedAt":"2026-08-18T04:39:28.828Z","createdBy":"ef80cc74-xxxx-xxxx-xxxx-xxxxxxxxxxxx","updatedBy":"ef80cc74-xxxx-xxxx-xxxx-xxxxxxxxxxxx","version":6},"examples":{"Example":{"title":"Example","value":{"realtimeAssistantId":"80b00435-xxxx-xxxx-xxxx-xxxxxxxxxxxx","organizationId":"a12b7e74-xxxx-xxxx-xxxx-xxxxxxxxxxxx","projectId":"c782a4ec-xxxx-xxxx-xxxx-xxxxxxxxxxxx","name":"Al-Falah credit card payment reminder","description":"Reminds cardholders of the due date and offers to log a payment promise","config":{"agent":{"instructions":"آپ الفلاح بینک کی جانب سے کال کر رہے ہیں۔ کارڈ ہولڈر کو ادائیگی کی آخری تاریخ یاد دلائیں، واجب الادا رقم بتائیں، اور اگر وہ ادائیگی کا وعدہ کریں تو تاریخ نوٹ کریں۔ صرف نستعلیق اردو میں جواب دیں۔","initialGreeting":true,"greetingInstructions":"السلام علیکم کہیں، بینک کا تعارف کروائیں، پھر پوچھیں کہ کیا وہ ابھی بات کر سکتے ہیں۔"},"session":{"ttl":1800,"roomPrefix":"al-falah"},"stt":{"default":{"provider":"soniox","model":"stt-rt-preview","language":"ur"}},"tts":{"default":{"provider":"upliftai","voiceId":"v_meklc281","outputFormat":"MP3_22050_32"}},"llm":{"default":{"provider":"google","model":"gemini-2.5-flash"}}},"public":false,"createdAt":"2026-08-18T04:37:53.727Z","updatedAt":"2026-08-18T04:39:28.828Z","createdBy":"ef80cc74-xxxx-xxxx-xxxx-xxxxxxxxxxxx","updatedBy":"ef80cc74-xxxx-xxxx-xxxx-xxxxxxxxxxxx","version":6}}},"exampleType":"examples"}},"exampleType":"examples"},"05b60784-cf78-42b0-ae85-cb665bef7781":{"description":"Validation failed. Nothing was saved.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"examples":{"missingInstructions":{"title":"missingInstructions","value":{"message":["config.agent.instructions should not be empty","config.agent.instructions must be a string"],"error":"Bad Request","statusCode":400}},"unknownNoiseModel":{"title":"unknownNoiseModel","value":{"message":["config.noiseCancellation.model must be one of the following values: quail_vf_s, quail_vf_l, quail_l"],"error":"Bad Request","statusCode":400}}},"exampleType":"examples"}},"exampleType":"examples"},"d9b22b97-92b0-4b86-a6d6-8c2aa3087df4":{"description":"A bearer key was sent but is not recognized.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"invalid authorization","error":"Unauthorized","statusCode":401},"examples":{"Example":{"title":"Example","value":{"message":"invalid authorization","error":"Unauthorized","statusCode":401}}},"exampleType":"examples"}},"exampleType":"examples"},"3cb82877-ceff-439c-a436-3b1681253586":{"description":"No API key sent, or the key lacks permission for this resource.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"Forbidden resource","error":"Forbidden","statusCode":403},"examples":{"Example":{"title":"Example","value":{"message":"Forbidden resource","error":"Forbidden","statusCode":403}}},"exampleType":"examples"}},"exampleType":"examples"},"11a3aab3-0e87-4abe-83f8-ff68780a0aab":{"description":"No such resource in the API key's project.","content":{"application/json":{"schema":{"type":"object","properties":{"message":{"oneOf":[{"type":"string","description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.0","typeLabel":"string"},{"type":"array","items":{"type":"string","uniqueKey":"message.oneOf.1.items.[INDEX]","typeLabel":"string"},"description":"One message per failed field for validation errors, a single string otherwise.","uniqueKey":"message.oneOf.1","typeLabel":"string[]"}],"uniqueKey":"message","typeLabel":"string | string[]"},"error":{"type":"string","uniqueKey":"error","typeLabel":"string"},"statusCode":{"type":"integer","uniqueKey":"statusCode","typeLabel":"integer"}},"uniqueKey":"","typeLabel":"object"},"example":{"message":"Realtime assistant not found: 00000000-0000-4000-8000-000000000000","error":"Not Found","statusCode":404},"examples":{"Example":{"title":"Example","value":{"message":"Realtime assistant not found: 00000000-0000-4000-8000-000000000000","error":"Not Found","statusCode":404}}},"exampleType":"examples"}},"exampleType":"examples"}},"security":{"73bac4ee-98c5-4fa2-834c-9f180d41c637":{"apiKey":{"type":"http","scheme":"bearer","description":"Project API key (`sk_api_…`).","scopes":[],"schemeName":"apiKey"}}},"servers":{"f8e1e33f-9cf0-4bbb-b41e-9136c129f7ef":{"url":"https://api.upliftai.org/v1"}},"processedSecurityOptions":[{"schemes":[{"scheme":{"type":"http","scheme":"bearer","description":"Project API key (`sk_api_…`).","scopes":[],"schemeName":"apiKey"},"schema":{"title":"Bearer Auth","type":"string","isRequired":true,"description":"Project API key (`sk_api_…`).","format":"bearer","typeLabel":"string\u003cbearer>","deprecated":false},"schemeName":"apiKey","name":"Authorization"}],"title":"apiKey"}]},"originalFileLocation":"voice-agents/api-reference/openapi.yaml"},"subdomain":"upliftai","siteName":"Uplift AI API Docs","title":"Update an assistant - Uplift AI API Docs","navMaps":{"firstHrefInVersion":{},"firstHrefInLanguage":{}},"lastModified":"2026-10-28T06:54:41.071Z","originalFileLocation":"api-reference/assistants/update-an-assistant.mdx"},"headHtml":"\u003cscript data-mint-head>(function(){var d=document.documentElement,p=\"light\";if(!p){try{p=localStorage.getItem(\"isDarkMode\")}catch(e){}if(p==='true')p='dark';else if(p==='false')p='light';if(p!=='light'\u0026\u0026p!=='dark'\u0026\u0026p!=='system')p=\"light\"}var r=p==='system'?(matchMedia(\"(prefers-color-scheme: dark)\").matches?'dark':'light'):p;d.classList.remove(r==='dark'?'light':'dark');d.classList.add(r);d.setAttribute(\"data-theme-preference\",p)})();\u003c/script>\u003cmeta data-mint-head name=\"description\" content=\"This replaces rather than merges, so read the assistant, change what you need, and send the whole object back. Leaving out description or public clears them — public resets to false — while name and config keep their stored values. Only populated parts of config are validated, so a config missing agent.instructions saves fine and leaves the assistant unable to take calls. Until the assistant\u0026#x27;s first publish, a save goes live at once. After that, an update changes the draft only. Calls and share links keep running the published version, and the public check reads it too, until you publish again. noiseCancellation and backgroundNoise are checked on every save that sends config. An assistant stored with a bad value before these checks gets a 400 on that save until you fix it. A save without config still goes through.\">\u003cmeta data-mint-head name=\"application-name\" content=\"Uplift AI API Docs\">\u003cmeta data-mint-head name=\"generator\" content=\"Mintlify\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/android-chrome-192x192.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"apple-touch-icon\" type=\"image/png\" sizes=\"180x180\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/apple-touch-icon.png\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/favicon-16x16.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/favicon-32x32.png\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/favicon.ico\" media=\"(prefers-color-scheme: light)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"192x192\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon-dark/android-chrome-192x192.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"16x16\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon-dark/favicon-16x16.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"icon\" type=\"image/png\" sizes=\"32x32\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon-dark/favicon-32x32.png\" media=\"(prefers-color-scheme: dark)\">\u003clink data-mint-head rel=\"shortcut icon\" type=\"image/x-icon\" href=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon-dark/favicon.ico\" media=\"(prefers-color-scheme: dark)\">\u003cmeta data-mint-head property=\"og:title\" content=\"Update an assistant - Uplift AI API Docs\">\u003cmeta data-mint-head property=\"og:description\" content=\"This replaces rather than merges, so read the assistant, change what you need, and send the whole object back. Leaving out description or public clears them — public resets to false — while name and config keep their stored values. Only populated parts of config are validated, so a config missing agent.instructions saves fine and leaves the assistant unable to take calls. Until the assistant\u0026#x27;s first publish, a save goes live at once. After that, an update changes the draft only. Calls and share links keep running the published version, and the public check reads it too, until you publish again. noiseCancellation and backgroundNoise are checked on every save that sends config. An assistant stored with a bad value before these checks gets a 400 on that save until you fix it. A save without config still goes through.\">\u003cmeta data-mint-head property=\"og:site_name\" content=\"Uplift AI API Docs\">\u003cmeta data-mint-head property=\"og:url\" content=\"https://docs.upliftai.org/api-reference/assistants/update-an-assistant\">\u003cmeta data-mint-head property=\"og:type\" content=\"website\">\u003cmeta data-mint-head property=\"og:image\" content=\"https://upliftai.mintlify.site/_mintlify/api/og/v2?division=Assistants\u0026amp;title=Update+an+assistant\u0026amp;description=This+replaces+rather+than+merges%2C+so+read+the+assistant%2C+change+what+you+need%2C+and+send+the+whole+object+back.+Leaving+out+%60description%60+or+%60public%60+clears+them\u0026amp;theme=bb6dd6d40a49e0d34c2227da\u0026amp;signature=66b81ec4c1e548f557769246bdedd4422225f21079f6fa32b348ab5949ac14a9\">\u003cmeta data-mint-head property=\"og:image:width\" content=\"1200\">\u003cmeta data-mint-head property=\"og:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"twitter:card\" content=\"summary_large_image\">\u003cmeta data-mint-head name=\"twitter:title\" content=\"Update an assistant - Uplift AI API Docs\">\u003cmeta data-mint-head name=\"twitter:description\" content=\"This replaces rather than merges, so read the assistant, change what you need, and send the whole object back. Leaving out description or public clears them — public resets to false — while name and config keep their stored values. Only populated parts of config are validated, so a config missing agent.instructions saves fine and leaves the assistant unable to take calls. Until the assistant\u0026#x27;s first publish, a save goes live at once. After that, an update changes the draft only. Calls and share links keep running the published version, and the public check reads it too, until you publish again. noiseCancellation and backgroundNoise are checked on every save that sends config. An assistant stored with a bad value before these checks gets a 400 on that save until you fix it. A save without config still goes through.\">\u003cmeta data-mint-head name=\"twitter:image\" content=\"https://upliftai.mintlify.site/_mintlify/api/og/v2?division=Assistants\u0026amp;title=Update+an+assistant\u0026amp;description=This+replaces+rather+than+merges%2C+so+read+the+assistant%2C+change+what+you+need%2C+and+send+the+whole+object+back.+Leaving+out+%60description%60+or+%60public%60+clears+them\u0026amp;theme=bb6dd6d40a49e0d34c2227da\u0026amp;signature=66b81ec4c1e548f557769246bdedd4422225f21079f6fa32b348ab5949ac14a9\">\u003cmeta data-mint-head name=\"twitter:image:width\" content=\"1200\">\u003cmeta data-mint-head name=\"twitter:image:height\" content=\"630\">\u003cmeta data-mint-head name=\"msapplication-config\" content=\"/mintlify-assets/_mintlify/favicons/upliftai/JKzTglt2sBZGZsC-/_generated/favicon/browserconfig.xml\">\u003cmeta data-mint-head name=\"apple-mobile-web-app-title\" content=\"Uplift AI API Docs\">\u003cmeta data-mint-head name=\"msapplication-TileColor\" content=\"#16A34A\">\u003clink data-mint-head rel=\"canonical\" href=\"https://docs.upliftai.org/api-reference/assistants/update-an-assistant\">\u003clink data-mint-head rel=\"alternate\" type=\"application/xml\" href=\"/sitemap.xml\">\u003clink data-mint-head rel=\"alternate\" type=\"text/markdown\" href=\"/api-reference/assistants/update-an-assistant.md\">\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@graph\":[{\"@type\":\"Organization\",\"@id\":\"https://docs.upliftai.org/#organization\",\"name\":\"Uplift AI API Docs\",\"url\":\"https://docs.upliftai.org\",\"logo\":{\"@type\":\"ImageObject\",\"url\":\"https://mintcdn.com/upliftai/2tcJSpA9F8g1W_V1/logo/logo.png?fit=max\u0026auto=format\u0026n=2tcJSpA9F8g1W_V1\u0026q=85\u0026s=c3823c19a41e66e704751aa27b97cde9\"}},{\"@type\":\"WebSite\",\"@id\":\"https://docs.upliftai.org#website\",\"name\":\"Uplift AI API Docs\",\"url\":\"https://docs.upliftai.org\",\"publisher\":{\"@id\":\"https://docs.upliftai.org/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https://docs.upliftai.org/api-reference/assistants/update-an-assistant#webpage\",\"url\":\"https://docs.upliftai.org/api-reference/assistants/update-an-assistant\",\"name\":\"Update an assistant\",\"description\":\"This replaces rather than merges, so read the assistant, change what you need, and send the whole object back. Leaving out description or public clears them — public resets to false — while name and config keep their stored values. Only populated parts of config are validated, so a config missing agent.instructions saves fine and leaves the assistant unable to take calls. Until the assistant's first publish, a save goes live at once. After that, an update changes the draft only. Calls and share links keep running the published version, and the public check reads it too, until you publish again. noiseCancellation and backgroundNoise are checked on every save that sends config. An assistant stored with a bad value before these checks gets a 400 on that save until you fix it. A save without config still goes through.\",\"dateModified\":\"2026-10-28T06:54:41.071Z\",\"isPartOf\":{\"@id\":\"https://docs.upliftai.org#website\"},\"breadcrumb\":{\"@id\":\"https://docs.upliftai.org/api-reference/assistants/update-an-assistant#breadcrumb\"}},{\"@type\":\"BreadcrumbList\",\"@id\":\"https://docs.upliftai.org/api-reference/assistants/update-an-assistant#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"API Reference\",\"item\":\"https://docs.upliftai.org/voice-agents/api-reference/limits\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Assistants\",\"item\":\"https://docs.upliftai.org/api-reference/assistants/create-an-assistant\"},{\"@type\":\"ListItem\",\"position\":3,\"name\":\"Update an assistant\",\"item\":\"https://docs.upliftai.org/api-reference/assistants/update-an-assistant\"}]},{\"@type\":[\"TechArticle\",\"APIReference\"],\"@id\":\"https://docs.upliftai.org/api-reference/assistants/update-an-assistant#apireference\",\"headline\":\"Update an assistant\",\"name\":\"Update an assistant\",\"description\":\"This replaces rather than merges, so read the assistant, change what you need, and send the whole object back. Leaving out description or public clears them — public resets to false — while name and config keep their stored values. Only populated parts of config are validated, so a config missing agent.instructions saves fine and leaves the assistant unable to take calls. Until the assistant's first publish, a save goes live at once. After that, an update changes the draft only. Calls and share links keep running the published version, and the public check reads it too, until you publish again. noiseCancellation and backgroundNoise are checked on every save that sends config. An assistant stored with a bad value before these checks gets a 400 on that save until you fix it. A save without config still goes through.\",\"url\":\"https://docs.upliftai.org/api-reference/assistants/update-an-assistant\",\"mainEntityOfPage\":{\"@id\":\"https://docs.upliftai.org/api-reference/assistants/update-an-assistant#webpage\"},\"dateModified\":\"2026-10-28T06:54:41.071Z\",\"publisher\":{\"@id\":\"https://docs.upliftai.org/#organization\"},\"isPartOf\":{\"@id\":\"https://docs.upliftai.org#website\"}}]}\u003c/script>\u003cscript data-mint-head type=\"application/ld+json\">{\"@context\":\"https://schema.org\",\"@type\":\"WebSite\",\"name\":\"Uplift AI API Docs\",\"publisher\":{\"@type\":\"Organization\",\"name\":\"Uplift AI API Docs\"},\"provider\":{\"@type\":\"Organization\",\"name\":\"Mintlify\",\"url\":\"https://mintlify.com\"}}\u003c/script>","agentPointerHref":"/api-reference/assistants/update-an-assistant.md","siteName":"Uplift AI API Docs","nav":{"global":null,"tabs":[{"tab":"Orator API","pages":[{"title":"Orator API","href":"/introduction"}]},{"tab":"Voice Agents","groups":[{"group":"Getting started","pages":[{"title":"Overview","href":"/voice-agents/getting-started/overview"},{"title":"Quickstart: Web","href":"/voice-agents/getting-started/quickstart-web"},{"title":"Quickstart: Phone","href":"/voice-agents/getting-started/quickstart-phone"}]},{"group":"Concepts","pages":[{"title":"How it works","href":"/voice-agents/concepts/how-it-works"},{"title":"Tools overview","href":"/voice-agents/concepts/tools-overview"},{"title":"Phone call states","href":"/voice-agents/concepts/phone-call-states"},{"title":"Pricing","href":"/voice-agents/concepts/pricing"}]},{"group":"Assistants","pages":[{"title":"Working with assistants","href":"/voice-agents/assistants/working-with-assistants"},{"title":"Draft and publish","href":"/voice-agents/assistants/versions"},{"title":"Transient vs stored assistants","href":"/voice-agents/assistants/transient-vs-stored"},{"title":"Provider \u0026 model reference","href":"/voice-agents/assistants/providers-and-models"},{"title":"Recommended stack","href":"/voice-agents/assistants/recommended-stack"},{"title":"Voice prompting","href":"/voice-agents/assistants/voice-prompting"},{"title":"Build, refine \u0026 simulate","href":"/voice-agents/assistants/build-refine-simulate"},{"title":"Scorecards","href":"/voice-agents/assistants/scorecards"}]},{"group":"Tools","pages":[{"title":"Client tools","href":"/voice-agents/tools/client-tools"},{"title":"Webhook tools","href":"/voice-agents/tools/webhook-tools"},{"title":"End call","href":"/voice-agents/tools/system/end-call"}]},{"group":"Personalization","pages":[{"title":"Variables","href":"/voice-agents/personalization/variables"},{"title":"Per-call instructions","href":"/voice-agents/personalization/per-call-instructions"}]},{"group":"Calling","pages":[{"title":"Outbound calls","href":"/voice-agents/calling/outbound"},{"title":"Inbound calls","href":"/voice-agents/calling/inbound"},{"title":"Phone numbers \u0026 concurrency","href":"/voice-agents/calling/concurrency"},{"title":"Call end reasons","href":"/voice-agents/calling/call-end-reasons"},{"title":"Session details \u0026 transcripts","href":"/voice-agents/calling/session-details"},{"title":"Live listen","href":"/voice-agents/calling/live-listen"}]},{"group":"Campaigns","pages":[{"title":"Getting started with batch calling","href":"/voice-agents/campaigns/getting-started"},{"title":"[ ] Static vs continuous campaigns","hidden":true,"href":"/voice-agents/campaigns/static-vs-continuous"},{"title":"[ ] Static campaigns","hidden":true,"href":"/voice-agents/campaigns/static"},{"title":"[ ] Continuous campaigns","hidden":true,"href":"/voice-agents/campaigns/continuous"},{"title":"[ ] Contacts","hidden":true,"href":"/voice-agents/campaigns/contacts"},{"title":"[ ] Scheduling \u0026 retries","hidden":true,"href":"/voice-agents/campaigns/scheduling-and-retries"},{"title":"[ ] Goals \u0026 scorecards","hidden":true,"href":"/voice-agents/campaigns/goals-and-scorecards"},{"title":"[ ] Results \u0026 stats","hidden":true,"href":"/voice-agents/campaigns/results"}]},{"group":"Webhooks","pages":[{"title":"Webhooks","href":"/voice-agents/webhooks/overview"},{"title":"Event reference","href":"/voice-agents/webhooks/events"}]},{"group":"Frontend","pages":[{"title":"[ ] Architecture","hidden":true,"href":"/voice-agents/frontend/architecture"},{"title":"[ ] React","hidden":true,"href":"/voice-agents/frontend/react"},{"title":"[ ] Widget embed","hidden":true,"href":"/voice-agents/frontend/widget"},{"title":"[ ] Monitoring UI","hidden":true,"href":"/voice-agents/frontend/monitoring-ui"}]},{"group":"Testing","pages":[{"title":"Simulating conversations","href":"/voice-agents/testing/simulation"}]},{"group":"Guides","pages":[{"title":"[ ] Appointment scheduling","hidden":true,"href":"/voice-agents/guides/appointment-scheduling"},{"title":"[ ] Event invitation","hidden":true,"href":"/voice-agents/guides/event-invitation"},{"title":"[ ] Sales / lead qualification","hidden":true,"href":"/voice-agents/guides/lead-qualification"},{"title":"[ ] Payment reminder","hidden":true,"href":"/voice-agents/guides/payment-reminder"},{"title":"[ ] Order confirmation","hidden":true,"href":"/voice-agents/guides/order-confirmation"}]},{"group":"API Reference","pages":[{"title":"Phone numbers \u0026 limits","href":"/voice-agents/api-reference/limits"},{"group":"Assistants","pages":[{"title":"Create an assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants","href":"/api-reference/assistants/create-an-assistant"},{"title":"List assistants","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants","href":"/api-reference/assistants/list-assistants"},{"title":"Get an assistant","description":"Config comes back verbatim — omitted fields stay omitted — which makes this the read step before an update, since updates replace rather than merge. You get the draft unless you ask for a `version`.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}","href":"/api-reference/assistants/get-an-assistant"},{"title":"Update an assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}","href":"/api-reference/assistants/update-an-assistant"},{"title":"Delete an assistant","description":"Deleting is quiet: you get a 204 even if that id never existed, so a success is not proof anything was there. Every published version goes with it. Campaigns keep the now-dangling `assistantId`, and a running one pauses itself at its next dial with `statusMessage: \"Paused: assistant version not found\"`. The assistant's session list stops resolving, so pull the call history before you delete.","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml delete /realtime-assistants/{realtimeAssistantId}","href":"/api-reference/assistants/delete-an-assistant"},{"title":"Publish an assistant version","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/publish","href":"/api-reference/assistants/publish-an-assistant-version"},{"title":"List published versions","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}/versions","href":"/api-reference/assistants/list-published-versions"},{"title":"Get an assistant's publish state","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}/metadata","href":"/api-reference/assistants/get-an-assistants-publish-state"}]},{"group":"Authoring an assistant","pages":[{"title":"Build an assistant from a brief","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/builds","href":"/api-reference/authoring-an-assistant/build-an-assistant-from-a-brief"},{"title":"Poll a build's progress","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/builds/status/{buildId}","href":"/api-reference/authoring-an-assistant/poll-a-builds-progress"},{"title":"Rehearse a call against a persona","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/builds/{assistantId}/simulate","href":"/api-reference/authoring-an-assistant/rehearse-a-call-against-a-persona"},{"title":"Refine a built assistant's prompt","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/builds/{assistantId}/refine","href":"/api-reference/authoring-an-assistant/refine-a-built-assistants-prompt"},{"title":"Get an assistant's build record","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/builds/{assistantId}","href":"/api-reference/authoring-an-assistant/get-an-assistants-build-record"}]},{"group":"Starting a conversation","pages":[{"title":"Create a web session token","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/session","href":"/api-reference/starting-a-conversation/create-a-web-session-token"},{"title":"Open a session without an API key","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/public-session","href":"/api-reference/starting-a-conversation/open-a-session-without-an-api-key"},{"title":"Start a session from inline config","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/adhoc/session","href":"/api-reference/starting-a-conversation/start-a-session-from-inline-config"},{"title":"Dispatch a call from this assistant","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/{realtimeAssistantId}/call","href":"/api-reference/starting-a-conversation/dispatch-a-call-from-this-assistant"}]},{"group":"Sessions \u0026 call records","pages":[{"title":"List an assistant's sessions","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/{realtimeAssistantId}/sessions","href":"/api-reference/sessions-\u0026-call-records/list-an-assistants-sessions"},{"title":"Get a session's status","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/sessions/{sessionId}","href":"/api-reference/sessions-\u0026-call-records/get-a-sessions-status"},{"title":"Get a call's transcript and outcomes","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /realtime-assistants/sessions/{sessionId}/detail","href":"/api-reference/sessions-\u0026-call-records/get-a-calls-transcript-and-outcomes"},{"title":"Listen in on a live call","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /realtime-assistants/sessions/{sessionId}/listen","href":"/api-reference/sessions-\u0026-call-records/listen-in-on-a-live-call"}]},{"group":"Campaigns","pages":[{"title":"Create a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns","href":"/api-reference/campaigns/create-a-campaign"},{"title":"List campaigns","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns","href":"/api-reference/campaigns/list-campaigns"},{"title":"Get a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}","href":"/api-reference/campaigns/get-a-campaign"},{"title":"Update a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml patch /campaigns/{campaignId}","href":"/api-reference/campaigns/update-a-campaign"},{"title":"Schedule a campaign launch","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/schedule","href":"/api-reference/campaigns/schedule-a-campaign-launch"},{"title":"Launch a campaign now","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/launch","href":"/api-reference/campaigns/launch-a-campaign-now"},{"title":"Append contacts to a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/contacts","href":"/api-reference/campaigns/append-contacts-to-a-campaign"},{"title":"Pause campaign dialing","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/pause","href":"/api-reference/campaigns/pause-campaign-dialing"},{"title":"Resume a paused campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/resume","href":"/api-reference/campaigns/resume-a-paused-campaign"},{"title":"Close a continuous campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/{campaignId}/close","href":"/api-reference/campaigns/close-a-continuous-campaign"}]},{"group":"Campaign outcomes","pages":[{"title":"Aggregate stats for a campaign","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/stats","href":"/api-reference/campaign-outcomes/aggregate-stats-for-a-campaign"},{"title":"List a campaign's outcomes","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/results","href":"/api-reference/campaign-outcomes/list-a-campaigns-outcomes"},{"title":"List a campaign's calls","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/calls","href":"/api-reference/campaign-outcomes/list-a-campaigns-calls"},{"title":"List a campaign's callback requests","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/callbacks","href":"/api-reference/campaign-outcomes/list-a-campaigns-callback-requests"},{"title":"Update a callback's status","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml patch /campaigns/callbacks/{callbackId}","href":"/api-reference/campaign-outcomes/update-a-callbacks-status"},{"title":"Add a note to a callback","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /campaigns/callbacks/{callbackId}/notes","href":"/api-reference/campaign-outcomes/add-a-note-to-a-callback"},{"title":"List a campaign's conversion records","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /campaigns/{campaignId}/conversions","href":"/api-reference/campaign-outcomes/list-a-campaigns-conversion-records"}]},{"group":"Contacts","pages":[{"title":"Upload a contact file","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-lists/uploads","href":"/api-reference/contacts/upload-a-contact-file"},{"title":"Re-preview an upload with a mapping","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-lists/uploads/{uploadId}/preview","href":"/api-reference/contacts/re-preview-an-upload-with-a-mapping"},{"title":"Dry-run a contact import","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-sources/preview","href":"/api-reference/contacts/dry-run-a-contact-import"},{"title":"Create a contact list","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-lists","href":"/api-reference/contacts/create-a-contact-list"},{"title":"List contact lists","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-lists","href":"/api-reference/contacts/list-contact-lists"},{"title":"Get a contact list's metadata","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-lists/{listId}","href":"/api-reference/contacts/get-a-contact-lists-metadata"},{"title":"Page through a list's contacts","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-lists/{listId}/contacts","href":"/api-reference/contacts/page-through-a-lists-contacts"},{"group":"Google Sheet sources","pages":[{"title":"Register a Google Sheet as a source","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-sources","href":"/api-reference/google-sheet-sources/register-a-google-sheet-as-a-source"},{"title":"List registered contact sources","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-sources","href":"/api-reference/google-sheet-sources/list-registered-contact-sources"},{"title":"Get a contact source's metadata","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml get /contact-sources/{sourceId}","href":"/api-reference/google-sheet-sources/get-a-contact-sources-metadata"},{"title":"Re-check a registered sheet","deprecated":null,"version":null,"openapi":"/voice-agents/api-reference/openapi.yaml post /contact-sources/{sourceId}/preview","href":"/api-reference/google-sheet-sources/re-check-a-registered-sheet"}]}]},{"group":"Integrations \u0026 delivery health","pages":[{"title":"Webhooks on the portal","href":"/voice-agents/api-reference/webhooks-on-the-portal"}]}]}]},{"tab":"Integration API","hidden":true,"pages":[{"title":"Integration API","href":"/voice-agents/api-reference/integration-api"}]},{"tab":"Realtime Assistants","hidden":true,"pages":[{"title":"Realtime Assistants","href":"/assistants/introduction"}]},{"tab":"Tutorials","pages":[{"title":"Tutorials","href":"/tutorials/livekit-voice-agent"}]},{"tab":"Syngenta Assistant","hidden":true,"pages":[{"title":"Syngenta Assistant","href":"/syngenta/authentication"}]}]},"basePath":"","title":"Update an assistant - Uplift AI API Docs","buildId":"dpl_596ePT575z4qnAFksq1biRW97aLY","deploymentId":"dpl_596ePT575z4qnAFksq1biRW97aLY","dynamics":["c2aa737661","2b790eda92","b0f84f53ff","a9bb46feb3"],"chunks":["OpenApiReferenceProvider-C9Wu0MeN.js","utils-jWgu-6Qf.js","cloneDeep-izs3Hzxb.js","_Uint8Array-BVIqJ90l.js","isObjectLike-C8vmzPEN.js","isArray-Dcu1dQ5t.js","utils-DBD8f9qn.js","toString-BX-iyh8G.js","isSymbol-CSH9U2Gm.js","addUniqueKeysToSchema-BGuX1ui5.js","snippetPresets-Evy63nQB.js","style-to-object-BY3JEAdk.js","v4-DIgz8zy6.js","conditional-requirements-CFM0id0Q.js","ApiExamples-BQHO1lnV.js","isEqual-BfaiBbcl.js","usePlaygroundInputsStore-B6C8m-t_.js","shallow-BG4cT0fH.js","getApiPlaygroundDisplay-CgEPrE-D.js","CodeSnippet-CU8JyZ9N.js","CodeSnippets-BnxHU32T.js","Page-D6S0Yh6q.js","getPastedJson-CwiYOonh.js","icon-DYDpWmDf.js","MethodPill-C-J-l7_c.js","DuplicateIcon-B6ARwg9w.js","createIcon-Dsv4MtDq.js","DynamicMarkdown-CtasenyM.js","SectionHeading-YNcgYwjB.js","axios-vUo_bRtp.js","Markdown-CwLx6PAg.js","clsx-C3kuh_dz.js","lib-DuNMoZ05.js","lib-B8HbPgcC.js","html-void-elements-mCSPHezU.js","dist-CmKHfscc.js","katex-YMM-FMeD.js","marked.esm-CZWythHk.js","AssistantPageLink-U3mI6Ljh.js"]}