curl --request POST \
--url https://pria.praxislxp.com/api/ai/rtProxy/voiceTurn \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"input": "What is on my schedule today?",
"message": "<string>",
"messages": [
{
"content": "<string>"
}
],
"requestArgs": {},
"token": "<string>"
}
'import requests
url = "https://pria.praxislxp.com/api/ai/rtProxy/voiceTurn"
payload = {
"input": "What is on my schedule today?",
"message": "<string>",
"messages": [{ "content": "<string>" }],
"requestArgs": {},
"token": "<string>"
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: 'What is on my schedule today?',
message: '<string>',
messages: [{content: '<string>'}],
requestArgs: {},
token: '<string>'
})
};
fetch('https://pria.praxislxp.com/api/ai/rtProxy/voiceTurn', 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/ai/rtProxy/voiceTurn",
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([
'input' => 'What is on my schedule today?',
'message' => '<string>',
'messages' => [
[
'content' => '<string>'
]
],
'requestArgs' => [
],
'token' => '<string>'
]),
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/ai/rtProxy/voiceTurn"
payload := strings.NewReader("{\n \"input\": \"What is on my schedule today?\",\n \"message\": \"<string>\",\n \"messages\": [\n {\n \"content\": \"<string>\"\n }\n ],\n \"requestArgs\": {},\n \"token\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://pria.praxislxp.com/api/ai/rtProxy/voiceTurn")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"input\": \"What is on my schedule today?\",\n \"message\": \"<string>\",\n \"messages\": [\n {\n \"content\": \"<string>\"\n }\n ],\n \"requestArgs\": {},\n \"token\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/ai/rtProxy/voiceTurn")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input\": \"What is on my schedule today?\",\n \"message\": \"<string>\",\n \"messages\": [\n {\n \"content\": \"<string>\"\n }\n ],\n \"requestArgs\": {},\n \"token\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"type": "segment",
"kind": "speak",
"text": "<string>"
}Stream a provider-neutral avatar voice turn (Anam + future providers)
Provider-neutral alias for the per-turn voice bridge. Reuses the same
streamVoiceTurn NDJSON handler as the shared voice-turn bridge.
Used by the Anam Pria-direct Custom LLM (CUSTOMER_CLIENT_V1) frontend to
fetch each assistant turn and stream the text into the Anam talk stream.
Pria remains the LLM/tools/RAG/IP Vault authority for every turn.
Response is application/x-ndjson with segment lines followed by one
terminal end line (identical contract to the shared voice-turn bridge).
curl --request POST \
--url https://pria.praxislxp.com/api/ai/rtProxy/voiceTurn \
--header 'Content-Type: application/json' \
--header 'x-access-token: <api-key>' \
--data '
{
"input": "What is on my schedule today?",
"message": "<string>",
"messages": [
{
"content": "<string>"
}
],
"requestArgs": {},
"token": "<string>"
}
'import requests
url = "https://pria.praxislxp.com/api/ai/rtProxy/voiceTurn"
payload = {
"input": "What is on my schedule today?",
"message": "<string>",
"messages": [{ "content": "<string>" }],
"requestArgs": {},
"token": "<string>"
}
headers = {
"x-access-token": "<api-key>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'POST',
headers: {'x-access-token': '<api-key>', 'Content-Type': 'application/json'},
body: JSON.stringify({
input: 'What is on my schedule today?',
message: '<string>',
messages: [{content: '<string>'}],
requestArgs: {},
token: '<string>'
})
};
fetch('https://pria.praxislxp.com/api/ai/rtProxy/voiceTurn', 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/ai/rtProxy/voiceTurn",
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([
'input' => 'What is on my schedule today?',
'message' => '<string>',
'messages' => [
[
'content' => '<string>'
]
],
'requestArgs' => [
],
'token' => '<string>'
]),
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/ai/rtProxy/voiceTurn"
payload := strings.NewReader("{\n \"input\": \"What is on my schedule today?\",\n \"message\": \"<string>\",\n \"messages\": [\n {\n \"content\": \"<string>\"\n }\n ],\n \"requestArgs\": {},\n \"token\": \"<string>\"\n}")
req, _ := http.NewRequest("POST", 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.post("https://pria.praxislxp.com/api/ai/rtProxy/voiceTurn")
.header("x-access-token", "<api-key>")
.header("Content-Type", "application/json")
.body("{\n \"input\": \"What is on my schedule today?\",\n \"message\": \"<string>\",\n \"messages\": [\n {\n \"content\": \"<string>\"\n }\n ],\n \"requestArgs\": {},\n \"token\": \"<string>\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/ai/rtProxy/voiceTurn")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Post.new(url)
request["x-access-token"] = '<api-key>'
request["Content-Type"] = 'application/json'
request.body = "{\n \"input\": \"What is on my schedule today?\",\n \"message\": \"<string>\",\n \"messages\": [\n {\n \"content\": \"<string>\"\n }\n ],\n \"requestArgs\": {},\n \"token\": \"<string>\"\n}"
response = http.request(request)
puts response.read_body{
"type": "segment",
"kind": "speak",
"text": "<string>"
}Authorizations
JWT token passed in x-access-token header
Body
Final user utterance for this turn. Either input or message is required.
"What is on my schedule today?"
Alias for input (legacy). One of the two must be a non-empty string.
Optional OpenAI-style conversation history for the turn. When omitted the server constructs [{role:'user', content: input}].
Show child attributes
Show child attributes
Optional realtime context (selectedCourse, assistantId, userISODate, userTimezone, etc.). Merged into the user object before context build.
Optional auth JWT (alternative to Authorization / x-access-token headers). Used by streaming clients that cannot easily set custom headers.
Response
NDJSON stream of segment lines terminated by one end line.
Was this page helpful?