Get build status
curl --request GET \
--url https://api.pipecat.daily.co/v1/builds/{buildId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.pipecat.daily.co/v1/builds/{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.pipecat.daily.co/v1/builds/{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.pipecat.daily.co/v1/builds/{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.pipecat.daily.co/v1/builds/{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.pipecat.daily.co/v1/builds/{buildId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pipecat.daily.co/v1/builds/{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{
"build": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"organizationId": "org_abc123",
"status": "success",
"region": "us-west",
"contextHash": "a1b2c3d4e5f6a7b8",
"dockerfilePath": "Dockerfile",
"imageUri": "123456789.dkr.ecr.us-west-2.amazonaws.com/pipecat-cloud/org_abc123:a1b2c3d4e5f6a7b8",
"logsUrl": "https://console.aws.amazon.com/codebuild/...",
"errorMessage": "Docker build failed: COPY failed - file not found: requirements.txt",
"contextSizeBytes": 10485760,
"imageSizeBytes": 524288000,
"buildDurationSeconds": 120,
"startedAt": "2026-02-20T12:00:00.000Z",
"completedAt": "2026-02-20T12:02:00.000Z",
"createdAt": "2026-02-20T12:00:00.000Z",
"updatedAt": "2026-02-20T12:02:00.000Z"
}
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Builds
Get Build
Get the current status of a build
GET
/
builds
/
{buildId}
Get build status
curl --request GET \
--url https://api.pipecat.daily.co/v1/builds/{buildId} \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.pipecat.daily.co/v1/builds/{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.pipecat.daily.co/v1/builds/{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.pipecat.daily.co/v1/builds/{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.pipecat.daily.co/v1/builds/{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.pipecat.daily.co/v1/builds/{buildId}")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.pipecat.daily.co/v1/builds/{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{
"build": {
"id": "123e4567-e89b-12d3-a456-426614174000",
"organizationId": "org_abc123",
"status": "success",
"region": "us-west",
"contextHash": "a1b2c3d4e5f6a7b8",
"dockerfilePath": "Dockerfile",
"imageUri": "123456789.dkr.ecr.us-west-2.amazonaws.com/pipecat-cloud/org_abc123:a1b2c3d4e5f6a7b8",
"logsUrl": "https://console.aws.amazon.com/codebuild/...",
"errorMessage": "Docker build failed: COPY failed - file not found: requirements.txt",
"contextSizeBytes": 10485760,
"imageSizeBytes": 524288000,
"buildDurationSeconds": 120,
"startedAt": "2026-02-20T12:00:00.000Z",
"completedAt": "2026-02-20T12:02:00.000Z",
"createdAt": "2026-02-20T12:00:00.000Z",
"updatedAt": "2026-02-20T12:02:00.000Z"
}
}{
"error": "<string>",
"code": "<string>"
}{
"error": "<string>",
"code": "<string>"
}Status Reconciliation
When you poll a build that’s in progress (pending or building), Pipecat Cloud automatically reconciles the status with the underlying build system. This means you always get the latest status without any delay.
Polling for Completion
After creating a build, poll this endpoint until the build completes:BUILD_ID="123e4567-e89b-12d3-a456-426614174000"
while true; do
RESPONSE=$(curl -s "https://api.pipecat.daily.co/v1/builds/$BUILD_ID" \
-H "Authorization: Bearer $PIPECAT_API_KEY")
STATUS=$(echo $RESPONSE | jq -r '.build.status')
case $STATUS in
"success")
IMAGE_URI=$(echo $RESPONSE | jq -r '.build.imageUri')
echo "Build complete! Image: $IMAGE_URI"
break
;;
"failed"|"timeout")
ERROR=$(echo $RESPONSE | jq -r '.build.errorMessage')
echo "Build failed: $ERROR"
exit 1
;;
*)
echo "Status: $STATUS - waiting..."
sleep 10
;;
esac
done
Once your build succeeds, use the Pipecat CLI to deploy your agent. The CLI will automatically use the built image.
⌘I