FFmpeg Micro API Documentation
Transform videos with our simple, secure API. Upload, transcode, and download processed videos.
All API requests should be sent to:https://api.ffmpeg-micro.com
Include your API key in the Authorization header:Authorization: Bearer YOUR_API_KEY
💡 Get your API key from the API Keys page in your dashboard.
Request a presigned URL with filename, content type, and file size in bytes. Send fileSize as a JSON number (not a quoted string or human-readable size).
Use the presigned URL to upload your video file directly to storage (no API key needed for upload).
Confirm with the same filename and byte size as JSON numbers; the API checks the object in storage matches what you declared.
Submit a transcode job with your desired output format and quality. Get job ID immediately.
Poll for job status, and when complete, download your processed video.
API Endpoints
Core routes for uploads, transcodes, and downloads.
/v1/upload/presigned-url{
"filename": "video.mp4",
"contentType": "video/mp4",
"fileSize": 12345678
}fileSize must be a JSON number (size in bytes), not a string. Quoted values like "1024" or human-readable sizes are rejected with 400.
{
"success": true,
"result": {
"uploadUrl": "https://storage.googleapis.com/...",
"filename": "1234567890-video.mp4"
}
}curl -X POST https://api.ffmpeg-micro.com/v1/upload/presigned-url \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"filename": "video.mp4",
"contentType": "video/mp4",
"fileSize": 12345678
}'uploadUrl (from step 1)# Replace UPLOAD_URL with the exact uploadUrl value from step 1 curl -X PUT "$UPLOAD_URL" \ -H "Content-Type: video/mp4" \ --data-binary @/path/to/video.mp4
/v1/upload/confirm{
"filename": "1234567890-video.mp4",
"fileSize": 12345678
}fileSize must be a JSON number (bytes), same as step 1—not a string. It must match the uploaded object in storage; wrong types return 400 with an explicit validation error.
curl -X POST https://api.ffmpeg-micro.com/v1/upload/confirm \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"filename": "1234567890-video.mp4",
"fileSize": 12345678
}'/v1/transcodes<YOUR_BUCKET> below with the bucket name from Step 3's fileUrl response.{
"inputs": [
{ "url": "gs://<YOUR_BUCKET>/1234567890-video.mp4" }
],
"outputFormat": "mp4",
"preset": {
"quality": "medium",
"resolution": "1080p"
}
}{
"inputs": [
{ "url": "gs://<YOUR_BUCKET>/1234567890-video.mp4" }
],
"outputFormat": "mp4",
"options": [
{ "option": "-c:v", "argument": "libx264" },
{ "option": "-crf", "argument": "23" },
{ "option": "@text-overlay", "argument": {
"text": "Hello World",
"style": { "fontSize": 60, "x": "0.15*w", "y": "(h-text_h)/2" }
}}
]
}{
"id": "job-uuid",
"status": "pending",
"inputs": [
{ "url": "gs://<YOUR_BUCKET>/1234567890-video.mp4" }
],
"output_format": "mp4",
"created_at": "2025-01-01T00:00:00Z"
}curl -X POST https://api.ffmpeg-micro.com/v1/transcodes \
-H "Content-Type: application/json" \
-H "Authorization: Bearer YOUR_API_KEY" \
-d '{
"inputs": [
{ "url": "gs://<YOUR_BUCKET>/1234567890-video.mp4" }
],
"outputFormat": "mp4",
"preset": {
"quality": "medium",
"resolution": "1080p"
}
}'/v1/transcodes/:id{
"success": true,
"jobId": "job-uuid",
"status": "completed",
"outputUrl": "gs://output-bucket/processed-video.mp4",
"createdAt": "2025-01-01T00:00:00Z",
"completedAt": "2025-01-01T00:02:30Z"
}curl -X GET https://api.ffmpeg-micro.com/v1/transcodes/job-uuid \ -H "Authorization: Bearer YOUR_API_KEY"
/v1/transcodes/:id/download{
"url": "https://storage.googleapis.com/...?X-Goog-Signature=..."
}# Get signed URL curl -X GET https://api.ffmpeg-micro.com/v1/transcodes/job-uuid/download \ -H "Authorization: Bearer YOUR_API_KEY" # Then download the file curl -O "$DOWNLOAD_URL"
/v1/transcodes- •
status— Filter by status (queued, processing, completed, failed) - •
page— Page number (default: 1) - •
limit— Items per page (default: 20, max: 100) - •
since— Jobs created after this timestamp - •
until— Jobs created before this timestamp
curl -X GET "https://api.ffmpeg-micro.com/v1/transcodes?status=completed&page=1&limit=20" \ -H "Authorization: Bearer YOUR_API_KEY"
/v1/transcodes/:idcurl -X GET "https://api.ffmpeg-micro.com/v1/transcodes/job-uuid" \ -H "Authorization: Bearer YOUR_API_KEY"
/health-check{
"ok": true,
"timestamp": "2025-10-23T14:30:45.123Z",
"uptime": 3600.5,
"supabase": {
"ok": true,
"status": 200,
"statusText": "OK",
"connected": true
}
}curl -X GET https://api.ffmpeg-micro.com/health-check
Supported Formats
- • MP4 (H.264, H.265)
- • WebM (VP8, VP9)
- • AVI (various codecs)
- • MOV (QuickTime)
- • MKV (Matroska)
- • FLV (Flash Video)
- • MP4 (H.264 + AAC)
- • WebM (VP9 + Opus)
- • Quality: low, medium, high
- • Resolutions: 480p, 720p, 1080p, 4K
- • @text-overlay — add styled text overlays
- • @quote-card — generate social-ready quote cards