# Speech to Text
Source: https://docs.mserve.ai/docs/voice/speech-to-text
Summary: Transcribe and translate audio with Whisper. OpenAI transcriptions and translations, ElevenLabs speech-to-text. Billed per minute of audio.
Availability: available
Last reviewed: 2026-08-25

## OpenAI shape

`POST /openai/v1/audio/transcriptions`. `whisper-1`, `gpt-4o-transcribe`, and `gpt-4o-mini-transcribe` all resolve to `whisper-large-v3`.

**Python**

```python
from openai import OpenAI

client = OpenAI(base_url="https://api.mserve.ai/openai/v1", api_key="ms_live_your_key")

with open("meeting.mp3", "rb") as f:
    transcript = client.audio.transcriptions.create(
        model="whisper-large-v3",
        file=f,
        response_format="verbose_json",
        timestamp_granularities=["word"],
    )
print(transcript.text)
```

**JavaScript**

```ts
import OpenAI from "openai";
import fs from "node:fs";

const client = new OpenAI({ baseURL: "https://api.mserve.ai/openai/v1", apiKey: "ms_live_your_key" });

const transcript = await client.audio.transcriptions.create({
  model: "whisper-large-v3",
  file: fs.createReadStream("meeting.mp3"),
  response_format: "verbose_json",
  timestamp_granularities: ["word"],
});
console.log(transcript.text);
```

**cURL**

```bash
curl https://api.mserve.ai/openai/v1/audio/transcriptions \
  -H "Authorization: Bearer $MSERVE_API_KEY" \
  -F "file=@meeting.mp3" \
  -F "model=whisper-large-v3" \
  -F "response_format=verbose_json"
```

| Prop | Type | Required | Default | Description |
| --- | --- | --- | --- | --- |
| `file` | `file` | yes |  | Audio file. mp3, wav, m4a, flac, ogg, webm. |
| `model` | `string` | yes |  | whisper-large-v3, or the OpenAI aliases whisper-1, gpt-4o-transcribe, gpt-4o-mini-transcribe. |
| `language` | `string` | no |  | ISO-639-1 hint. Detected when absent. |
| `prompt` | `string` | no |  | Names and terms to spell correctly. |
| `response_format` | `"json" | "text" | "srt" | "vtt" | "verbose_json"` | no | `"json"` | verbose_json adds segments, words, language, and duration. |
| `temperature` | `number` | no | `0` | Sampling temperature. |
| `timestamp_granularities` | `("word" | "segment")[]` | no |  | With verbose_json. |

## Translation

`POST /openai/v1/audio/translations` transcribes any language and returns English. Same parameters, same price.

```python
with open("interview.mp3", "rb") as f:
    english = client.audio.translations.create(model="whisper-large-v3", file=f)
```

## ElevenLabs shape

`POST /elevenlabs/v1/speech-to-text`. `scribe_v1`, `scribe_v2`, and `scribe_v1_experimental` resolve to `whisper-large-v3`.

```python
from elevenlabs.client import ElevenLabs

client = ElevenLabs(base_url="https://api.mserve.ai/elevenlabs", api_key="ms_live_your_key")
with open("meeting.mp3", "rb") as f:
    result = client.speech_to_text.convert(file=f, model_id="scribe_v1", timestamps_granularity="word")
print(result.text, result.language_code)
```

```json title="Response"
{ "language_code": "en", "language_probability": 0.99, "text": "Every model. One API.", "words": [{ "text": "Every", "start": 0.0, "end": 0.31, "type": "word" }] }
```

> **Not supported**
> `diarize` and `num_speakers` return `422` with `unsupported_parameter`.

## Pricing

| Model | Model id | Price | Unit |
| --- | --- | --- | --- |
| Whisper Large v3 Turbo | `whisper-large-v3` | $0.006 per minute | Audio minutes |
