curl -X GET "https://app.axeimmo.com/api/public/v1/export/status/export_abcd1234" \
-H "Authorization: Bearer your_api_key"
import requests
job_id = "export_abcd1234"
url = f"https://app.axeimmo.com/api/public/v1/export/status/{job_id}"
headers = {
"Authorization": "Bearer your_api_key"
}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
# Download the video when ready
if data.get('status') == 'completed':
video_url = data['result']['video_url']
video_response = requests.get(video_url)
with open('video.mp4', 'wb') as f:
f.write(video_response.content)
const jobId = "export_abcd1234";
const response = await fetch(`https://app.axeimmo.com/api/public/v1/export/status/${job_id}`, {
method: 'GET',
headers: {
'Authorization': 'Bearer your_api_key'
}
});
const data = await response.json();
console.log(data);
// Download the video when ready
if (data.status === 'completed') {
const videoUrl = data.result.video_url;
const videoResponse = await fetch(videoUrl);
const blob = await videoResponse.blob();
// Create download link
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'video.mp4';
a.click();
}
{
"job_id": "export_abcd1234",
"status": "pending",
"progress": 0,
"current_step": "render"
}
{
"job_id": "export_abcd1234",
"status": "processing",
"progress": 65,
"current_step": "render-audio"
}
{
"job_id": "export_abcd1234",
"status": "completed",
"progress": 100,
"current_step": "render",
"result": {
"video_url": "https://storage.axeimmo.com/exports/export_abcd1234.mp4",
"thumbnail_url": "https://storage.axeimmo.com/thumbnails/vid_xyz789.jpg",
"cost": 0,
"created_at": "2024-01-15T10:35:00Z"
}
}
{
"job_id": "export_abcd1234",
"status": "failed",
"progress": 30,
"current_step": "avatar",
"error": {
"code": "ENCODING_FAILED",
"message": "Failed to encode video in the requested format"
}
}
{
"error": "Export job not found",
"code": "JOB_NOT_FOUND"
}
{
"error": "Export job does not belong to your space",
"code": "UNAUTHORIZED_JOB"
}
Export
Check Export Status
Check the status of a video export job and get download URL
GET
/
api
/
public
/
v1
/
export
/
status
/
{job_id}
curl -X GET "https://app.axeimmo.com/api/public/v1/export/status/export_abcd1234" \
-H "Authorization: Bearer your_api_key"
import requests
job_id = "export_abcd1234"
url = f"https://app.axeimmo.com/api/public/v1/export/status/{job_id}"
headers = {
"Authorization": "Bearer your_api_key"
}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
# Download the video when ready
if data.get('status') == 'completed':
video_url = data['result']['video_url']
video_response = requests.get(video_url)
with open('video.mp4', 'wb') as f:
f.write(video_response.content)
const jobId = "export_abcd1234";
const response = await fetch(`https://app.axeimmo.com/api/public/v1/export/status/${job_id}`, {
method: 'GET',
headers: {
'Authorization': 'Bearer your_api_key'
}
});
const data = await response.json();
console.log(data);
// Download the video when ready
if (data.status === 'completed') {
const videoUrl = data.result.video_url;
const videoResponse = await fetch(videoUrl);
const blob = await videoResponse.blob();
// Create download link
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'video.mp4';
a.click();
}
{
"job_id": "export_abcd1234",
"status": "pending",
"progress": 0,
"current_step": "render"
}
{
"job_id": "export_abcd1234",
"status": "processing",
"progress": 65,
"current_step": "render-audio"
}
{
"job_id": "export_abcd1234",
"status": "completed",
"progress": 100,
"current_step": "render",
"result": {
"video_url": "https://storage.axeimmo.com/exports/export_abcd1234.mp4",
"thumbnail_url": "https://storage.axeimmo.com/thumbnails/vid_xyz789.jpg",
"cost": 0,
"created_at": "2024-01-15T10:35:00Z"
}
}
{
"job_id": "export_abcd1234",
"status": "failed",
"progress": 30,
"current_step": "avatar",
"error": {
"code": "ENCODING_FAILED",
"message": "Failed to encode video in the requested format"
}
}
{
"error": "Export job not found",
"code": "JOB_NOT_FOUND"
}
{
"error": "Export job does not belong to your space",
"code": "UNAUTHORIZED_JOB"
}
Overview
This endpoint allows you to check the current status of a video export job. Use this to monitor export progress and retrieve the download URL when the export is complete.Authentication
This endpoint requires API key authentication. Include your API key in the
Authorization header.Path Parameters
string
required
The export job ID returned from the
/export/start endpoint.Response
string
The unique identifier for the export job.
string
Current export status:
pending: Export is queued and waiting to startprocessing: Export is in progresscompleted: Export finished successfullyfailed: Export failed
number
Progress percentage (0-100).
string
Description of the current processing step.
object
object
Example
curl -X GET "https://app.axeimmo.com/api/public/v1/export/status/export_abcd1234" \
-H "Authorization: Bearer your_api_key"
import requests
job_id = "export_abcd1234"
url = f"https://app.axeimmo.com/api/public/v1/export/status/{job_id}"
headers = {
"Authorization": "Bearer your_api_key"
}
response = requests.get(url, headers=headers)
data = response.json()
print(data)
# Download the video when ready
if data.get('status') == 'completed':
video_url = data['result']['video_url']
video_response = requests.get(video_url)
with open('video.mp4', 'wb') as f:
f.write(video_response.content)
const jobId = "export_abcd1234";
const response = await fetch(`https://app.axeimmo.com/api/public/v1/export/status/${job_id}`, {
method: 'GET',
headers: {
'Authorization': 'Bearer your_api_key'
}
});
const data = await response.json();
console.log(data);
// Download the video when ready
if (data.status === 'completed') {
const videoUrl = data.result.video_url;
const videoResponse = await fetch(videoUrl);
const blob = await videoResponse.blob();
// Create download link
const url = window.URL.createObjectURL(blob);
const a = document.createElement('a');
a.href = url;
a.download = 'video.mp4';
a.click();
}
{
"job_id": "export_abcd1234",
"status": "pending",
"progress": 0,
"current_step": "render"
}
{
"job_id": "export_abcd1234",
"status": "processing",
"progress": 65,
"current_step": "render-audio"
}
{
"job_id": "export_abcd1234",
"status": "completed",
"progress": 100,
"current_step": "render",
"result": {
"video_url": "https://storage.axeimmo.com/exports/export_abcd1234.mp4",
"thumbnail_url": "https://storage.axeimmo.com/thumbnails/vid_xyz789.jpg",
"cost": 0,
"created_at": "2024-01-15T10:35:00Z"
}
}
{
"job_id": "export_abcd1234",
"status": "failed",
"progress": 30,
"current_step": "avatar",
"error": {
"code": "ENCODING_FAILED",
"message": "Failed to encode video in the requested format"
}
}
{
"error": "Export job not found",
"code": "JOB_NOT_FOUND"
}
{
"error": "Export job does not belong to your space",
"code": "UNAUTHORIZED_JOB"
}
Polling Best Practices
Recommended polling strategy for exports:
- Start with 3-second intervals (exports are typically faster than generation)
- Increase to 5-second intervals after 30 seconds
- Increase to 10-second intervals after 2 minutes
- Use webhooks for more efficient status updates
Export Steps
During processing, you’ll see variouscurrent_step values:
- “render-audio”: Processing audio in for the avatar export step
- “avatar”: Processing avatar generation
- “render”: Rendering the final video file
Download URL Details
Important notes about download URLs:
- URLs are valid for 7 from completion
- Download the file to your own storage for permanent access
Error Codes
Common error codes you might encounter:JOB_NOT_FOUND: Export job ID doesn’t existUNAUTHORIZED_JOB: Export job doesn’t belong to your spaceEXPORT_FAILED: General export failureENCODING_FAILED: Video encoding failedFORMAT_CONVERSION_FAILED: Failed to convert video formatSTORAGE_FAILED: Failed to upload to storage

