# Transcribe

> POST /transcribe/ turns an audio or video recording into a transcript, with no summary. $0.002 per minute of audio. Long recordings run as background tasks.

**Source:** /docs/api/transcribe/ (Curriculo Docs)  
**Updated:** 12 October 2026  
**Contact:** hello@curriculo.me

```http
POST https://api.curriculo.me/public/transcribe/
```

**Stateless.** Transcribes one audio or video recording, without generating a summary. To get a summary as well, use [`POST /summary/`](/docs/api/summary/).

**Price:** $0.002 per minute of audio. See [Pricing and billing](/docs/pricing/).

## Request

`multipart/form-data`

| Field | Type | Notes |
|---|---|---|
| `media` (required) | file | One audio or video recording, up to 12 MB. |
| `language` | string | Optional ISO 639-1 hint for the recording's language. |

```bash
curl -X POST https://api.curriculo.me/public/transcribe/ \
  -H 'Authorization: Bearer key_abc123_yoursecret' \
  -F 'media=@interview.m4a' \
  -F 'language=en'
```

## Longer recordings

The synchronous upload is limited to 12 MB. For anything larger, send a public link to `POST /transcribe/async`: recordings up to 1 GB and 2 hours.

```bash
curl -X POST https://api.curriculo.me/public/transcribe/async \
  -H 'Authorization: Bearer key_abc123_yoursecret' \
  -H 'Content-Type: application/json' \
  -d '{"media_url": "https://example.com/interviews/interview.mp4"}'
```

The task's `result` contains `transcript_text` and `transcript_entries`. Entries are empty when no timestamps are available. See [Background processing and callbacks](/docs/background-processing/).

## Errors

| Status | Typical cause |
|---|---|
| `413` | A recording over 12 MB. Use `/transcribe/async`. |
| `422` | `media` is missing. |
| `503` | Media transcription is not enabled. |
| `504` | Processing exceeded 300 seconds. Use `/transcribe/async`. |
