File uploads
Presigned uploads for files you hold yourself, checked against your plan before they transfer.
/api/v1/uploadsscope: transcriptions:writeFor audio you already hold. Ask for a presigned URL, PUT the bytes straight to storage, then transcribe the resulting link: the file never passes through the API.
Request body
| Field | Type | Required | Description |
|---|---|---|---|
filename | string | Yes | The original name. Used for the stored key and the default title. |
content_type | string | Yes | The file’s MIME type, e.g. audio/mpeg. |
size_bytes | number | Yes | Size in bytes. |
All three are required so the file is checked against your plan before you spend bandwidth uploading it.
The three steps
The Content-Type must match. The presigned URL is signed against the content_type you declared. PUT with a different one and storage rejects it with a signature error that does not obviously say so. The URL expires after an hour, ask for a new one rather than storing it.
Accepted types and sizes
| Free | Creator | Pro | Studio | Podmaxxing | |
|---|---|---|---|---|---|
| Maximum file size | 10 MB | 1 GB | 1 GB | 1 GB | 1 GB |
| Maximum episode length | 30 min | Uncapped | Uncapped | Uncapped | Uncapped |
Accepted containers: mp3, m4a, wav, aac, ogg, opus, flac, webm, mp4, mov. Rejections happen at step 1, before the transfer, with the limit or the accepted list in how_to_fix.