# Транскрипция

`POST /v1/audio/transcriptions`

Речь в текст. Запрос и ответ как у OpenAI: `multipart/form-data`, SDK OpenAI работают с другим base_url без правок. Принимаем только модели с kind transcribe, например `elevenlabs/scribe-v2`, `openai/gpt-4o-mini-transcribe`, `openai/whisper-large-v3-turbo`; цена минуты у каждой своя, она в `pricing.audio` из `GET /v1/models`. Файл до 25 МБ: mp3, mp4, m4a, wav, webm, ogg, flac.

Платите за секунды аудио, которые насчитала модель, а не заявленные в запросе. На запрос уходит не меньше минуты: файл в 5 секунд стоит как минута, файл в 90 секунд как полторы, дальше посекундно с округлением вверх. Пока модель работает, резервируем цену минуты или длины файла по его заголовку, если она больше. Другие поля, например `stream`, дают 400 с именем поля в param.

- `model` (string, обязательно) — Модель с kind transcribe. Модель с kind chat даёт 404 `model_not_found`
- `file` (string, обязательно) — Аудиофайл, до 25 МБ. Больше даёт 413 `request_too_large`
- `language` (string) — Язык речи кодом ISO-639-1, например `ru`. Без него язык определяет модель
- `prompt` (string) — Принимаем для совместимости с OpenAI, модели не передаём
- `response_format` (string) — `json` (по умолчанию), `text`, `srt`, `vtt` или `verbose_json`. Для srt, vtt и verbose_json нужны метки времени: у `openai/gpt-4o-mini-transcribe` их нет, ответ 400. Субтитры из слов собираем сами, если модель отдаёт целый текст одним сегментом (так делает Scribe)
- `temperature` (number) — От 0 до 1
- `timestamp_granularities` (array) — Только с `verbose_json`: `segment` (по умолчанию) и `word`. SDK пишут поле как `timestamp_granularities[]`

**Пример запроса**

curl:

```bash
curl https://api.polyapi.ru/v1/audio/transcriptions \
  -H "Authorization: Bearer $POLYAPI_KEY" \
  -F model="openai/whisper-large-v3-turbo" \
  -F file="@audio.mp3"
```

Python:

```python
import os
from openai import OpenAI

client = OpenAI(
    api_key=os.environ["POLYAPI_KEY"],
    base_url="https://api.polyapi.ru/v1",
)

with open("audio.mp3", "rb") as f:
    r = client.audio.transcriptions.create(
        model="openai/whisper-large-v3-turbo",
        file=f,
    )
print(r.text)
```

Node.js:

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

const client = new OpenAI({
  apiKey: process.env.POLYAPI_KEY,
  baseURL: "https://api.polyapi.ru/v1",
});

const r = await client.audio.transcriptions.create({
  model: "openai/whisper-large-v3-turbo",
  file: fs.createReadStream("audio.mp3"),
});
console.log(r.text);
```

**Ответ**

```json
{
  "text": "Привет, это проверка расшифровки.",
  "usage": {
    "type": "duration",
    "seconds": 60
  }
}
```

**Ответ.** В json: `text` и `usage` с `seconds`, то есть секунды, за которые списали. В text, srt и vtt тело ответа и есть текст. В verbose_json ещё `language`, `duration` и `segments`, а с `word` в granularities ещё и `words`.

Расшифровка идёт быстрее записи: на минуту звука уходит несколько секунд, файл в полчаса ждите две–три минуты, в том числе загрузку. Замеры на живых моделях: 40 минут в mp3 (9 МБ) принимают `elevenlabs/scribe-v2` и `openai/whisper-large-v3-turbo`, до 25 МБ (26 минут в стерео mp3 128 кбит/с) прошёл Whisper; `openai/gpt-4o-mini-transcribe` принимает запись до 23 минут, дальше 400. Запись, которую модель не успела расшифровать, мы отдаём ответом 504 `upstream_timeout`, деньги за неё не списываются: разрежьте её на части и отправьте отдельными запросами.

Источник: https://polyapi.ru/docs/transcriptions
