> ## Documentation Index
> Fetch the complete documentation index at: https://guide.omnia-voice.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Transcribe a file

> Synchronous transcription for audio up to **60 seconds** and **10 MB**.
The transcript comes back in the response. For longer audio use `POST /batch`.

Send the raw file bytes as the body with the matching `Content-Type`:
`audio/mpeg` (MP3), `audio/wav`, `audio/flac`, `audio/ogg` (Opus),
`audio/webm` (Opus), or `audio/x-raw` (16-bit 16 kHz mono PCM).




## OpenAPI

````yaml /openapi-stt.yaml post /transcribe
openapi: 3.0.0
info:
  title: Omnia Speech-to-Text API
  description: >
    Standalone transcription. Send audio in, get text back — no agent involved.


    Three modes:

    - `POST /transcribe` — files up to 60 seconds, synchronous.

    - `POST /batch` — long audio up to 8 hours, asynchronous with polling.

    - `wss://stt.omnia-voice.com/stream` and `/v2/stream` — live audio.
    WebSocket
      endpoints are documented on the [Streaming protocol](/api-reference/speech-to-text/streaming) page.

    Authenticate with your Omnia API key in the `X-API-Key` header.
  version: 2.1.0
  contact:
    email: support@omnia-voice.com
servers:
  - url: https://stt.omnia-voice.com
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Transcription
    description: File and long-audio transcription
  - name: Languages
    description: Supported languages
paths:
  /transcribe:
    post:
      tags:
        - Transcription
      summary: Transcribe a file
      description: >
        Synchronous transcription for audio up to **60 seconds** and **10 MB**.

        The transcript comes back in the response. For longer audio use `POST
        /batch`.


        Send the raw file bytes as the body with the matching `Content-Type`:

        `audio/mpeg` (MP3), `audio/wav`, `audio/flac`, `audio/ogg` (Opus),

        `audio/webm` (Opus), or `audio/x-raw` (16-bit 16 kHz mono PCM).
      operationId: transcribeFile
      parameters:
        - $ref: '#/components/parameters/Languages'
        - $ref: '#/components/parameters/Metadata'
      requestBody:
        required: true
        content:
          audio/mpeg:
            schema:
              type: string
              format: binary
          audio/wav:
            schema:
              type: string
              format: binary
          audio/flac:
            schema:
              type: string
              format: binary
          audio/ogg:
            schema:
              type: string
              format: binary
          audio/webm:
            schema:
              type: string
              format: binary
          audio/x-raw:
            schema:
              type: string
              format: binary
      responses:
        '200':
          description: Transcription result
          content:
            application/json:
              schema:
                type: object
                properties:
                  transcript:
                    type: string
                    description: The full text.
                  segments:
                    type: array
                    items:
                      $ref: '#/components/schemas/Segment'
                  audioSize:
                    type: integer
                    description: Bytes received.
                  estimatedDurationMs:
                    type: integer
                    description: >-
                      Audio length in milliseconds. This is what you are billed
                      on.
                  processingTime:
                    type: integer
                    description: Recognition time in milliseconds.
                  sessionId:
                    type: string
                    example: stt_1788786506604_8fd6cc541a02b620
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '413':
          description: File larger than 10 MB
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
components:
  parameters:
    Languages:
      name: X-Languages
      in: header
      required: false
      schema:
        type: string
        example: fi-FI,sv-SE
      description: >
        Comma-separated BCP-47 codes (up to 10), or `auto` on its own to detect
        the

        language. Defaults to `fi-FI,sv-SE`. Also accepted as `?languages=`.

        See `GET /languages` for supported codes.
    Metadata:
      name: X-Metadata
      in: header
      required: false
      schema:
        type: string
        example: '{"callId": "abc-123"}'
      description: JSON passed through unchanged to usage webhooks.
  schemas:
    Segment:
      type: object
      properties:
        transcript:
          type: string
        confidence:
          type: number
          description: Not populated by the engine; always 0.
        language:
          type: string
          description: Detected language of this segment (BCP-47).
          example: fi-FI
        isFinal:
          type: boolean
    Error:
      type: object
      properties:
        error:
          type: string
          description: Human-readable description.
        message:
          type: string
          description: Same text as `error`.
        code:
          type: string
          description: Machine-readable code.
          example: INVALID_API_KEY
  responses:
    BadRequest:
      description: Invalid option or empty audio
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Your Omnia API key (`om_…` or `ck_…`)

````