> ## 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 large-file upload

> First step of the signed-URL flow for files over ~32 MB. Takes the same option
headers as `POST /batch` plus `X-Content-Type` with the audio MIME type (the
request itself has no body). Returns an `uploadUrl` to `PUT` the audio to
directly — no API key needed on that request, and it works from browsers.
Then call `POST /batch/{operationId}/start`.




## OpenAPI

````yaml /openapi-stt.yaml post /batch/init
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/init:
    post:
      tags:
        - Transcription
      summary: Start a large-file upload
      description: >
        First step of the signed-URL flow for files over ~32 MB. Takes the same
        option

        headers as `POST /batch` plus `X-Content-Type` with the audio MIME type
        (the

        request itself has no body). Returns an `uploadUrl` to `PUT` the audio
        to

        directly — no API key needed on that request, and it works from
        browsers.

        Then call `POST /batch/{operationId}/start`.
      operationId: initBatchUpload
      parameters:
        - $ref: '#/components/parameters/Languages'
        - $ref: '#/components/parameters/Metadata'
        - name: X-Content-Type
          in: header
          required: true
          schema:
            type: string
            example: audio/mp4
          description: >-
            MIME type of the file you will upload. The `PUT` must send the same
            `Content-Type`.
        - name: X-Diarization
          in: header
          required: false
          schema:
            type: string
      responses:
        '200':
          description: Upload URL issued
          content:
            application/json:
              schema:
                type: object
                properties:
                  operationId:
                    type: string
                  uploadUrl:
                    type: string
                  uploadMethod:
                    type: string
                    example: PUT
                  uploadContentType:
                    type: string
                  expiresInSeconds:
                    type: integer
                    example: 3600
                  startUrl:
                    type: string
                  pollUrl:
                    type: string
        '401':
          $ref: '#/components/responses/Unauthorized'
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:
    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_…`)

````