curl --request GET \
--url https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n} \
--header 'x-access-token: <api-key>'import requests
url = "https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n}"
headers = {"x-access-token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-access-token': '<api-key>'}};
fetch('https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n}', 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/presentations/{id}/revisions/{n}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-access-token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n}")
.header("x-access-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-access-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"access": "owner",
"revision": {
"number": 22,
"version": 1,
"parent": 123,
"document": {},
"contentReport": {},
"timingReport": {},
"rendererVersion": "<string>",
"authorRole": "<string>",
"reason": "<string>",
"narration": {
"status": "none",
"timeline": {},
"sceneOffsets": [
123
],
"words": [
{}
]
},
"presenter": {
"status": "queued",
"queuedAt": "2023-11-07T05:31:56Z",
"startedAt": "2023-11-07T05:31:56Z",
"error": "LIPSYNC",
"reused": true
}
},
"media": {
"audio": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"vtt": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"poster": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"presenter": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"pictures": {},
"logos": {}
},
"assets": {
"base": "/presentation-renderer/",
"sourceLabels": {
"upload:64f1c0de0000000000000001": "Praxis AI: Human-First Digital Twins"
}
},
"presenterOnEdit": true,
"length": {
"seconds": 60,
"waits": {
"build": [
10,
20
],
"faceS": 150,
"exportS": 180
},
"pollMinutes": {
"build": 10,
"face": 20
}
},
"rerecord": {
"waitS": 150,
"credits": 1.8
}
}Get one version of a presentation video, ready to play
The version’s document, its validation reports and narration timing, with short-lived links (at most 15 minutes; ask again to refresh) to the narration audio, captions (WebVTT) and poster when they exist, and to the Digital Twin’s recorded face (media.presenter, a muted video) once it is ready. The player’s fonts and logo are public files under assets.base. For an administrator’s support read, claims and source excerpts from files outside the Digital Twin’s shared vault are hidden.
curl --request GET \
--url https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n} \
--header 'x-access-token: <api-key>'import requests
url = "https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n}"
headers = {"x-access-token": "<api-key>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'x-access-token': '<api-key>'}};
fetch('https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n}', 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/presentations/{id}/revisions/{n}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"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"
"net/http"
"io"
)
func main() {
url := "https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("x-access-token", "<api-key>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n}")
.header("x-access-token", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://pria.praxislxp.com/api/user/presentations/{id}/revisions/{n}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["x-access-token"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"success": true,
"access": "owner",
"revision": {
"number": 22,
"version": 1,
"parent": 123,
"document": {},
"contentReport": {},
"timingReport": {},
"rendererVersion": "<string>",
"authorRole": "<string>",
"reason": "<string>",
"narration": {
"status": "none",
"timeline": {},
"sceneOffsets": [
123
],
"words": [
{}
]
},
"presenter": {
"status": "queued",
"queuedAt": "2023-11-07T05:31:56Z",
"startedAt": "2023-11-07T05:31:56Z",
"error": "LIPSYNC",
"reused": true
}
},
"media": {
"audio": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"vtt": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"poster": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"presenter": {
"url": "<string>",
"expiresAt": "2023-11-07T05:31:56Z"
},
"pictures": {},
"logos": {}
},
"assets": {
"base": "/presentation-renderer/",
"sourceLabels": {
"upload:64f1c0de0000000000000001": "Praxis AI: Human-First Digital Twins"
}
},
"presenterOnEdit": true,
"length": {
"seconds": 60,
"waits": {
"build": [
10,
20
],
"faceS": 150,
"exportS": 180
},
"pollMinutes": {
"build": 10,
"face": 20
}
},
"rerecord": {
"waitS": 150,
"credits": 1.8
}
}Authorizations
JWT token passed in x-access-token header
Path Parameters
The revision number (a row's number, not its version); a revision removed by retention → 404
1 <= x <= 99999Response
The version
true
owner, admin Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Show child attributes
Owner only (false for an admin read): a narration edit records the Digital Twin's face again for the whole video (credits)
The video's length and the waits that go with it (a video made before lengths existed is 1 minute)
Show child attributes
Show child attributes
Owner only, and only when a narration edit records the face again: what that takes before you save
Show child attributes
Show child attributes
Was this page helpful?