> ## 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.

# Start a long-audio transcription

> Asynchronous transcription for audio up to **8 hours** and **500 MB**:
meetings, call recordings, podcasts. Returns an operation to poll with
`GET /batch/{operationId}`.

Accepts the same formats as `/transcribe` plus `audio/mp4` (M4A / AAC).

**Speaker diarization.** Add `X-Diarization: true`, or `minSpeakers,maxSpeakers`
such as `2,4`, to get a `speakerTurns` array on the result. Diarization requires
`X-Languages: auto` or explicit codes from:
`cmn-Hans-CN, de-DE, en-GB, en-IN, en-US, es-ES, es-US, fr-CA, fr-FR, hi-IN, it-IT, ja-JP, ko-KR, pt-BR`.

Direct uploads are capped at about 32 MB by the platform. For larger files use
the signed-URL flow: `POST /batch/init`, `PUT` the audio to the returned URL,
then `POST /batch/{operationId}/start`.




## OpenAPI

````yaml /openapi-stt.yaml post /batch
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:
  /batch:
    post:
      tags:
        - Transcription
      summary: Start a long-audio transcription
      description: >
        Asynchronous transcription for audio up to **8 hours** and **500 MB**:

        meetings, call recordings, podcasts. Returns an operation to poll with

        `GET /batch/{operationId}`.


        Accepts the same formats as `/transcribe` plus `audio/mp4` (M4A / AAC).


        **Speaker diarization.** Add `X-Diarization: true`, or
        `minSpeakers,maxSpeakers`

        such as `2,4`, to get a `speakerTurns` array on the result. Diarization
        requires

        `X-Languages: auto` or explicit codes from:

        `cmn-Hans-CN, de-DE, en-GB, en-IN, en-US, es-ES, es-US, fr-CA, fr-FR,
        hi-IN, it-IT, ja-JP, ko-KR, pt-BR`.


        Direct uploads are capped at about 32 MB by the platform. For larger
        files use

        the signed-URL flow: `POST /batch/init`, `PUT` the audio to the returned
        URL,

        then `POST /batch/{operationId}/start`.
      operationId: startBatch
      parameters:
        - $ref: '#/components/parameters/Languages'
        - $ref: '#/components/parameters/Metadata'
        - name: X-Diarization
          in: header
          required: false
          schema:
            type: string
            example: 'true'
          description: '`true`, or `minSpeakers,maxSpeakers` (1–20, e.g. `2,4`).'
      requestBody:
        required: true
        content:
          audio/mpeg:
            schema:
              type: string
              format: binary
          audio/mp4:
            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
      responses:
        '202':
          description: Operation started
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                  status:
                    type: string
                    enum:
                      - processing
                  pollUrl:
                    type: string
                    example: /batch/batch_a1b2c3d4-…
                  audioBytes:
                    type: integer
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '413':
          description: File larger than 500 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.
  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'
  schemas:
    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
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: Your Omnia API key (`om_…` or `ck_…`)

````