---
title: "Get a presigned upload URL"
method: POST
path: "/api/dubbing/upload-url"
tags: ["Video Dubbing"]
---

# Get a presigned upload URL

`POST /api/dubbing/upload-url`

Returns a presigned S3 PUT URL for direct video upload. Use this if your video isn't publicly accessible. After uploading, use the returned `source_url` when creating a dubbing job.

## Request body

- UploadUrlRequest
  - `filename` string, required — Name of the video file
  - `content_type` 'video/mp4' | 'video/quicktime' | 'video/x-matroska', required — MIME type of the file

## Response `200`

Upload URL generated

- UploadUrlResponse
  - `upload_url` string, uri, required — Presigned S3 PUT URL. Upload the video file with a PUT request to this URL.
  - `source_url` string, uri, required — The URL to use as `source_url` when creating a dubbing job.
  - `upload_id` string, required — Unique identifier for this upload
  - `max_file_size_bytes` integer, required — Maximum allowed file size in bytes (500 MB)
  - `expires_in_sec` integer, required — Seconds until the upload URL expires

## Other responses

- `401` — Invalid or expired API token
- `429` — Too many requests (max 10 per minute)

---

[API](https://skmtc.dev/startpinch/apis/pinch-api.md) · [All operations](https://skmtc.dev/startpinch/apis/pinch-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/startpinch/pinch-api/revisions/a0d3acb9ed16/schema)
