API Response Reference

This page provides detailed examples of API responses to help you understand what to expect when integrating with the VideoBGRemover API.

Job Status Responses

The /v1/jobs/{id}/status endpoint returns different response formats depending on the job’s current state.

Created Status

When a job is first created but processing hasn’t started:
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "created",
  "filename": "my-video.mp4",
  "created_at": "2023-12-01T10:00:00Z",
  "length_seconds": null,
  "thumbnail_url": null,
  "processed_video_url": null,
  "message": null,
  "background": null,
  "output_format": null,
  "export_id": null
}

Processing Status

When the video is being analyzed and processed:
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "processing",
  "filename": "my-video.mp4",
  "created_at": "2023-12-01T10:00:00Z",
  "length_seconds": 30.5,
  "thumbnail_url": "https://storage.googleapis.com/videobg-processed/550e8400-e29b-41d4-a716-446655440000_thumb.jpg?X-Goog-Expires=3600",
  "processed_video_url": null,
  "message": "Processing video with red background",
  "background": {
    "type": "color",
    "color": "#FF0000"
  },
  "output_format": "mp4",
  "export_id": "exp_red_bg_123"
}

Completed Status (Default Green Screen)

When processing is complete with default settings:
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "completed",
  "filename": "my-video.mp4",
  "created_at": "2023-12-01T10:00:00Z",
  "length_seconds": 30.5,
  "thumbnail_url": "https://storage.googleapis.com/videobg-processed/550e8400-e29b-41d4-a716-446655440000_thumb.jpg?X-Goog-Expires=3600",
  "transparent_thumbnail_url": "https://storage.googleapis.com/videobg-processed/550e8400-e29b-41d4-a716-446655440000_transparent_thumb.png?X-Goog-Expires=3600",
  "processed_video_url": "https://storage.googleapis.com/videobg-processed/550e8400-e29b-41d4-a716-446655440000.mp4?X-Goog-Expires=3600",
  "processed_mask_url": "https://storage.googleapis.com/videobg-processed/550e8400-e29b-41d4-a716-446655440000_mask.mp4?X-Goog-Expires=3600",
  "message": "Processing completed successfully",
  "background": null,
  "output_format": null,
  "export_id": null
}

Completed Status (Transparent WebM)

When processing is complete with transparent background:
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "completed",
  "filename": "my-video.mp4",
  "created_at": "2023-12-01T10:00:00Z",
  "length_seconds": 30.5,
  "thumbnail_url": "https://storage.googleapis.com/videobg-processed/550e8400-e29b-41d4-a716-446655440000_thumb.jpg?X-Goog-Expires=3600",
  "transparent_thumbnail_url": "https://storage.googleapis.com/videobg-processed/550e8400-e29b-41d4-a716-446655440000_transparent_thumb.png?X-Goog-Expires=3600",
  "processed_video_url": "https://storage.googleapis.com/videobg-processed/550e8400-e29b-41d4-a716-446655440000.webm?X-Goog-Expires=3600",
  "processed_mask_url": "https://storage.googleapis.com/videobg-processed/550e8400-e29b-41d4-a716-446655440000_mask.mp4?X-Goog-Expires=3600",
  "message": "Processing completed successfully",
  "background": {
    "type": "transparent",
    "transparent_format": "webm_vp9"
  },
  "output_format": "webm",
  "export_id": "exp_webm_vp9_456"
}

Failed Status

When processing encounters an error:
{
  "id": "550e8400-e29b-41d4-a716-446655440000",
  "status": "failed",
  "filename": "my-video.mp4",
  "created_at": "2023-12-01T10:00:00Z",
  "length_seconds": null,
  "thumbnail_url": null,
  "processed_video_url": null,
  "message": "Video too large: 1250.5MB",
  "background": {
    "type": "color",
    "color": "#FF0000"
  },
  "output_format": "mp4",
  "export_id": "exp_red_bg_123"
}

Error Responses

400 Bad Request

Invalid request parameters or malformed data:
{
  "error": "Must provide either (filename + content_type) OR video_url"
}

401 Unauthorized

Invalid or missing API key:
{
  "error": "Invalid API key"
}

413 Payload Too Large

File exceeds the 1GB size limit:
{
  "error": "Video too large: 1250.5MB"
}

402 Payment Required

Insufficient credits for processing:
{
  "error": "Not enough credits available"
}

404 Not Found

Job ID doesn’t exist:
{
  "error": "Job not found"
}

Credit Balance Response

The /v1/credits endpoint returns:
{
  "user_id": "usr_abc123def456",
  "total_credits": 1000,
  "remaining_credits": 750,
  "credits_used": 250
}

Response Field Explanations

FieldTypeDescription
idstringUnique job identifier (UUID format)
statusstringCurrent processing status: created, processing, completed, failed
filenamestringOriginal uploaded filename
created_atstringISO 8601 timestamp of job creation
length_secondsnumber/nullVideo duration in seconds (null until analyzed)
thumbnail_urlstring/nullSigned URL for video thumbnail (expires in 1 hour)
transparent_thumbnail_urlstring/nullSigned URL for transparent thumbnail
processed_video_urlstring/nullSigned URL for processed video (expires in 1 hour)
processed_mask_urlstring/nullSigned URL for video mask
messagestring/nullHuman-readable status message
backgroundobject/nullBackground configuration used for processing
output_formatstring/nullOutput video format (mp4, webm, etc.)
export_idstring/nullExport identifier for custom background processing

Important Notes

Signed URLs Expire: All *_url fields contain signed URLs that expire after 1 hour. Download files immediately or call the status endpoint again to get fresh URLs.
Polling Frequency: When monitoring job status, poll every 5-10 seconds. Faster polling may result in rate limiting.
Error Handling: Always check the status field first. If it’s failed, check the message field for error details.