---
title: FFmpeg Micro API Documentation
description: Complete FFmpeg Micro API docs. Upload, transcode & download videos via REST API.
canonical: https://www.ffmpeg-micro.com/docs
---

# FFmpeg Micro API Documentation

Transform videos with our simple, secure API. Upload, transcode, and download processed videos.

## API Access

**Base URL:** `https://api.ffmpeg-micro.com`

**Authentication:** Include your API key in the Authorization header:
```
Authorization: Bearer YOUR_API_KEY
```

Get your API key from the [API Keys page](https://www.ffmpeg-micro.com/dashboard/api-keys) in your dashboard.

## Workflow Overview

Five quick steps from upload to download:

1. **Get Presigned Upload URL** — Request a presigned URL with filename, content type, and file size in bytes.
2. **Upload Your Video** — Use the presigned URL to upload your video file directly to storage (no API key needed).
3. **Confirm Upload** — Confirm with the same filename and byte size; the API verifies the object in storage.
4. **Create Transcode Job** — Submit a transcode job with your desired output format and quality.
5. **Monitor & Download** — Poll for job status, and when complete, download your processed video.

## API Endpoints

### Step 1: Get Presigned Upload URL

```http
POST https://api.ffmpeg-micro.com/v1/upload/presigned-url
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
```

**Request Body:**
```json
{
  "filename": "video.mp4",
  "contentType": "video/mp4",
  "fileSize": 12345678
}
```

**Response:**
```json
{
  "success": true,
  "result": {
    "uploadUrl": "https://storage.googleapis.com/...",
    "filename": "1234567890-video.mp4"
  }
}
```

**cURL Example:**
```bash
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
  }'
```

### Step 2: Upload Media

```http
PUT <uploadUrl from step 1>
Content-Type: video/mp4
```

Use the presigned URL to upload your file directly. **No API key required** for this step.

**cURL Example:**
```bash
curl -X PUT "$UPLOAD_URL" \
  -H "Content-Type: video/mp4" \
  --data-binary @/path/to/video.mp4
```

### Step 3: Confirm Upload

```http
POST https://api.ffmpeg-micro.com/v1/upload/confirm
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
```

**Request Body:**
```json
{
  "filename": "1234567890-video.mp4",
  "fileSize": 12345678
}
```

**cURL Example:**
```bash
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
  }'
```

### Step 4: Create Transcode Job

```http
POST https://api.ffmpeg-micro.com/v1/transcodes
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
```

**Request Body (Simple Mode):**
```json
{
  "inputs": [
    { "url": "gs://<YOUR_BUCKET>/1234567890-video.mp4" }
  ],
  "outputFormat": "mp4",
  "preset": {
    "quality": "medium",
    "resolution": "1080p"
  }
}
```

**Request Body (Advanced Mode):**
```json
{
  "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" }
    }}
  ]
}
```

**Response:**
```json
{
  "id": "job-uuid",
  "status": "pending",
  "inputs": [{ "url": "gs://<YOUR_BUCKET>/1234567890-video.mp4" }],
  "output_format": "mp4",
  "created_at": "2025-01-01T00:00:00Z"
}
```

### Step 5: Check Job Status

```http
GET https://api.ffmpeg-micro.com/v1/transcodes/:id
Authorization: Bearer YOUR_API_KEY
```

**Response:**
```json
{
  "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"
}
```

### Step 6: Download Processed Video

```http
GET https://api.ffmpeg-micro.com/v1/transcodes/:id/download
Authorization: Bearer YOUR_API_KEY
```

**Response:**
```json
{
  "url": "https://storage.googleapis.com/...?X-Goog-Signature=..."
}
```

## Transcription (Audio to SRT)

### Create Transcription Job

```http
POST https://api.ffmpeg-micro.com/v1/transcribe
Content-Type: application/json
Authorization: Bearer YOUR_API_KEY
```

Generate subtitles from an audio or video file using Whisper.

**Request Body:**
```json
{
  "media_url": "gs://<YOUR_BUCKET>/audio.mp3",
  "language": "en",
  "task": "transcribe"
}
```

**Response:**
```json
{
  "id": "job-uuid",
  "status": "pending",
  "media_url": "gs://<YOUR_BUCKET>/audio.mp3",
  "output_format": "srt",
  "created_at": "2026-04-19T17:22:44.396Z"
}
```

### Check Transcription Status

```http
GET https://api.ffmpeg-micro.com/v1/transcribe/:id
Authorization: Bearer YOUR_API_KEY
```

### Download SRT File

```http
GET https://api.ffmpeg-micro.com/v1/transcribe/:id/download
Authorization: Bearer YOUR_API_KEY
```

Returns a signed HTTPS URL for the generated SRT file (10-minute TTL).

## List & Filter Jobs

### List All Transcodes

```http
GET https://api.ffmpeg-micro.com/v1/transcodes?status=completed&page=1&limit=20
Authorization: Bearer YOUR_API_KEY
```

**Query Parameters:**
- `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

## Additional Resources

- **Interactive Playground:** [https://www.ffmpeg-micro.com/playground](https://www.ffmpeg-micro.com/playground)
- **Full Documentation (HTML):** [https://www.ffmpeg-micro.com/docs](https://www.ffmpeg-micro.com/docs)
- **Full Documentation (Markdown, LLM-friendly):** [https://www.ffmpeg-micro.com/docs.md](https://www.ffmpeg-micro.com/docs.md)
- **Blog (HTML):** [https://www.ffmpeg-micro.com/blog](https://www.ffmpeg-micro.com/blog)
- **Blog post Markdown alternates (LLM-friendly):** every post is also available at `https://www.ffmpeg-micro.com/blog/<slug>.md`. Example: [https://www.ffmpeg-micro.com/blog/ffmpeg-add-subtitles-to-video.md](https://www.ffmpeg-micro.com/blog/ffmpeg-add-subtitles-to-video.md)
- **Integration Guides:** [n8n](https://www.ffmpeg-micro.com/with/n8n), [Make.com](https://www.ffmpeg-micro.com/with/make)
- **GitHub MCP Server:** https://github.com/javidjamae/ffmpeg-micro-mcp
- **NPM Package:** @ffmpeg-micro/mcp-server

## Pricing

Source of truth: [https://www.ffmpeg-micro.com/pricing](https://www.ffmpeg-micro.com/pricing). Tiers as of latest update:

- **Free** — $0/month — 100 video processing minutes, 250 MB max input file size
- **Starter** — $19/month — 2,000 video processing minutes, 1,024 MB max input file size
- **Pro** — $89/month — 12,000 video processing minutes, 2,048 MB max input file size, unlimited API keys
- **Scale** — $349/month — 60,000 video processing minutes, 5,120 MB max input file size, unlimited storage and API keys

No subscriptions are required to try FFmpeg Micro — the Free tier is available without a credit card.

---

*This markdown version is optimized for AI chatbot indexing. For the full interactive documentation, visit [https://www.ffmpeg-micro.com/docs](https://www.ffmpeg-micro.com/docs).*
