OpenAI-совместимый режим
Синхронная транскрибация файла
POST
https://gptunnel.ru/v1/audio/transcriptions Эндпоинт совместим с OpenAI POST /v1/audio/transcriptions: вы загружаете файл как multipart/form-data и получаете расшифровку в ответе на тот же запрос, без задач и поллинга. Это позволяет использовать официальный OpenAI SDK, поменяв только base_url и ключ.
Headers
| Параметр | Тип | Описание |
|---|---|---|
Authorization* | string | API ключ. Поддерживается формат "Bearer YOUR_API_KEY" (как в OpenAI SDK) |
Content-Type* | string | multipart/form-data |
Form Data
| Параметр | Тип | Описание |
|---|---|---|
file* | file | Аудиофайл до 25 МБ, длительностью от 1 секунды до 2 часов |
model* | string | whisper-1 |
language | string | Код языка (например, "ru", "en"). Если не указан — язык определяется автоматически |
response_format | string | json (по умолчанию) | text | verbose_json | srt | vtt |
prompt | string | Подсказка со стилем или словарём терминов |
temperature | number | От 0 до 1 |
Поддерживаемые форматы
flac, m4a, mp3, mp4, mpeg, mpga, oga, ogg, wav, webm.
Формат определяется по реальному содержимому файла, а не по расширению в имени — файл без расширения тоже будет принят. Неподдерживаемый контейнер (например, aiff или wma) отклоняется с ошибкой unsupported_format до обращения к провайдеру и без списания средств.
Пример запроса
curl --request POST \ --url https://gptunnel.ru/v1/audio/transcriptions \ --header 'Authorization: Bearer YOUR_API_KEY' \ --form 'file=@/path/to/audio.mp3' \ --form 'model=whisper-1' \ --form 'language=ru'from openai import OpenAI
client = OpenAI( api_key='YOUR_API_KEY', base_url='https://gptunnel.ru/v1',)
with open('audio.mp3', 'rb') as audio: transcription = client.audio.transcriptions.create( model='whisper-1', file=audio, language='ru', )
print(transcription.text)import fs from 'fs'import OpenAI from 'openai'
const client = new OpenAI({ apiKey: 'YOUR_API_KEY', baseURL: 'https://gptunnel.ru/v1',})
const transcription = await client.audio.transcriptions.create({ model: 'whisper-1', file: fs.createReadStream('audio.mp3'), language: 'ru',})
console.log(transcription.text)Пример ответа
{ "text": "Привет мир. Как дела?"}Привет мир. Как дела?{ "task": "transcribe", "language": "russian", "duration": 12.5, "text": "Привет мир. Как дела?", "segments": [ { "id": 0, "seek": 0, "start": 0.0, "end": 2.5, "text": " Привет мир.", "tokens": [50364, 15947, 1225], "temperature": 0.0, "avg_logprob": -0.28, "compression_ratio": 1.15, "no_speech_prob": 0.01 } ]}Ошибки
Ошибки возвращаются в формате OpenAI:
{ "error": { "message": "Insufficient quota. Your account balance is too low to complete this request.", "type": "insufficient_quota", "param": null, "code": "insufficient_quota" }}| HTTP | code | Причина |
|---|---|---|
| 400 | missing_required_parameter | Не передан file |
| 400 | file_too_large | Файл больше 25 МБ — используйте асинхронный режим |
| 400 | invalid_value | Невалидный model или другой параметр |
| 400 | invalid_audio | Файл не удалось декодировать (повреждён или это не аудио) |
| 400 | unsupported_format | Формат контейнера не поддерживается |
| 400 | audio_too_long | Длительность больше 2 часов |
| 400 | audio_too_short | Длительность меньше 1 секунды |
| 400 | provider_rejected | Провайдер отклонил файл |
| 401 | — | Неверный API ключ |
| 404 | model_not_found | Модель неизвестна или недоступна ключу |
| 429 | insufficient_quota | Недостаточно средств на балансе |
| 429 | api_key_limit_exceeded | Превышен лимит трат по API ключу |
| 500 | internal_error | Внутренняя ошибка |