curl --request PUT \
--url https://api.pyai.com/orgs/{orgId}/trace/uploads/{id} \
--header 'Content-Type: application/json' \
--cookie pyai_session= \
--data '
{
"transcript": "<string>",
"format": "txt"
}
'import requests
url = "https://api.pyai.com/orgs/{orgId}/trace/uploads/{id}"
payload = {
"transcript": "<string>",
"format": "txt"
}
headers = {
"cookie": "pyai_session=",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {cookie: 'pyai_session=', 'Content-Type': 'application/json'},
body: JSON.stringify({transcript: '<string>', format: 'txt'})
};
fetch('https://api.pyai.com/orgs/{orgId}/trace/uploads/{id}', 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.pyai.com/orgs/{orgId}/trace/uploads/{id}",
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([
'transcript' => '<string>',
'format' => 'txt'
]),
CURLOPT_COOKIE => "pyai_session=",
CURLOPT_HTTPHEADER => [
"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.pyai.com/orgs/{orgId}/trace/uploads/{id}"
payload := strings.NewReader("{\n \"transcript\": \"<string>\",\n \"format\": \"txt\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("cookie", "pyai_session=")
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://api.pyai.com/orgs/{orgId}/trace/uploads/{id}")
.header("cookie", "pyai_session=")
.header("Content-Type", "application/json")
.body("{\n \"transcript\": \"<string>\",\n \"format\": \"txt\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pyai.com/orgs/{orgId}/trace/uploads/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["cookie"] = 'pyai_session='
request["Content-Type"] = 'application/json'
request.body = "{\n \"transcript\": \"<string>\",\n \"format\": \"txt\"\n}"
response = http.request(request)
puts response.read_body{
"object": "trace.interaction",
"id": "<string>",
"agent_id": "<string>",
"product": "hear",
"verdict": "PASS",
"findings": 123,
"blocked_turns": 123,
"modified_turns": 123,
"packs_enforced": "<string>",
"scored_at": 123,
"source": "<string>"
}Review an uploaded or pasted transcript
Console cookie authentication, a trusted console Origin and an owner, admin or developer role are required. Runs the same deterministic personal data pattern scan used by Hear and saves an auditable Trace scorecard. No provider connection or change to the organization Trace default is required. TXT, SRT and VTT are supported, up to 200,000 UTF-8 bytes. Raw transcript text is not retained by this route; findings contain redacted placeholders. This does not assess consent, disclosures or legal compliance. Repeat the same UUID and content after an interrupted response; changed content returns 409.
curl --request PUT \
--url https://api.pyai.com/orgs/{orgId}/trace/uploads/{id} \
--header 'Content-Type: application/json' \
--cookie pyai_session= \
--data '
{
"transcript": "<string>",
"format": "txt"
}
'import requests
url = "https://api.pyai.com/orgs/{orgId}/trace/uploads/{id}"
payload = {
"transcript": "<string>",
"format": "txt"
}
headers = {
"cookie": "pyai_session=",
"Content-Type": "application/json"
}
response = requests.put(url, json=payload, headers=headers)
print(response.text)const options = {
method: 'PUT',
headers: {cookie: 'pyai_session=', 'Content-Type': 'application/json'},
body: JSON.stringify({transcript: '<string>', format: 'txt'})
};
fetch('https://api.pyai.com/orgs/{orgId}/trace/uploads/{id}', 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.pyai.com/orgs/{orgId}/trace/uploads/{id}",
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([
'transcript' => '<string>',
'format' => 'txt'
]),
CURLOPT_COOKIE => "pyai_session=",
CURLOPT_HTTPHEADER => [
"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.pyai.com/orgs/{orgId}/trace/uploads/{id}"
payload := strings.NewReader("{\n \"transcript\": \"<string>\",\n \"format\": \"txt\"\n}")
req, _ := http.NewRequest("PUT", url, payload)
req.Header.Add("cookie", "pyai_session=")
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://api.pyai.com/orgs/{orgId}/trace/uploads/{id}")
.header("cookie", "pyai_session=")
.header("Content-Type", "application/json")
.body("{\n \"transcript\": \"<string>\",\n \"format\": \"txt\"\n}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pyai.com/orgs/{orgId}/trace/uploads/{id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Put.new(url)
request["cookie"] = 'pyai_session='
request["Content-Type"] = 'application/json'
request.body = "{\n \"transcript\": \"<string>\",\n \"format\": \"txt\"\n}"
response = http.request(request)
puts response.read_body{
"object": "trace.interaction",
"id": "<string>",
"agent_id": "<string>",
"product": "hear",
"verdict": "PASS",
"findings": 123,
"blocked_turns": 123,
"modified_turns": 123,
"packs_enforced": "<string>",
"scored_at": 123,
"source": "<string>"
}Authorizations
Console session cookie. PyAI-admin routes also require the configured platform-admin email allowlist.
Body
Response
Saved Trace interaction.
"trace.interaction"
call_id
hear, speak, clone, cue, omni, agents, null PASS, WARN, FAIL Unix ms.
Call origin, for example external.