curl --request GET \
--url https://api.upliftai.org/v1/realtime-assistants/builds/status/{buildId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.upliftai.org/v1/realtime-assistants/builds/status/{buildId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.upliftai.org/v1/realtime-assistants/builds/status/{buildId}', 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.upliftai.org/v1/realtime-assistants/builds/status/{buildId}",
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.upliftai.org/v1/realtime-assistants/builds/status/{buildId}"
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.upliftai.org/v1/realtime-assistants/builds/status/{buildId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upliftai.org/v1/realtime-assistants/builds/status/{buildId}")
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{
"buildId": "425d3b75-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "running",
"round": 1,
"phase": "testing",
"persona": "Ayesha Siddiqi — Lahore patient confirming tomorrow 11am, keeps asking about fees",
"transcriptsDone": 7,
"transcriptsTotal": 10
}Poll a build's progress
Works for refine runs too — poll whichever buildId you got back. Runs take minutes, so poll every few seconds. done only means the pipeline stopped; whether the grader was satisfied is result.passed. Live detail (phase, round, transcript counts) is kept for an hour after the run last moved; after that the poll still returns the outcome — result on success, error on failure.
curl --request GET \
--url https://api.upliftai.org/v1/realtime-assistants/builds/status/{buildId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.upliftai.org/v1/realtime-assistants/builds/status/{buildId}"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.upliftai.org/v1/realtime-assistants/builds/status/{buildId}', 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.upliftai.org/v1/realtime-assistants/builds/status/{buildId}",
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.upliftai.org/v1/realtime-assistants/builds/status/{buildId}"
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.upliftai.org/v1/realtime-assistants/builds/status/{buildId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.upliftai.org/v1/realtime-assistants/builds/status/{buildId}")
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{
"buildId": "425d3b75-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
"status": "running",
"round": 1,
"phase": "testing",
"persona": "Ayesha Siddiqi — Lahore patient confirming tomorrow 11am, keeps asking about fees",
"transcriptsDone": 7,
"transcriptsTotal": 10
}Authorizations
Project API key (sk_api_…).
Path Parameters
The buildId the build or refine returned.
Response
The run's latest frame.
Absent while phase is authoring through refining. Keep the id the start-build response gave you.
started lasts a moment, so the first poll usually already reads running. done and failed are terminal.
started, running, done, failed Step the pipeline is on: the prompt is written (authoring), test personas are generated, each rehearses a text-only call (testing), the transcripts are graded (judging), and anything the grader flags drives a rewrite (refining) before the next round.
authoring, generating_personas, testing, judging, refining, persisting, done, failed Which hardening round is running, 1 to 3; 0 on frames outside the loop.
The test persona whose rehearsal just finished. Only while testing.
Rehearsals finished this round. Only while testing.
Rehearsals in this round. Present while testing and on the judging frame.
Why the run stopped, when status is failed. A second run against an assistant that is already building fails here rather than at the request: A build is already in progress for this assistant.
The finished build. Present only once status is done.
Show child attributes
Show child attributes
