---
title: "Get a presigned upload URL"
method: POST
path: "/api/v1/uploads"
---

# Get a presigned upload URL

`POST /api/v1/uploads`

## Request

- Base URL: `https://podcaststotext.com`
- URL: `https://podcaststotext.com/api/v1/uploads`
- Auth: HTTP bearer

For transcribing a local file. The file goes straight to storage and never through this API, so large uploads are not limited by request-body size. Two steps: presign here, PUT the bytes, then create a transcription with the returned audio_url.

## Request body

- object
  - `filename` string, required
  - `content_type` string, required
  - `size_bytes` integer, required: Checked against your plan before presigning

## Response `200`

Presigned upload

- object
  - `upload_url` string: PUT the raw bytes here
  - `audio_url` string: Pass this to POST /api/v1/transcriptions
  - `key` string
  - `expires_in_seconds` integer

## Other responses

- `400`: Unsupported type, or too large for the plan
- `401`: Missing or invalid API key

---

[API](https://skmtc.dev/podcaststotext/apis/podcaststotext-api.md) · [All operations](https://skmtc.dev/podcaststotext/apis/podcaststotext-api/llms.txt) · [OpenAPI document](https://skmtc.dev/podcaststotext/apis/podcaststotext-api/revisions/ef711acf4bc3?raw)
