curl --request GET \
--url https://console.spatius.ai/v1/open/video-jobs/{jobId} \
--header 'X-API-Key: <api-key>' \
--header 'X-App-ID: <api-key>'import requests
url = "https://console.spatius.ai/v1/open/video-jobs/{jobId}"
headers = {
"X-App-ID": "<api-key>",
"X-API-Key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-App-ID': '<api-key>', 'X-API-Key': '<api-key>'}};
fetch('https://console.spatius.ai/v1/open/video-jobs/{jobId}', 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://console.spatius.ai/v1/open/video-jobs/{jobId}",
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-API-Key: <api-key>",
"X-App-ID: <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://console.spatius.ai/v1/open/video-jobs/{jobId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-App-ID", "<api-key>")
req.Header.Add("X-API-Key", "<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://console.spatius.ai/v1/open/video-jobs/{jobId}")
.header("X-App-ID", "<api-key>")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://console.spatius.ai/v1/open/video-jobs/{jobId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-App-ID"] = '<api-key>'
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"job": {
"id": "6f1e2b3c-9a1d-4e5f-8b0a-2c4d6e8f0a1b",
"status": "succeeded",
"avatarId": "d385dd22-9200-4806-94a0-dce464ca916d",
"name": "Welcome video",
"progress": {
"stage": "completed"
},
"createdAt": "2026-09-12T09:00:00Z",
"updatedAt": "2026-09-12T09:01:00Z",
"completedAt": "2026-09-12T09:01:00Z",
"expiresAt": "2026-09-19T09:00:05Z"
},
"videoUrl": "https://example.com/output/video.mp4?signature=example",
"videoUrlExpiresAt": "2026-09-12T09:16:00Z"
}{
"error": {
"code": "invalid_request",
"message": "Invalid video request or presentation settings.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "unauthorized",
"message": "Unauthorized.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "forbidden",
"message": "Video API access is not configured.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "not_found",
"message": "Video job not found.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Open API rate limit exceeded.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "internal_error",
"message": "An internal error occurred.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "service_unavailable",
"message": "Video generation is unavailable; retry later.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}Get a Video Job
Returns a job owned by the authenticated account. Other Apps owned by that account can read it; cross-account reads return 404.
Successful, unexpired jobs include a fresh download URL. If refreshing the link fails, the request returns 503 while the saved job remains succeeded. Output expiry returns expired without a link. Download the MP4 before job.expiresAt; refreshing a link does not extend retention.
curl --request GET \
--url https://console.spatius.ai/v1/open/video-jobs/{jobId} \
--header 'X-API-Key: <api-key>' \
--header 'X-App-ID: <api-key>'import requests
url = "https://console.spatius.ai/v1/open/video-jobs/{jobId}"
headers = {
"X-App-ID": "<api-key>",
"X-API-Key": "<api-key>"
}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {'X-App-ID': '<api-key>', 'X-API-Key': '<api-key>'}};
fetch('https://console.spatius.ai/v1/open/video-jobs/{jobId}', 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://console.spatius.ai/v1/open/video-jobs/{jobId}",
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-API-Key: <api-key>",
"X-App-ID: <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://console.spatius.ai/v1/open/video-jobs/{jobId}"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("X-App-ID", "<api-key>")
req.Header.Add("X-API-Key", "<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://console.spatius.ai/v1/open/video-jobs/{jobId}")
.header("X-App-ID", "<api-key>")
.header("X-API-Key", "<api-key>")
.asString();require 'uri'
require 'net/http'
url = URI("https://console.spatius.ai/v1/open/video-jobs/{jobId}")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["X-App-ID"] = '<api-key>'
request["X-API-Key"] = '<api-key>'
response = http.request(request)
puts response.read_body{
"job": {
"id": "6f1e2b3c-9a1d-4e5f-8b0a-2c4d6e8f0a1b",
"status": "succeeded",
"avatarId": "d385dd22-9200-4806-94a0-dce464ca916d",
"name": "Welcome video",
"progress": {
"stage": "completed"
},
"createdAt": "2026-09-12T09:00:00Z",
"updatedAt": "2026-09-12T09:01:00Z",
"completedAt": "2026-09-12T09:01:00Z",
"expiresAt": "2026-09-19T09:00:05Z"
},
"videoUrl": "https://example.com/output/video.mp4?signature=example",
"videoUrlExpiresAt": "2026-09-12T09:16:00Z"
}{
"error": {
"code": "invalid_request",
"message": "Invalid video request or presentation settings.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "unauthorized",
"message": "Unauthorized.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "forbidden",
"message": "Video API access is not configured.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "not_found",
"message": "Video job not found.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "rate_limit_exceeded",
"message": "Open API rate limit exceeded.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "internal_error",
"message": "An internal error occurred.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}{
"error": {
"code": "service_unavailable",
"message": "Video generation is unavailable; retry later.",
"requestId": "b3f0c2d1-4a5b-4c6d-8e9f-0a1b2c3d4e5f"
}
}Authorizations
Your Spatius App ID.
The API key bound to the App ID.
Path Parameters
Job ID returned by Create a Video.
Response
Job detail, with a fresh MP4 URL when available.
Account-owned job summary. Source URLs, storage keys, service credentials, and internal task identifiers are not returned.
Show child attributes
Show child attributes
Fresh signed MP4 download URL, returned only for succeeded, unexpired output. Download without App authentication headers. The current link lifetime is 15 minutes, capped by job.expiresAt.
Effective download-link expiry. Omitted when videoUrl is absent.

