> ## Documentation Index
> Fetch the complete documentation index at: https://docs.electronhub.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# Speech-to-Text

> Transcribe audio to text (OpenAI-compatible)

`POST /audio/transcriptions`

Upload an audio file and get a text transcript. OpenAI-compatible multipart API.

## Limits

| Cap       | Value                                                             |
| --------- | ----------------------------------------------------------------- |
| File size | **25 MB**                                                         |
| Duration  | **25 minutes**                                                    |
| Formats   | `flac`, `mp3`, `mp4`, `mpeg`, `mpga`, `m4a`, `ogg`, `wav`, `webm` |

Billing is **per minute** of audio (minimum 1 second). Rates are listed on each model in `/v1/models`.

## Request (multipart)

<ParamField body="file" type="file" required>
  Audio file to transcribe
</ParamField>

<ParamField body="model" type="string" required>
  STT model ID (e.g. `deepgram-nova-3`, `whisper-large-v3-turbo`)
</ParamField>

<ParamField body="language" type="string">
  ISO-639-1 code, or `auto` / `multi` where supported
</ParamField>

<ParamField body="response_format" type="string">
  `json` (default), `text`, `srt`, `verbose_json`, or `vtt`
</ParamField>

<ParamField body="prompt" type="string">
  Optional hint text (Whisper-family models)
</ParamField>

<ParamField body="temperature" type="number">
  `0`–`1` (ignored by some engines)
</ParamField>

<ParamField body="model_config" type="string">
  JSON string of engine options (Deepgram: `smart_format`, `punctuate`, `diarize`, …)
</ParamField>

You can also pass Deepgram flags as flat form fields: `smart_format`, `punctuate`, `diarize`, `utterance`, `numerals`.

## Response

Default (`json`):

```json theme={null}
{ "text": "Hello, how are you?" }
```

`text` / `srt` / `vtt` return a plain-text body. `verbose_json` may include extra fields such as `duration`.

## Models

Usable models (see `/v1/models` for live pricing):

| Model                            | Notes                                               |
| -------------------------------- | --------------------------------------------------- |
| `deepgram-nova-3`                | Multilingual; upload + streaming engines            |
| `deepgram-nova-2`                | Prefer `language=en` (not `auto`)                   |
| `deepgram-flux`                  | Streaming engine; file upload converted server-side |
| `whisper-large-v3-turbo`         | Whisper turbo                                       |
| `distil-whisper-large-v2`        | Distil-Whisper                                      |
| `grok-stt`                       | xAI                                                 |
| `assemblyai-universal-streaming` | Use `language=en` (or `es`/`de`/…)                  |
| `speechmatics-standard`          | Speechmatics                                        |
| `soniox-stt-rt-v4`               | Prefer omitting `language` or use a concrete code   |

## Examples

<CodeGroup>
  ```bash cURL theme={null}
  curl https://api.electronhub.ai/v1/audio/transcriptions \
    -H "Authorization: Bearer YOUR_API_KEY" \
    -F model=deepgram-nova-3 \
    -F language=auto \
    -F file=@audio.mp3
  ```

  ```python Python (OpenAI SDK) theme={null}
  from openai import OpenAI

  client = OpenAI(
      api_key="YOUR_API_KEY",
      base_url="https://api.electronhub.ai/v1",
  )

  with open("audio.mp3", "rb") as f:
      result = client.audio.transcriptions.create(
          model="deepgram-nova-3",
          file=f,
          language="auto",
      )

  print(result.text)
  ```

  ```javascript Node.js (OpenAI SDK) theme={null}
  import OpenAI from "openai";
  import fs from "fs";

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

  const result = await openai.audio.transcriptions.create({
    model: "deepgram-nova-3",
    file: fs.createReadStream("audio.mp3"),
    language: "auto",
  });

  console.log(result.text);
  ```
</CodeGroup>


## OpenAPI

````yaml POST /audio/transcriptions
openapi: 3.0.1
info:
  title: Electron Hub API
  description: >-
    Unified API platform integrating 200+ AI models for chat, image generation,
    speech-to-text, embeddings, and more.
  version: 1.0.0
  contact:
    name: Electron Hub Support
    email: support@electronhub.ai
    url: https://discord.com/invite/electronhub
  license:
    name: MIT
servers:
  - url: https://api.electronhub.ai/v1
    description: Production API v1
security:
  - bearerAuth: []
paths:
  /audio/transcriptions:
    post:
      summary: Create Transcription
      description: >-
        Transcribe audio to text (OpenAI-compatible multipart upload). Max 25 MB
        / 25 minutes.
      operationId: createTranscription
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/AudioTranscriptionRequest'
      responses:
        '200':
          description: Transcription result
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/AudioTranscriptionResponse'
            text/plain:
              schema:
                type: string
                description: Plain text when response_format is text, srt, or vtt
components:
  schemas:
    AudioTranscriptionRequest:
      type: object
      required:
        - file
        - model
      properties:
        file:
          type: string
          format: binary
          description: >-
            Audio file (flac, mp3, mp4, mpeg, mpga, m4a, ogg, wav, webm). Max 25
            MB / 25 minutes.
        model:
          type: string
          description: STT model ID
          example: deepgram-nova-3
        language:
          type: string
          description: ISO-639-1 code, or auto/multi where supported
          example: auto
        prompt:
          type: string
          description: Optional hint text (Whisper-family)
        response_format:
          type: string
          enum:
            - json
            - text
            - srt
            - verbose_json
            - vtt
          default: json
        temperature:
          type: number
          minimum: 0
          maximum: 1
        model_config:
          type: string
          description: JSON string of engine-specific options (e.g. Deepgram)
        smart_format:
          type: boolean
        punctuate:
          type: boolean
        diarize:
          type: boolean
        utterance:
          type: boolean
        numerals:
          type: boolean
    AudioTranscriptionResponse:
      type: object
      required:
        - text
      properties:
        text:
          type: string
          description: Transcribed text
          example: Hello, how are you?
        duration:
          type: number
          description: Audio duration in seconds (verbose_json)
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: Enter your API key (starts with 'ek-')

````