# Dubbing Quickstart

Dub audio or video into another language in 5 minutes. No SDK needed — just REST API calls.

## Prerequisites

- A Pinch API key from the [Developer Portal](https://portal.startpinch.com/dashboard/developers)
- An audio file (WAV, MP3, FLAC, OGG, M4A, AAC, WMA) or video file (MP4, MOV, MKV, WebM, AVI) — or a public URL

## Quick example

### Code

```
# 1. Create a dubbing job from a URL
curl -X POST https://api.startpinch.com/api/dubbing/jobs \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source_url": "https://example.com/video.mp4",
    "source_lang": "auto",
    "target_lang": "es"
  }'

# Response: { "job_id": "abc-123", "status": "pending", ... }

# 2. Poll for completion
curl https://api.startpinch.com/api/dubbing/jobs/abc-123 \
  -H "Authorization: Bearer YOUR_API_KEY"

# 3. Download the result when status is "completed"
curl https://api.startpinch.com/api/dubbing/jobs/abc-123/result \
  -H "Authorization: Bearer YOUR_API_KEY"

# Response: { "download_url": "https://...", "expires_at": "..." }
```

## Upload a local file

If your file isn’t publicly accessible, upload it first:

### Code

```
# 1. Get a presigned upload URL
curl -X POST https://api.startpinch.com/api/dubbing/upload-url \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"filename": "my-video.mp4", "content_type": "video/mp4"}'

# Response: { "upload_url": "https://...", "source_url": "https://..." }

# 2. Upload the file directly to S3
curl -X PUT "UPLOAD_URL_FROM_STEP_1" \
  -H "Content-Type: video/mp4" \
  --data-binary @my-video.mp4

# 3. Create the dubbing job using the source_url from step 1
curl -X POST https://api.startpinch.com/api/dubbing/jobs \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "source_url": "SOURCE_URL_FROM_STEP_1",
    "target_lang": "es"
  }'
```

## Job lifecycle

Jobs go through these statuses:

### Code

```
pending → downloading → processing → uploading → completed
                                                → failed
```

Poll `GET /api/dubbing/jobs/{id}` to track progress. Typical processing time is 2-5 minutes for 1 minute of input.

## Pricing & limits

|  |  |
| --- | --- |
| **Price** | $0.50 per minute of input media |
| **Max duration** | 10 minutes |
| **Min duration** | 1 second |
| **Max file size** | 500 MB |
| **Input formats** | Video: MP4, MOV, MKV, WebM, AVI; Audio: WAV, MP3, FLAC, OGG, M4A, AAC, WMA |
| **Output format** | Video input: MP4 (H.264 + AAC); Audio input: MP3 or WAV |
| **Rate limit** | 10 jobs per minute |
| **Output expiry** | Download URLs expire after 48 hours |

## Supported languages

| Code | Language |
| --- | --- |
| `en` | English |
| `es` | Spanish |
| `fr` | French |
| `de` | German |
| `it` | Italian |
| `pt` | Portuguese |
| `ru` | Russian |
| `ja` | Japanese |
| `ko` | Korean |
| `zh` | Chinese |

## Next steps

- [Dubbing API Reference](/content/docs/dubbing-api/index.html) — full endpoint documentation
- [Dubbing Dashboard](https://portal.startpinch.com/dashboard/dubbing) — dub audio and video from the browser

## Guides

- [How to Dub Videos with Python](/content/guides/how-to-dub-videos-with-python/index.html) — complete Python tutorial with batch processing
- [AI Video Dubbing API](/content/guides/ai-video-dubbing-api/index.html) — deep dive into how dubbing APIs work
- [Dubbing API Pricing Comparison](/content/guides/dubbing-api-pricing-comparison/index.html) — Pinch vs ElevenLabs vs Rask.ai pricing breakdown
