> ## Documentation Index
> Fetch the complete documentation index at: https://runinfra.ai/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Transcription

> Deploy open Whisper for speech-to-text on your own stack with an OpenAI-compatible transcription endpoint.

A transcription pipeline takes an audio file and returns the transcribed text through an OpenAI-compatible endpoint. RunInfra deploys an open ASR model (such as Whisper large-v3 or distil-large-v3) onto your serving runtime and exposes it at `/v1/audio/transcriptions`.

## Architecture

```text theme={"dark"}
Audio file (mp3 / mp4 / wav / m4a / webm)
  -> RunInfra /v1/audio/transcriptions (multipart upload)
  -> Whisper ASR deployment on the audio runtime
  -> Transcript (json / text / srt / vtt)
```

The endpoint is a transparent pass-through to the ASR model you deploy. The file plus any OpenAI-compatible fields (`language`, `prompt`, `response_format`) are forwarded to the deployment, and the response is returned as-is.

## What you get out of the box

* **OpenAI-compatible `/v1/audio/transcriptions`** endpoint (multipart upload)
* **`response_format`**: `json`, `text`, `srt`, `vtt` (availability depends on the deployed model)
* **Per-second billing** metered on transcribed audio duration

<Callout type="info">
  Speaker diarization and PII redaction are not built into the managed transcription endpoint. The response shape, including any segment or speaker fields, is determined by the ASR model you deploy. If you need diarization or redaction, run those steps on the deployment side or as a post-processing pass over the returned text.
</Callout>

## Example prompt

In [the dashboard](https://runinfra.ai/~):

```text theme={"dark"}
Build a transcription pipeline for our recorded support calls.
Use Whisper large-v3 and output SRT subtitles.
```

## Quick example

```python theme={"dark"}
from openai import OpenAI

client = OpenAI(base_url="https://api.runinfra.ai/v1", api_key="YOUR_RUNINFRA_API_KEY")

with open("call.mp3", "rb") as f:
    transcript = client.audio.transcriptions.create(
        model="your-pipeline-id",
        file=f,
        response_format="json",
    )

print(transcript.text)
```

## Output shape

The default `json` format returns the transcribed text:

```json theme={"dark"}
{
  "text": "Hello, I'm calling about my recent order..."
}
```

The `text`, `srt`, and `vtt` formats return the corresponding plain-text or subtitle body. Any additional fields depend on the ASR model you deploy, so check your deployment's response before relying on a specific schema.

## Deeper details

See [runinfra.ai/use-cases/transcription](https://runinfra.ai/use-cases/transcription) for the marketing page with per-minute cost math and supported audio formats.
