Home / APIs / video API

Video Processing API for Developers

Run allowlisted video operations without raw FFmpeg filters. Upload a file to /v1/video/* endpoints, receive a job, poll /v1/jobs/:jobId, then download. Related audio extract and GIF-from-video endpoints share the same wallet.

Features

What this API actually supports in production today.

  • Convert, compress, resize, crop, trim, merge
  • Thumbnails, watermarks, mute ranges, overlays
  • Audio extract / normalize and GIF from video
  • Async job model with progress and downloads
  • No arbitrary FFmpeg filter strings on media routes

Common use cases

  • User-generated video ingest pipelines
  • Social-ready compress/resize presets
  • Thumbnail generation for media libraries
  • Extract audio tracks for transcription workflows

API endpoints

Base URL https://thefatbaby.com/api. Authenticate with Authorization: Bearer fb_live_YOUR_KEY.

MethodPathSummaryCredits
POST/v1/video/convertConvert video format/codecDuration-based billing
POST/v1/video/compressCompress bitrate/sizeDuration-based billing
POST/v1/video/trimTrim by start/durationDuration-based billing
POST/v1/video/thumbnailExtract a thumbnailLower fixed-style cost
POST/v1/audio/extractExtract audioDuration-based
POST/v1/gif/from-videoVideo to GIFDuration-based

Examples

Primary endpoint /v1/video/convert · Media ops bill primarily by output duration (and resolution multipliers). Catalog fixed numbers are examples only.

cURL

curl -X POST https://thefatbaby.com/api/v1/video/convert \
  -H "Authorization: Bearer fb_live_YOUR_KEY" \
  -F "file=@clip.mov" -F "format=mp4" -F "video_codec=libx264"
# poll GET /v1/jobs/JOB_ID

JavaScript

const form = new FormData();
form.append('file', videoFile);
form.append('format', 'mp4');
const res = await fetch('https://thefatbaby.com/api/v1/video/convert', {
  method: 'POST',
  headers: { Authorization: 'Bearer fb_live_YOUR_KEY' },
  body: form
});
const { job } = await res.json();

Python

import requests
r = requests.post(
  'https://thefatbaby.com/api/v1/video/convert',
  headers={'Authorization': 'Bearer fb_live_YOUR_KEY'},
  files={'file': open('clip.mov','rb')},
  data={'format': 'mp4', 'video_codec': 'libx264'},
)
print(r.json()['job']['id'])

Request

multipart/form-data
file=@clip.mov
format=mp4
video_codec=libx264

Response

{
  "job": { "id": "JOB_ID", "status": "queued" },
  "request_id": "req_..."
}

Pricing & credits

Expect duration-based credits for convert/compress/trim. Run a short sample clip to estimate cost.

Common errors

  • 400Unsupported option or missing file
  • 402insufficient_credits
  • job failedEncoding error — inspect job.error_message

FAQ

Can I send a raw ffmpeg command?

Not on /v1/video/* media routes. Those are allowlisted operations. Legacy /v1/render accepts a validated ffmpeg command inside job folders — see the FFmpeg API page.

How do I download results?

Poll GET /v1/jobs/:jobId until completed, then use the download URL or GET /v1/jobs/:jobId/download?filename=…

Try without code

Use the matching online tool, then automate the same workflow with this API.