---
name: "speech_transcribe"
area: "speech"
title: "Transcribe audio"
price: "$0.01 per started minute of audio"
method: "POST"
url: "https://api.conecto.chat/v1/tools/speech_transcribe"
mcp_server: "https://api.conecto.chat/mcp/speech"
auth: "Authorization: Bearer <conecto_sk_ key>"
docs_url: "https://conecto.chat/tools/speech/speech_transcribe"
---

# Transcribe audio (`speech_transcribe`)

Turns the speech in an audio or video file from the store into text, in about 100 languages, with speakers and timestamps if asked.

Turn the speech in an audio or video file from the file store (MP3, WAV, M4A, OGG, FLAC, WebM, MP4, MOV, up to 25 MB) into text, in any of about 100 languages, detected by itself. With speakers, it says who spoke when; with timestamps, it gives timed segments. Runs in the background: poll the call_id. Charged per started minute of audio, never more than max_minutes.

Price: $0.01 per started minute of audio. A call that fails costs nothing.

## Use it when

A recording should become text: a voicemail, a meeting, an interview, a video.

- For the business's own phone calls, transcribed already, use [phone_get_call](https://conecto.chat/tools/phone/phone_get_call.md).

## Say this to your agent

> Transcribe the recording of Saturday's bike fitting with Rachel Kim, and note who said what.

## Inputs

| Name | Type | Required | Description | Allowed values | Default |
|---|---|---|---|---|---|
| `file_id` | string | yes | Exactly 36 characters. |  |  |
| `language` | string | no | ISO 639 code like "en" or "deu" when you know it. Matches ^[a-z]{2,3}$. |  |  |
| `speakers` | boolean | no |  |  | `false` |
| `timestamps` | boolean | no |  |  | `false` |
| `max_minutes` | integer | no | The most minutes to pay for; audio past it is transcribed but not charged. 1 to 180. |  | `60` |

## Example

Written for Halverson Cycle & Repair, a bike shop with a repair workshop in Portland, Oregon.

MCP: call `speech_transcribe` on the MCP server `https://api.conecto.chat/mcp/speech` with these arguments:

```json
{
  "file_id": "7c9e1b3d-5f7a-4c9e-8b1d-3f5a7c9e1b4d",
  "speakers": true,
  "language": "de"
}
```

REST:

```bash
curl https://api.conecto.chat/v1/tools/speech_transcribe \
  -H "Authorization: Bearer $CONECTO_KEY" \
  -H "Content-Type: application/json" \
  -d '{"file_id": "7c9e1b3d-5f7a-4c9e-8b1d-3f5a7c9e1b4d", "speakers": true, "language": "de"}'
```

## Response

This tool runs in the background. The first reply has status `202`:

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "speech_transcribe",
  "status": "running",
  "reserved_usd": "$0.60",
  "poll": "GET /v1/calls/5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93 (or the account_get_call tool) until status is succeeded or failed. You are charged only when it succeeds."
}
```

Poll `GET https://api.conecto.chat/v1/calls/<call_id>` (or call `account_get_call`) until `status` is `succeeded` or `failed`. When it succeeds, `output` holds the result:

```json
{
  "call_id": "5f0c8a2e-3b7d-4c1e-9a64-2d8e1f7b0c93",
  "tool": "speech_transcribe",
  "area": "speech",
  "status": "succeeded",
  "cost_usd": "$0.01",
  "error": null,
  "message": null,
  "latency_ms": 4210,
  "at": "2026-10-14T08:00:00+00:00",
  "bot": "Pip",
  "person": null,
  "input": {
    "file_id": "7c9e1b3d-5f7a-4c9e-8b1d-3f5a7c9e1b4d",
    "speakers": true,
    "language": "de"
  },
  "output": {
    "text": "Hi, thanks for coming in. My knees hurt after about twenty miles, so I think the saddle is too low. Let us raise it by a centimeter and move it back a little, then ride a few minutes. Okay, that already feels better.",
    "language": "eng",
    "duration_seconds": 15.2,
    "minutes_charged": 1,
    "segments": [
      {
        "speaker": "speaker_0",
        "start": 0.4,
        "end": 3.1,
        "text": "Hi, thanks for coming in."
      },
      {
        "speaker": "speaker_1",
        "start": 3.6,
        "end": 7.9,
        "text": "My knees hurt after about twenty miles, so I think the saddle is too low."
      }
    ]
  }
}
```

`output`: When it finishes: the text, the language, duration_seconds, minutes_charged, and with speakers or timestamps the segments (speaker, start, end and text).

## Errors

| Code | Status | When | Fix |
|---|---|---|---|
| `not_found` | 404 | No file in the store has that file_id. | Find it with files_list. |
| `not_audio` | 400 | The file is not audio or video. | Upload the recording with files_upload first. |
| `unreadable` | 422 | The speech service could not read the file. | Send a common audio or video format. |
| `unavailable` | 503 | Speech is not switched on yet, or the speech service failed or did not answer. | Try again later; nothing was charged. |

The refusals every tool can give (401 key, 402 balance, 429 limits) are on the errors page: https://conecto.chat/docs/errors.md

## Related

- [speech_synthesize](https://conecto.chat/tools/speech/speech_synthesize.md): Reads text aloud in a stock voice and saves the MP3 in the file store with a download link; up to 5,000 characters a call. $0.07 per 1,000 characters, rounded up, up to $0.35.
- [speech_list_voices](https://conecto.chat/tools/speech/speech_list_voices.md): The stock voices text can be read aloud in; each speaks about 30 languages, and the text decides which. Free up to 1,000,000 reads a month.
