Prerequisites
Set your API key as an environment variable:Copy
Ask AI
export API_KEY="vbr_your_api_key_here"
Method 1: File Upload Workflow
Complete Example Script
Copy
Ask AI
#!/bin/bash
# Set your API key
API_KEY="vbr_your_api_key_here"
VIDEO_FILE="my-video.mp4"
echo "🚀 Starting video background removal process..."
# Step 1: Create job and get upload URL
echo "📝 Creating job..."
JOB_RESPONSE=$(curl -s -X POST https://api.videobgremover.com/v1/jobs \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"filename\": \"$VIDEO_FILE\",
\"content_type\": \"video/mp4\"
}")
echo "Job Response: $JOB_RESPONSE"
# Extract job ID and upload URL
JOB_ID=$(echo $JOB_RESPONSE | jq -r '.id')
UPLOAD_URL=$(echo $JOB_RESPONSE | jq -r '.upload_url')
echo "📋 Job ID: $JOB_ID"
echo "📤 Upload URL: $UPLOAD_URL"
# Step 2: Upload video file
echo "📤 Uploading video..."
curl -X PUT "$UPLOAD_URL" \
-H "Content-Type: video/mp4" \
--data-binary @"$VIDEO_FILE"
echo "✅ Video uploaded successfully"
# Step 3: Start processing
echo "⚡ Starting background removal..."
START_RESPONSE=$(curl -s -X POST https://api.videobgremover.com/v1/jobs/$JOB_ID/start \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{}')
echo "Start Response: $START_RESPONSE"
# Step 4: Monitor status
echo "👀 Monitoring job status..."
while true; do
STATUS_RESPONSE=$(curl -s -X GET https://api.videobgremover.com/v1/jobs/$JOB_ID/status \
-H "X-Api-Key: $API_KEY")
STATUS=$(echo $STATUS_RESPONSE | jq -r '.status')
echo "Current status: $STATUS"
if [ "$STATUS" = "completed" ]; then
echo "🎉 Processing completed!"
# Get download URLs
PROCESSED_URL=$(echo $STATUS_RESPONSE | jq -r '.processed_video_url')
MASK_URL=$(echo $STATUS_RESPONSE | jq -r '.processed_mask_url')
echo "📥 Downloading processed video..."
curl -o "processed_$VIDEO_FILE" "$PROCESSED_URL"
echo "📥 Downloading mask video..."
curl -o "mask_$VIDEO_FILE" "$MASK_URL"
echo "✅ All done! Files saved as processed_$VIDEO_FILE and mask_$VIDEO_FILE"
break
elif [ "$STATUS" = "failed" ]; then
echo "❌ Processing failed"
break
else
echo "⏳ Still processing... waiting 10 seconds"
sleep 10
fi
done
Step-by-Step Commands
1
Create Job
Copy
Ask AI
curl -X POST https://api.videobgremover.com/v1/jobs \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"filename": "my-video.mp4",
"content_type": "video/mp4"
}'
Copy
Ask AI
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "created",
"filename": "my-video.mp4",
"upload_url": "https://storage.googleapis.com/...",
"expires_at": "2024-12-28T15:30:00Z"
}
2
Upload Video
Copy
Ask AI
curl -X PUT "UPLOAD_URL_FROM_STEP_1" \
-H "Content-Type: video/mp4" \
--data-binary @my-video.mp4
UPLOAD_URL_FROM_STEP_1
with the actual URL from the previous response.3
Start Processing
Copy
Ask AI
curl -X POST https://api.videobgremover.com/v1/jobs/YOUR_JOB_ID/start \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
Copy
Ask AI
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"credits_used": 30,
"video_length_seconds": 30
}
4
Check Status
Copy
Ask AI
curl -X GET https://api.videobgremover.com/v1/jobs/YOUR_JOB_ID/status \
-H "X-Api-Key: $API_KEY"
Copy
Ask AI
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"message": "Video is being processed"
}
Copy
Ask AI
{
"id": "550e8400-e29b-41d4-a716-446655440000",
"status": "completed",
"processed_video_url": "https://storage.googleapis.com/...",
"processed_mask_url": "https://storage.googleapis.com/...",
"message": "Video processing completed successfully"
}
Method 2: URL Download Workflow
Complete Example Script
Copy
Ask AI
#!/bin/bash
# Set your API key and video URL
API_KEY="vbr_your_api_key_here"
VIDEO_URL="https://example.com/video.mp4"
echo "🚀 Starting URL-based video processing..."
# Step 1: Create job from URL (video downloads automatically)
echo "📝 Creating job from URL..."
JOB_RESPONSE=$(curl -s -X POST https://api.videobgremover.com/v1/jobs \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d "{
\"video_url\": \"$VIDEO_URL\"
}")
echo "Job Response: $JOB_RESPONSE"
# Extract job ID
JOB_ID=$(echo $JOB_RESPONSE | jq -r '.id')
echo "📋 Job ID: $JOB_ID"
# Step 2: Start processing immediately
echo "⚡ Starting background removal..."
START_RESPONSE=$(curl -s -X POST https://api.videobgremover.com/v1/jobs/$JOB_ID/start \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{}')
echo "Start Response: $START_RESPONSE"
# Step 3: Monitor and download (same as file upload method)
echo "👀 Monitoring job status..."
while true; do
STATUS_RESPONSE=$(curl -s -X GET https://api.videobgremover.com/v1/jobs/$JOB_ID/status \
-H "X-Api-Key: $API_KEY")
STATUS=$(echo $STATUS_RESPONSE | jq -r '.status')
echo "Current status: $STATUS"
if [ "$STATUS" = "completed" ]; then
echo "🎉 Processing completed!"
PROCESSED_URL=$(echo $STATUS_RESPONSE | jq -r '.processed_video_url')
curl -o "processed_video.mp4" "$PROCESSED_URL"
echo "✅ Downloaded processed video as processed_video.mp4"
break
elif [ "$STATUS" = "failed" ]; then
echo "❌ Processing failed"
break
else
echo "⏳ Still processing... waiting 10 seconds"
sleep 10
fi
done
Background Options
Color Background
Copy
Ask AI
curl -X POST https://api.videobgremover.com/v1/jobs/YOUR_JOB_ID/start \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"background": {
"type": "color",
"color": "#FF0000"
}
}'
Transparent WebM
Copy
Ask AI
curl -X POST https://api.videobgremover.com/v1/jobs/YOUR_JOB_ID/start \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"background": {
"type": "transparent",
"transparent_format": "webm_vp9"
}
}'
Professional ProRes
Copy
Ask AI
curl -X POST https://api.videobgremover.com/v1/jobs/YOUR_JOB_ID/start \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"background": {
"type": "transparent",
"transparent_format": "mov_prores"
}
}'
Pro Bundle (Complete Workflow)
Copy
Ask AI
curl -X POST https://api.videobgremover.com/v1/jobs/YOUR_JOB_ID/start \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"background": {
"type": "transparent",
"transparent_format": "pro_bundle"
}
}'
Stacked Video (Analysis Format)
Copy
Ask AI
curl -X POST https://api.videobgremover.com/v1/jobs/YOUR_JOB_ID/start \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"background": {
"type": "transparent",
"transparent_format": "stacked_video"
}
}'
Utility Commands
Check Credit Balance
Copy
Ask AI
curl -X GET https://api.videobgremover.com/v1/credits \
-H "X-Api-Key: $API_KEY"
Copy
Ask AI
{
"user_id": "user-uuid",
"total_credits": 100,
"remaining_credits": 70,
"used_credits": 30
}
Quick Status Check
Copy
Ask AI
# One-liner to check job status
curl -s -X GET https://api.videobgremover.com/v1/jobs/YOUR_JOB_ID/status \
-H "X-Api-Key: $API_KEY" | jq -r '.status'
Error Handling Examples
Handle Insufficient Credits
Copy
Ask AI
START_RESPONSE=$(curl -s -w "%{http_code}" -X POST https://api.videobgremover.com/v1/jobs/$JOB_ID/start \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{}')
HTTP_CODE="${START_RESPONSE: -3}"
RESPONSE_BODY="${START_RESPONSE%???}"
if [ "$HTTP_CODE" = "402" ]; then
echo "❌ Insufficient credits. Please purchase more credits."
echo "Error: $(echo $RESPONSE_BODY | jq -r '.error')"
elif [ "$HTTP_CODE" = "200" ]; then
echo "✅ Processing started successfully"
else
echo "❌ Error: HTTP $HTTP_CODE"
echo "Response: $RESPONSE_BODY"
fi
Retry Logic with Exponential Backoff
Copy
Ask AI
check_status_with_retry() {
local job_id=$1
local max_retries=5
local retry_count=0
local wait_time=1
while [ $retry_count -lt $max_retries ]; do
STATUS_RESPONSE=$(curl -s -X GET https://api.videobgremover.com/v1/jobs/$job_id/status \
-H "X-Api-Key: $API_KEY")
if [ $? -eq 0 ]; then
echo $STATUS_RESPONSE
return 0
else
retry_count=$((retry_count + 1))
echo "Retry $retry_count/$max_retries failed, waiting ${wait_time}s..."
sleep $wait_time
wait_time=$((wait_time * 2))
fi
done
echo "Failed after $max_retries retries"
return 1
}
Batch Processing
Process Multiple Videos
Copy
Ask AI
#!/bin/bash
API_KEY="vbr_your_api_key_here"
VIDEOS=("video1.mp4" "video2.mp4" "video3.mp4")
JOB_IDS=()
# Start all jobs
for video in "${VIDEOS[@]}"; do
echo "Starting job for $video..."
# Create job
JOB_RESPONSE=$(curl -s -X POST https://api.videobgremover.com/v1/jobs \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d "{\"filename\": \"$video\", \"content_type\": \"video/mp4\"}")
JOB_ID=$(echo $JOB_RESPONSE | jq -r '.id')
UPLOAD_URL=$(echo $JOB_RESPONSE | jq -r '.upload_url')
# Upload video
curl -X PUT "$UPLOAD_URL" -H "Content-Type: video/mp4" --data-binary @"$video"
# Start processing
curl -s -X POST https://api.videobgremover.com/v1/jobs/$JOB_ID/start \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{}'
JOB_IDS+=($JOB_ID)
echo "Job $JOB_ID started for $video"
done
# Monitor all jobs
echo "Monitoring ${#JOB_IDS[@]} jobs..."
for job_id in "${JOB_IDS[@]}"; do
echo "Checking job $job_id..."
# Add your status checking logic here
done
Tips and Best Practices
1. Use jq for JSON Processing
Copy
Ask AI
# Install jq if you don't have it
# macOS: brew install jq
# Ubuntu: sudo apt-get install jq
# Extract specific fields
JOB_ID=$(echo $RESPONSE | jq -r '.id')
STATUS=$(echo $RESPONSE | jq -r '.status')
2. Set Timeouts
Copy
Ask AI
# Add timeout to prevent hanging
curl --max-time 300 -X POST https://api.videobgremover.com/v1/jobs \
-H "X-Api-Key: $API_KEY" \
-H "Content-Type: application/json" \
-d '{"filename": "video.mp4", "content_type": "video/mp4"}'
3. Save Responses for Debugging
Copy
Ask AI
# Save response to file for debugging
curl -X GET https://api.videobgremover.com/v1/jobs/$JOB_ID/status \
-H "X-Api-Key: $API_KEY" \
-o "status_response.json"
4. Progress Indication
Copy
Ask AI
# Show progress with dots
echo -n "Processing"
while [ "$STATUS" != "completed" ]; do
echo -n "."
sleep 5
STATUS=$(curl -s -X GET https://api.videobgremover.com/v1/jobs/$JOB_ID/status \
-H "X-Api-Key: $API_KEY" | jq -r '.status')
done
echo " Done!"