curl --request PUT \
--url https://pria.praxislxp.com/api/user/institution \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"conversationModel": "<string>",
"maxCompletionTokens": 123,
"reasoningEffort": "<string>",
"extendedContext": true,
"about": "<string>",
"personaMode": true,
"personalisationAsked": true,
"disableToolUseInstructions": true,
"kmeanScore": 123,
"ragLimitChunks": 123,
"toolsDisabled": true,
"enableModeration": true,
"alwaysCiteSources": true,
"toolResultsMaxChars": 100500,
"rtEnabled": true,
"rtAdminOnly": true,
"rtTextInputEnabled": true,
"rtModel": "<string>",
"rtVoice": "<string>",
"gemini_rt_voice": "<string>",
"xai_rt_voice": "<string>",
"rtTranscriptionLanguage": "<string>",
"disableClipboardForUser": true,
"locationEnabled": true,
"guestUI": true,
"creditCaps": {
"enabled": false,
"perUserInstitution": 123,
"perUser24h": 123
}
}
'import requests
url = "https://pria.praxislxp.com/api/user/institution"
payload = {
"conversationModel": "<string>",
"maxCompletionTokens": 123,
"reasoningEffort": "<string>",
"extendedContext": True,
"about": "<string>",
"personaMode": True,
"personalisationAsked": True,
"disableToolUseInstructions": True,
"kmeanScore": 123,
"ragLimitChunks": 123,
"toolsDisabled": True,
"enableModeration": True,
"alwaysCiteSources": True,
"toolResultsMaxChars": 100500,
"rtEnabled": True,
"rtAdminOnly": True,
"rtTextInputEnabled": True,
"rtModel": "<string>",
"rtVoice": "<string>",
"gemini_rt_voice": "<string>",
"xai_rt_voice": "<string>",
"rtTranscriptionLanguage": "<string>",
"disableClipboardForUser": True,
"locationEnabled": True,
"guestUI": True,
"creditCaps": {
"enabled": False,
"perUserInstitution": 123,
"perUser24h": 123
}
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
conversationModel: '<string>',
maxCompletionTokens: 123,
reasoningEffort: '<string>',
extendedContext: true,
about: '<string>',
personaMode: true,
personalisationAsked: true,
disableToolUseInstructions: true,
kmeanScore: 123,
ragLimitChunks: 123,
toolsDisabled: true,
enableModeration: true,
alwaysCiteSources: true,
toolResultsMaxChars: 100500,
rtEnabled: true,
rtAdminOnly: true,
rtTextInputEnabled: true,
rtModel: '<string>',
rtVoice: '<string>',
gemini_rt_voice: '<string>',
xai_rt_voice: '<string>',
rtTranscriptionLanguage: '<string>',
disableClipboardForUser: true,
locationEnabled: true,
guestUI: true,
creditCaps: {enabled: false, perUserInstitution: 123, perUser24h: 123}
})
};
fetch('https://pria.praxislxp.com/api/user/institution', 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://pria.praxislxp.com/api/user/institution",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'conversationModel' => '<string>',
'maxCompletionTokens' => 123,
'reasoningEffort' => '<string>',
'extendedContext' => true,
'about' => '<string>',
'personaMode' => true,
'personalisationAsked' => true,
'disableToolUseInstructions' => true,
'kmeanScore' => 123,
'ragLimitChunks' => 123,
'toolsDisabled' => true,
'enableModeration' => true,
'alwaysCiteSources' => true,
'toolResultsMaxChars' => 100500,
'rtEnabled' => true,
'rtAdminOnly' => true,
'rtTextInputEnabled' => true,
'rtModel' => '<string>',
'rtVoice' => '<string>',
'gemini_rt_voice' => '<string>',
'xai_rt_voice' => '<string>',
'rtTranscriptionLanguage' => '<string>',
'disableClipboardForUser' => true,
'locationEnabled' => true,
'guestUI' => true,
'creditCaps' => [
'enabled' => false,
'perUserInstitution' => 123,
'perUser24h' => 123
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://pria.praxislxp.com/api/user/institution"
payload := strings.NewReader("{\n \"conversationModel\": \"<string>\",\n \"maxCompletionTokens\": 123,\n \"reasoningEffort\": \"<string>\",\n \"extendedContext\": true,\n \"about\": \"<string>\",\n \"personaMode\": true,\n \"personalisationAsked\": true,\n \"disableToolUseInstructions\": true,\n \"kmeanScore\": 123,\n \"ragLimitChunks\": 123,\n \"toolsDisabled\": true,\n \"enableModeration\": true,\n \"alwaysCiteSources\": true,\n \"toolResultsMaxChars\": 100500,\n \"rtEnabled\": true,\n \"rtAdminOnly\": true,\n \"rtTextInputEnabled\": true,\n \"rtModel\": \"<string>\",\n \"rtVoice\": \"<string>\",\n \"gemini_rt_voice\": \"<string>\",\n \"xai_rt_voice\": \"<string>\",\n \"rtTranscriptionLanguage\": \"<string>\",\n \"disableClipboardForUser\": true,\n \"locationEnabled\": true,\n \"guestUI\": true,\n \"creditCaps\": {\n \"enabled\": false,\n \"perUserInstitution\": 123,\n \"perUser24h\": 123\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-access-token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://pria.praxislxp.com/api/user/institution")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"conversationModel\": \"<string>\",\n \"maxCompletionTokens\": 123,\n \"reasoningEffort\": \"<string>\",\n \"extendedContext\": true,\n \"about\": \"<string>\",\n \"personaMode\": true,\n \"personalisationAsked\": true,\n \"disableToolUseInstructions\": true,\n \"kmeanScore\": 123,\n \"ragLimitChunks\": 123,\n \"toolsDisabled\": true,\n \"enableModeration\": true,\n \"alwaysCiteSources\": true,\n \"toolResultsMaxChars\": 100500,\n \"rtEnabled\": true,\n \"rtAdminOnly\": true,\n \"rtTextInputEnabled\": true,\n \"rtModel\": \"<string>\",\n \"rtVoice\": \"<string>\",\n \"gemini_rt_voice\": \"<string>\",\n \"xai_rt_voice\": \"<string>\",\n \"rtTranscriptionLanguage\": \"<string>\",\n \"disableClipboardForUser\": true,\n \"locationEnabled\": true,\n \"guestUI\": true,\n \"creditCaps\": {\n \"enabled\": false,\n \"perUserInstitution\": 123,\n \"perUser24h\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/user/institution")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"conversationModel\": \"<string>\",\n \"maxCompletionTokens\": 123,\n \"reasoningEffort\": \"<string>\",\n \"extendedContext\": true,\n \"about\": \"<string>\",\n \"personaMode\": true,\n \"personalisationAsked\": true,\n \"disableToolUseInstructions\": true,\n \"kmeanScore\": 123,\n \"ragLimitChunks\": 123,\n \"toolsDisabled\": true,\n \"enableModeration\": true,\n \"alwaysCiteSources\": true,\n \"toolResultsMaxChars\": 100500,\n \"rtEnabled\": true,\n \"rtAdminOnly\": true,\n \"rtTextInputEnabled\": true,\n \"rtModel\": \"<string>\",\n \"rtVoice\": \"<string>\",\n \"gemini_rt_voice\": \"<string>\",\n \"xai_rt_voice\": \"<string>\",\n \"rtTranscriptionLanguage\": \"<string>\",\n \"disableClipboardForUser\": true,\n \"locationEnabled\": true,\n \"guestUI\": true,\n \"creditCaps\": {\n \"enabled\": false,\n \"perUserInstitution\": 123,\n \"perUser24h\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Institution updated!"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "Authentication Required"
}{
"success": false,
"message": "Institution not found!"
}Update institution settings
Updates the current user’s institution configuration. No admin privilege check is enforced — any authenticated user with an active institution can call this endpoint, though some properties (such as creditCaps) require the institutions.edit entitlement and are silently dropped otherwise. Admins/managers may set creditCaps (per-user quotas) on their institution when the account has not enabled caps; when the account owns caps creditCaps is ignored (read-only inherited). The request body is validated against the institution authorized properties list (conversationModel, maxCompletionTokens, reasoningEffort, extendedContext, about, personaMode, personalisationAsked, disableToolUseInstructions, kmeanScore, ragLimitChunks, toolsDisabled, compactHistory, displayThinkingDetails, displayAgentDetails, displayRagSearchDetails, displayThinkingExecution, displayToolExecution, enableModeration, alwaysCiteSources, toolResultsMaxChars, rtEnabled, rtAdminOnly, rtTextInputEnabled, rtModel, rtVoice, gemini_rt_voice, xai_rt_voice, rtVADEagerness, rtNoiseReduction, rtTranscriptionLanguage, disableFileUploadForUser, disableAudioNotesForUser, disableClipboardForUser, locationEnabled, guestUI, theme, picture, ainame, assistantsDisabled). Any properties not in this list are rejected with a 400.
curl --request PUT \
--url https://pria.praxislxp.com/api/user/institution \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"conversationModel": "<string>",
"maxCompletionTokens": 123,
"reasoningEffort": "<string>",
"extendedContext": true,
"about": "<string>",
"personaMode": true,
"personalisationAsked": true,
"disableToolUseInstructions": true,
"kmeanScore": 123,
"ragLimitChunks": 123,
"toolsDisabled": true,
"enableModeration": true,
"alwaysCiteSources": true,
"toolResultsMaxChars": 100500,
"rtEnabled": true,
"rtAdminOnly": true,
"rtTextInputEnabled": true,
"rtModel": "<string>",
"rtVoice": "<string>",
"gemini_rt_voice": "<string>",
"xai_rt_voice": "<string>",
"rtTranscriptionLanguage": "<string>",
"disableClipboardForUser": true,
"locationEnabled": true,
"guestUI": true,
"creditCaps": {
"enabled": false,
"perUserInstitution": 123,
"perUser24h": 123
}
}
'import requests
url = "https://pria.praxislxp.com/api/user/institution"
payload = {
"conversationModel": "<string>",
"maxCompletionTokens": 123,
"reasoningEffort": "<string>",
"extendedContext": True,
"about": "<string>",
"personaMode": True,
"personalisationAsked": True,
"disableToolUseInstructions": True,
"kmeanScore": 123,
"ragLimitChunks": 123,
"toolsDisabled": True,
"enableModeration": True,
"alwaysCiteSources": True,
"toolResultsMaxChars": 100500,
"rtEnabled": True,
"rtAdminOnly": True,
"rtTextInputEnabled": True,
"rtModel": "<string>",
"rtVoice": "<string>",
"gemini_rt_voice": "<string>",
"xai_rt_voice": "<string>",
"rtTranscriptionLanguage": "<string>",
"disableClipboardForUser": True,
"locationEnabled": True,
"guestUI": True,
"creditCaps": {
"enabled": False,
"perUserInstitution": 123,
"perUser24h": 123
}
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
conversationModel: '<string>',
maxCompletionTokens: 123,
reasoningEffort: '<string>',
extendedContext: true,
about: '<string>',
personaMode: true,
personalisationAsked: true,
disableToolUseInstructions: true,
kmeanScore: 123,
ragLimitChunks: 123,
toolsDisabled: true,
enableModeration: true,
alwaysCiteSources: true,
toolResultsMaxChars: 100500,
rtEnabled: true,
rtAdminOnly: true,
rtTextInputEnabled: true,
rtModel: '<string>',
rtVoice: '<string>',
gemini_rt_voice: '<string>',
xai_rt_voice: '<string>',
rtTranscriptionLanguage: '<string>',
disableClipboardForUser: true,
locationEnabled: true,
guestUI: true,
creditCaps: {enabled: false, perUserInstitution: 123, perUser24h: 123}
})
};
fetch('https://pria.praxislxp.com/api/user/institution', 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://pria.praxislxp.com/api/user/institution",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "PUT",
CURLOPT_POSTFIELDS => json_encode([
'conversationModel' => '<string>',
'maxCompletionTokens' => 123,
'reasoningEffort' => '<string>',
'extendedContext' => true,
'about' => '<string>',
'personaMode' => true,
'personalisationAsked' => true,
'disableToolUseInstructions' => true,
'kmeanScore' => 123,
'ragLimitChunks' => 123,
'toolsDisabled' => true,
'enableModeration' => true,
'alwaysCiteSources' => true,
'toolResultsMaxChars' => 100500,
'rtEnabled' => true,
'rtAdminOnly' => true,
'rtTextInputEnabled' => true,
'rtModel' => '<string>',
'rtVoice' => '<string>',
'gemini_rt_voice' => '<string>',
'xai_rt_voice' => '<string>',
'rtTranscriptionLanguage' => '<string>',
'disableClipboardForUser' => true,
'locationEnabled' => true,
'guestUI' => true,
'creditCaps' => [
'enabled' => false,
'perUserInstitution' => 123,
'perUser24h' => 123
]
]),
CURLOPT_HTTPHEADER => [
"Content-Type: application/json",
"x-access-token: <api-key>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"strings"
"net/http"
"io"
)
func main() {
url := "https://pria.praxislxp.com/api/user/institution"
payload := strings.NewReader("{\n \"conversationModel\": \"<string>\",\n \"maxCompletionTokens\": 123,\n \"reasoningEffort\": \"<string>\",\n \"extendedContext\": true,\n \"about\": \"<string>\",\n \"personaMode\": true,\n \"personalisationAsked\": true,\n \"disableToolUseInstructions\": true,\n \"kmeanScore\": 123,\n \"ragLimitChunks\": 123,\n \"toolsDisabled\": true,\n \"enableModeration\": true,\n \"alwaysCiteSources\": true,\n \"toolResultsMaxChars\": 100500,\n \"rtEnabled\": true,\n \"rtAdminOnly\": true,\n \"rtTextInputEnabled\": true,\n \"rtModel\": \"<string>\",\n \"rtVoice\": \"<string>\",\n \"gemini_rt_voice\": \"<string>\",\n \"xai_rt_voice\": \"<string>\",\n \"rtTranscriptionLanguage\": \"<string>\",\n \"disableClipboardForUser\": true,\n \"locationEnabled\": true,\n \"guestUI\": true,\n \"creditCaps\": {\n \"enabled\": false,\n \"perUserInstitution\": 123,\n \"perUser24h\": 123\n }\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("x-access-token", "<api-key>")
req.Header.Add("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.put("https://pria.praxislxp.com/api/user/institution")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"conversationModel\": \"<string>\",\n \"maxCompletionTokens\": 123,\n \"reasoningEffort\": \"<string>\",\n \"extendedContext\": true,\n \"about\": \"<string>\",\n \"personaMode\": true,\n \"personalisationAsked\": true,\n \"disableToolUseInstructions\": true,\n \"kmeanScore\": 123,\n \"ragLimitChunks\": 123,\n \"toolsDisabled\": true,\n \"enableModeration\": true,\n \"alwaysCiteSources\": true,\n \"toolResultsMaxChars\": 100500,\n \"rtEnabled\": true,\n \"rtAdminOnly\": true,\n \"rtTextInputEnabled\": true,\n \"rtModel\": \"<string>\",\n \"rtVoice\": \"<string>\",\n \"gemini_rt_voice\": \"<string>\",\n \"xai_rt_voice\": \"<string>\",\n \"rtTranscriptionLanguage\": \"<string>\",\n \"disableClipboardForUser\": true,\n \"locationEnabled\": true,\n \"guestUI\": true,\n \"creditCaps\": {\n \"enabled\": false,\n \"perUserInstitution\": 123,\n \"perUser24h\": 123\n }\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/user/institution")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"conversationModel\": \"<string>\",\n \"maxCompletionTokens\": 123,\n \"reasoningEffort\": \"<string>\",\n \"extendedContext\": true,\n \"about\": \"<string>\",\n \"personaMode\": true,\n \"personalisationAsked\": true,\n \"disableToolUseInstructions\": true,\n \"kmeanScore\": 123,\n \"ragLimitChunks\": 123,\n \"toolsDisabled\": true,\n \"enableModeration\": true,\n \"alwaysCiteSources\": true,\n \"toolResultsMaxChars\": 100500,\n \"rtEnabled\": true,\n \"rtAdminOnly\": true,\n \"rtTextInputEnabled\": true,\n \"rtModel\": \"<string>\",\n \"rtVoice\": \"<string>\",\n \"gemini_rt_voice\": \"<string>\",\n \"xai_rt_voice\": \"<string>\",\n \"rtTranscriptionLanguage\": \"<string>\",\n \"disableClipboardForUser\": true,\n \"locationEnabled\": true,\n \"guestUI\": true,\n \"creditCaps\": {\n \"enabled\": false,\n \"perUserInstitution\": 123,\n \"perUser24h\": 123\n }\n}"
response = http.request(request)
puts response.read_body{
"success": true,
"message": "Institution updated!"
}{
"success": false,
"message": "<string>"
}{
"success": false,
"message": "Authentication Required"
}{
"success": false,
"message": "Institution not found!"
}Authorizations
JWT token passed in x-access-token header
Body
Any combination of authorized institution properties
Default conversation model for the institution
Maximum completion tokens for AI responses
Reasoning effort level (none, low, medium, high, max)
Whether extended context is enabled
About text for the institution
Persona twin toggle (admin-gated — requires the institutions.edit entitlement, silently stripped otherwise). When true the platform prompt becomes persona-aware — capability and onboarding questions are answered in the twin's own voice, without tool lists or platform guides.
Whether personalisation has been asked
Whether to disable tool use instructions
K-means score threshold for RAG
Maximum number of RAG chunks to retrieve
Whether tools are disabled for AI conversations
Route incoming prompts through the moderation model before they reach the main LLM
Add an explicit citation directive to the system prompt so the model footnotes RAG / web sources in its answers
Character cap for individual tool / scrape / vault results before they are trimmed and saved to the IP Vault. Default 60000.
1000 <= x <= 200000Enable Convo / Speech-to-Speech (realtime voice) mode for this instance
Restrict Convo mode to admin users only
Allow text input alongside speech while in Convo mode
System model id for Convo / Speech-to-Speech (provider auto-derived from the model id)
OpenAI Realtime voice (alloy, ash, ballad, coral, echo, sage, shimmer, verse, cedar, marin)
Gemini Live voice (Puck, Charon, Kore, etc.)
xAI realtime voice (eve, ara, rex, sal, leo)
OpenAI realtime voice-activity-detection eagerness
low, medium, high OpenAI realtime noise reduction profile
, near_field, far_field ISO 639-1 language hint for OpenAI realtime transcription (blank = auto-detect)
Hide clipboard controls from non-admin users in this institution
Allow this institution's users to opt-in to sharing browser geolocation with the assistant for location-aware answers. Defaults to true.
Strip the UI down to a chat-only minimum surface for non-admin users
Forced UI theme for all users in this institution. '' = user directed, 'dark' = force dark mode, 'light' = force light mode
, dark, light Per-user quota configuration. Settable by admins/managers with the institutions.edit entitlement when the account has not enabled caps; ignored (read-only inherited) when the account owns caps.
Show child attributes
Show child attributes
Was this page helpful?