Get Agent Run
curl --request GET \
--url https://api.example.com/agent_run/{run_id}import requests
url = "https://api.example.com/agent_run/{run_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/agent_run/{run_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.example.com/agent_run/{run_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.example.com/agent_run/{run_id}"
req, _ := http.NewRequest("GET", url, nil)
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.example.com/agent_run/{run_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/agent_run/{run_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyAgent Runs
Get Agent Run
Get status and outputs for a run.
GET
/
agent_run
/
{run_id}
Get Agent Run
curl --request GET \
--url https://api.example.com/agent_run/{run_id}import requests
url = "https://api.example.com/agent_run/{run_id}"
response = requests.get(url)
print(response.text)const options = {method: 'GET'};
fetch('https://api.example.com/agent_run/{run_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.example.com/agent_run/{run_id}",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
]);
$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.example.com/agent_run/{run_id}"
req, _ := http.NewRequest("GET", url, nil)
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.example.com/agent_run/{run_id}")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.example.com/agent_run/{run_id}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
response = http.request(request)
puts response.read_bodyPoll this endpoint to check the status of your agent run and retrieve outputs.
For node-level statuses, error details, and credit-blocked details, use Get Agent Run Nodes.
Request
curl -X GET "https://api.mosaic.so/agent_run/[run_id]" \
-H "Authorization: Bearer mk_your_api_key"
Response
{
"agent_id": "123e4567-e89b-12d3-a456-789012345678",
"started_at": "2025-01-10T14:30:00Z",
"status": "completed",
"status_message": null,
"needs_credits": false,
"errors": [],
"node_status_counts": {
"completed": 10,
"in_progress": 0,
"failed": 0
},
"inputs": [
{
"video_url": "https://storage.googleapis.com/mosaic-inputs/...",
"thumbnail_url": "https://storage.googleapis.com/mosaic-inputs/..."
}
],
"outputs": [
{
"id": "7ba7b810-9dad-11d1-80b4-00c04fd430c8",
"video_url": "https://storage.googleapis.com/mosaic-outputs/...",
"thumbnail_url": "https://storage.googleapis.com/mosaic-thumbnails/...",
"premiere_prproj_url": "https://storage.googleapis.com/mosaic-outputs/.../timeline.zip?...",
"sources": [
{
"provider": "getty",
"source_kind": "licensed_library",
"media_type": "image",
"provider_asset_id": "1234567890",
"render_asset_id": "getty_image_000",
"query": "mayor press conference",
"title": "Mayor speaks at press conference",
"credit": "Photographer / Collection",
"source_url": "https://www.gettyimages.com/detail/...",
"display_url": "https://media.gettyimages.com/...",
"rights_status": "licensed",
"start_ms": 1200,
"end_ms": 3400,
"start_seconds": 1.2,
"end_seconds": 3.4,
"placement": "partial_screen",
"layout": "bottom",
"getty_asset_family": "editorial",
"source_metadata": {},
"rights_metadata": {}
}
],
"completed_at": "2025-01-10T14:35:30Z",
"original_node_id": "2ba7b810-9dad-11d1-80b4-00c04fd430c8"
}
]
}
Output Fields
| Field | Type | Description |
|---|---|---|
id | string | Unique identifier for this output render |
video_url | string | Signed URL to download the rendered video (valid for 7 days) |
thumbnail_url | string | null | Signed URL to download the video thumbnail |
premiere_prproj_url | string | null | Signed URL to download the Premiere Pro timeline zip attached to this render (when available) |
sources | array | Source citations for licensed or external media used in this output. Getty b-roll citations include timing, query, asset IDs when resolved, placement, and rights metadata. |
completed_at | string | ISO 8601 timestamp when this output finished rendering |
original_node_id | string | null | Template agent_node_id this output originated from. Use this to map outputs to specific nodes in your agent. |
Tracking outputs: Use
original_node_id to identify which node in your agent template produced each output. This allows you to consistently map outputs to your application logic across multiple runs.Source Fields
| Field | Type | Description |
|---|---|---|
provider | string | Source provider, for example getty. |
media_type | string | image, video, or another media type. |
provider_asset_id | string | null | Provider asset ID, such as the Getty image/video ID, when resolved. |
render_asset_id | string | null | Internal render/timeline asset ID. |
query | string | null | Search query used to choose the source. |
start_ms / end_ms | number | null | Usage window in the rendered output. |
placement / layout | string | null | How the media was placed, such as full_screen, partial_screen, top, or bottom. |
source_metadata / rights_metadata | object | Provider-specific metadata and rights details when available. |
Run Fields
| Field | Type | Description |
|---|---|---|
agent_id | string | Agent UUID that started this run. |
status | string | Overall run status (see Status Values below). |
status_message | string | null | Human-readable detail about the run status. |
needs_credits | boolean | true when one or more runtime tasks in this run are marked needs_credits=true (insufficient credits). |
errors | array | Error messages grouped by template node. Each entry has original_node_id and messages[]. Empty array [] when the run has no errors. |
node_status_counts | object | Counts of nodes in completed, in_progress, and failed states. |
If
needs_credits is true, first check GET /plan. If no paid plan is active, choose one via GET /plan/list and POST /plan/upgrade (complete checkout when requires_checkout: true). You can then enable auto top-ups with POST /credits/settings if your active plan is creator, creator_annual, professional, or professional_annual, and finally call Resume Agent Run to re-queue failed/blocked runtime nodes in the same run.Status Values
| Status | Description |
|---|---|
running | Agent is processing your videos |
completed | Processing finished successfully |
partial_complete | Some outputs finished successfully, but others failed |
failed | The entire run failed, no outputs generated |
cancelled | The run was cancelled by the user |
Was this page helpful?
⌘I