---
title: "Transcribe Audio"
method: POST
path: "/transcribe"
tags: ["Audio"]
---

# Transcribe Audio

`POST /transcribe`

## Request

- Base URL: `https://runchat.com/api/v1`
- URL: `https://runchat.com/api/v1/transcribe`
- Auth: HTTP bearer

Transcribes an audio file with Whisper (served via OpenRouter's Groq provider). The audio is forwarded upstream and the transcription response is returned verbatim. Usage is billed to your Runchat credits based on the audio duration ($0.04 per hour of audio for whisper-large-v3-turbo, before credit markup).

## Request body `multipart/form-data`

- object
  - `file` string, binary, required: The audio file to transcribe (flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, webm). Maximum size 25MB.
  - `model` string: The Whisper model to use. Defaults to `openai/whisper-large-v3-turbo` (bare Groq-style names like `whisper-large-v3-turbo` are accepted as aliases).
  - `language` string: Optional ISO-639-1 language code of the audio (e.g. `en`). Improves accuracy and latency when known.
  - `response_format` 'json' | 'verbose_json': The response format. Defaults to `verbose_json`, which includes the audio duration and timestamped segments. (`text`/`srt`/`vtt` are not supported.)
  - `timestamp_granularities[]` string[]: Timestamp detail for `verbose_json` responses. Repeat the field to request both. Defaults to segment and word.

## Response `200`

Successful transcription. The upstream response body is returned verbatim - an object for `json`/`verbose_json` formats, plain text for `text`.

- TranscriptionResponse: Groq transcription response, returned verbatim. Shape follows the requested `response_format` — `verbose_json` (shown here) includes duration and timestamped segments.
  - `text` string: The transcribed text.
  - `language` string: Detected or supplied language of the audio.
  - `duration` number: Duration of the audio in seconds. Used for credit billing.
  - `segments` object[]: Timestamped segments (present when `segment` granularity is requested).
  - `words` object[]: Word-level timestamps (present when `word` granularity is requested).

## Other responses

- `400`: Bad Request - The request could not be understood or was missing required parameters.
- `403`: Insufficient credits. The response includes `isPaywall: true`.
- `413`: Audio file exceeds the 40MB upload limit.
- `500`: Internal Server Error - An unexpected error occurred on the server.

## Changes

- **2026-11-03** `4fa3fd81ab51`: 1 info
  - endpoint added

[Operation history](https://skmtc.dev/runchat/apis/runchat-api/changes/transcribe/post.md)

---

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