curl --request GET \
--url https://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript', 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.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}Course Assistant Transcript
The full transcript, as a flat, time-ordered timeline of every turn ever
recorded for this session, WITH PAGING. GET / also returns a
turns list, but unpaged and alongside the whole resume surface (current
question, coverage, draft); this endpoint is the read-only reader for a
conversation that issue #237 keeps alive for days.
Each stored turn ROW becomes EXACTLY TWO entries in turns, the user’s
message and the assistant’s reply, in that order:
{turn_no, role: "user"|"assistant", modality: "text"|"voice", content, created_at} — the same entry shape GET / uses, content
included, plus modality. content is "" when that side genuinely said
nothing (a confirm turn carries no user message) and null on both
entries of a turn the retention sweep has redacted or one whose reply has
not been written yet. modality is server-owned and describes the TURN,
not the entry — a voice turn’s user entry holds what was heard (the
speech-to-text transcript, never audio) and its assistant entry holds the
reply text that was spoken back.
?limit (default 200, max 500, clamped rather than rejected) and ?offset
page over TURN ROWS, NOT over the entries: limit=1 returns the two entries
of exactly one turn. Page with next_offset (the row cursor for the next
call, already in row units) and stop when it reaches count, the total
number of turn rows in the session. Advancing offset by len(turns)
instead would skip every second turn.
curl --request GET \
--url https://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript', 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.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$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://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.myustadia.com/api/v1/courses/{course_id}/assistant/{session_id}/transcript")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"detail": [
{
"loc": [
"<string>"
],
"msg": "<string>",
"type": "<string>",
"input": "<unknown>",
"ctx": {}
}
]
}