Hubris Audio API

The Audio API from Hubris — 2 operation(s) for audio.

GitHub OpenAPI

Operations 2

POST /v1/audio/transcriptions Распознать речь в аудио #
POST /v1/audio/speech Озвучить текст #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/hubris-pw:hubris-pw-audio-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Calls without X-API-Key need no key. Calls with it need a paid plan — get a key.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

hubris-pw-audio-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Hubris Audio API
  version: 1.0.0
  description: 'OpenAI-совместимый API российского LLM-агрегатора. Все цены в рублях.


    Версии и вывод из эксплуатации (deprecation policy): несовместимые изменения — только в новой версии префикса (`/v2`); об отключении эндпоинта или поля предупреждаем не меньше чем за 90 дней заголовками `Deprecation` (RFC 9745) и `Sunset` (RFC 8594), записью в журнале изменений и письмом. Подробно: https://hubris.pw/docs/api/versioning'
servers:
- url: https://api.hubris.pw
  description: Production
tags:
- name: Audio
paths:
  /v1/audio/transcriptions:
    post:
      operationId: createTranscription
      tags:
      - Audio
      summary: Распознать речь в аудио
      description: 'OpenAI-совместимое распознавание речи: аудиозапись на входе, текст на выходе. Работает официальный SDK OpenAI (`audio.transcriptions.create`).


        Два формата тела с одинаковым результатом: `multipart/form-data` с файлом, как у OpenAI, или `application/json` с аудио в base64 (`input_audio`). Ссылки на аудио не принимаются.


        Стрима нет: `stream: true` — 400. `response_format` — только `json` или `verbose_json`.


        Оплата по факту запроса: `usage.cost` — списано в копейках. Часть моделей тарифицируется по длительности записи, часть по токенам. Список моделей: `GET /v1/models?output_modalities=transcription`.'
      security:
      - bearerAuth: []
      - oauth2:
        - chat:write
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/TranscriptionMultipartRequest'
          application/json:
            schema:
              $ref: '#/components/schemas/TranscriptionJsonRequest'
      responses:
        '200':
          description: Распознанный текст.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranscriptionResponse'
        '400':
          description: 'Невалидное тело: нет `model`, `file` или `input_audio`, `stream: true`, неподдерживаемый `response_format`; ключ BYOK.'
        '401':
          description: Ключ не передан, невалиден, отозван или заморожен (`invalid_api_key`, `key_frozen_spike`).
        '402':
          description: Недостаточно средств на балансе (`insufficient_balance`).
        '403':
          description: 'Нет права `chat:write`: ключ только для чтения (`key_read_only`) или OAuth-токен без него (`insufficient_scope`). Ещё причины: management-ключ (`inference_key_required`), запрос не с адреса, к которому привязан ключ (`key_ip_not_allowed`), или заблокированный аккаунт (`account_blocked`).'
        '404':
          description: Модель не найдена или это не модель распознавания (`model_not_found`).
        '413':
          description: Тело запроса больше лимита (`request_too_large`).
        '429':
          description: Исчерпан лимит расхода ключа (`daily_limit_exceeded`, `key_limit_exceeded`), лимит пространства (`workspace_limit_exceeded`) или провайдер временно ограничил запросы. Пауза — в `Retry-After`.
        '502':
          description: Ошибка провайдера или не удалось определить стоимость (`pricing_unavailable`). Списания нет.
        '503':
          description: Курс ЦБ РФ временно недоступен (`exchange_rate_unavailable`).
        '504':
          description: Таймаут распознавания (`upstream_timeout`).
  /v1/audio/speech:
    post:
      operationId: createSpeech
      tags:
      - Audio
      summary: Озвучить текст
      description: 'OpenAI-совместимая озвучка (TTS): текст на входе, байты аудио на выходе, а не JSON. Работает официальный SDK OpenAI (`audio.speech.create`).


        Формат — `response_format`: `mp3` (`audio/mpeg`) или `pcm` (`audio/pcm` с частотой и числом каналов в `Content-Type`, 16-bit LE без заголовка WAV). Без поля формат выбирает модель. Стрима нет.


        `voice` обязателен, если у модели в каталоге есть список голосов; голос не из списка отклоняется до обращения к модели.


        Цена — по единице модели в каталоге: символы или байты текста, секунды звука, токены. Списание по факту запроса; `usage` в ответе нет, расход — в журнале запросов. Перед запросом баланс сверяется с оценкой цены. Список моделей: `GET /v1/models?output_modalities=speech`.'
      security:
      - bearerAuth: []
      - oauth2:
        - chat:write
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/SpeechRequest'
      responses:
        '200':
          description: Аудио целиком.
          headers:
            Content-Length:
              description: Размер аудио в байтах.
              schema:
                type: integer
          content:
            audio/mpeg:
              schema:
                type: string
                format: binary
            audio/pcm:
              schema:
                type: string
                format: binary
        '400':
          description: Невалидное тело (`invalid_request`), не выбран голос (`voice_required`), голоса нет у модели (`voice_not_supported`); ключ BYOK. В тексте ошибки — доступные голоса.
        '401':
          description: Ключ не передан, невалиден, отозван или заморожен (`invalid_api_key`, `key_frozen_spike`).
        '402':
          description: Баланса не хватает на оценку цены запроса (`insufficient_balance`).
        '403':
          description: 'Нет права `chat:write`: ключ только для чтения (`key_read_only`) или OAuth-токен без него (`insufficient_scope`). Ещё причины: management-ключ (`inference_key_required`), запрос не с адреса, к которому привязан ключ (`key_ip_not_allowed`), или заблокированный аккаунт (`account_blocked`).'
        '404':
          description: Модель не найдена или это не модель озвучки (`model_not_found`).
        '413':
          description: Тело запроса больше 1 МБ (`request_too_large`).
        '429':
          description: Исчерпан лимит расхода ключа (`daily_limit_exceeded`, `key_limit_exceeded`), лимит пространства (`workspace_limit_exceeded`) или провайдер временно ограничил запросы. Пауза — в `Retry-After`.
        '502':
          description: Нечем посчитать цену (`pricing_unavailable`), модель вернула пустой ответ (`no_audio_returned`), не удалось перекодировать в mp3 (`transcode_failed`) или ошибка провайдера. Списания нет.
        '503':
          description: Курс ЦБ РФ временно недоступен (`exchange_rate_unavailable`).
        '504':
          description: Таймаут озвучки (`upstream_timeout`).
components:
  schemas:
    TranscriptionMultipartRequest:
      type: object
      properties:
        file:
          type: string
          format: binary
          description: 'Аудиофайл: WAV, MP3, FLAC, M4A, OGG, WebM, AAC. До 25 МБ.'
        model:
          type: string
          minLength: 1
          example: openai/whisper-1
        language:
          type: string
          description: Язык записи в ISO-639-1 (`ru`, `en`). Без поля язык определяется сам.
        prompt:
          type: string
          description: 'Подсказка: имена, термины, аббревиатуры, которые встречаются в записи.'
        temperature:
          type: number
        response_format:
          type: string
          enum:
          - json
          - verbose_json
          description: '`text`, `srt` и `vtt` не поддерживаются (400). Поддержка `verbose_json` зависит от модели.'
        timestamp_granularities[]:
          type: array
          items:
            type: string
            enum:
            - segment
            - word
          description: Таймкоды в `verbose_json`; поддерживаются не всеми моделями.
      required:
      - file
      - model
    TranscriptionResponse:
      type: object
      properties:
        text:
          type: string
          description: 'Распознанный текст. Пустая строка — тоже результат: в записи тишина.'
        usage:
          type: object
          properties:
            seconds:
              type: number
              description: Длительность обработанного аудио в секундах, если модель её сообщает.
            input_tokens:
              type: integer
            output_tokens:
              type: integer
            total_tokens:
              type: integer
            cost:
              type: integer
              description: Списано с баланса, в копейках.
      required:
      - text
    TranscriptionJsonRequest:
      type: object
      properties:
        model:
          type: string
          minLength: 1
          example: openai/whisper-1
        input_audio:
          type: object
          properties:
            data:
              type: string
              minLength: 1
              description: Аудио в base64 (без data:-префикса).
            format:
              type: string
              minLength: 1
              description: 'Формат: wav, mp3, flac, m4a, ogg, webm, aac.'
              example: mp3
          required:
          - data
          - format
          description: Аудио для распознавания. Прямые URL не поддерживаются.
      required:
      - model
      - input_audio
    SpeechRequest:
      type: object
      properties:
        model:
          type: string
          minLength: 1
          example: microsoft/mai-voice-2-flash
        input:
          type: string
          minLength: 1
          maxLength: 50000
          description: 'Текст для озвучки. Цена — по единице модели в каталоге: за символы текста или за токены (у Gemini 25 токенов на секунду звука).'
          example: Привет! Это проверка озвучки.
        voice:
          type: string
          minLength: 1
          description: Голос модели. Список — в карточке модели каталога (поле «Голоса»); обязателен, если список есть.
          example: en-US-Harper:MAI-Voice-2
        response_format:
          type: string
          enum:
          - mp3
          - pcm
          description: 'Формат аудио: mp3 или pcm (16-bit LE). Без поля формат выбирает модель, как правило pcm.'
      required:
      - model
      - input
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: sk-gw-...
      description: API-ключ в формате `sk-gw-` + 32 hex. Создаётся в дашборде на /keys. Обычный ключ даёт все права, ключ только для чтения не может тратить баланс.
    oauth2:
      type: oauth2
      description: 'OAuth-токен приложения с ограниченными правами. Регистрация клиента — `POST /oauth/clients` (RFC 7591), PKCE S256 обязателен. Метаданные: `/.well-known/oauth-authorization-server`, `/.well-known/oauth-protected-resource`.'
      flows:
        authorizationCode:
          authorizationUrl: https://api.hubris.pw/oauth/authorize
          tokenUrl: https://api.hubris.pw/oauth/token
          refreshUrl: https://api.hubris.pw/oauth/token
          scopes:
            chat:write: 'Запросы к моделям от имени пользователя (списывают баланс): чат, Responses, Messages, эмбеддинги, реранкеры, модели решений, изображения, распознавание и озвучка речи, расшифровка видео; коннекторы Битрикс24.'
            models:read: Видеть цепочки резервных моделей пользователя в `GET /v1/models`.
            balance:read: Видеть остаток баланса пользователя.
            videos:write: Создавать видео от имени пользователя (`POST /v1/videos`, резервирует и списывает баланс).
            videos:read: Узнавать статус и скачивать видео пользователя (`GET /v1/videos/{id}`, `GET /v1/videos/{id}/content`).
            offline_access: Выдать refresh-токен, чтобы подключение жило 90 дней без повторного входа.