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

# Transcribe audio

> Transcribe audio to text. By default runs synchronously and returns the transcript inline (200); `audio` accepts a `file_<id>`, an https URL, or a base64 data-URI (max 25MB decoded). Set `stream: true` to receive the transcript live as Server-Sent Events (`transcript.text.delta` chunks then a final `transcript.text.done`, terminated by `data: [DONE]`) — supported on streaming models like `mistral/voxtral-mini-2602`, a 400 otherwise. Set `async: true` to run on the background worker and get a 202 with a status URL to poll instead — use it for long recordings that can exceed the synchronous timeout; it accepts the same `audio` sources (an inline data-URI is staged server-side and deleted after transcription) and lifts the decoded-audio cap to 100MB (a `file_<id>` or https URL is the best way to reach that; a data-URI that large needs a ~133MB request body). `stream` and `async` are mutually exclusive. `model` and `audio` are required; `language` and `prompt` are passed through as hints; `diarize` requests speaker labels (400 on models without diarization support); everything in `parameters` is forwarded verbatim to the provider.

See the [Audio guide](/build/multimodal/audio) for runnable examples.


## OpenAPI

````yaml post /v3/audio/transcriptions
openapi: 3.1.0
info:
  description: Schema-driven generative API that orchestrates LLM-powered workflows.
  title: Task API
  version: 3.0.0
servers:
  - description: Production
    url: https://api.opper.ai
  - description: Local development
    url: http://localhost:8080
security:
  - BearerAuth: []
tags:
  - description: Schema-driven function management and execution
    name: Functions
  - description: OpenAI-compatible chat completions
    name: Chat
  - description: OpenAI Responses API compatible endpoint
    name: Responses
  - description: Google-compatible interactions endpoint
    name: Interactions
  - description: Model registry and capabilities
    name: Models
  - description: Synchronous image generation
    name: Images
  - description: Text-to-speech and speech-to-text
    name: Audio
  - description: Asynchronous video generation
    name: Videos
  - description: Reusable file storage for media inputs and generated outputs
    name: Files
  - description: Async generation status and downloads
    name: Artifacts
  - description: OpenAI-compatible embeddings
    name: Embeddings
  - description: Recorded HTTP request/response generations
    name: Generations
  - description: System health and status
    name: System
  - description: Roundtable endpoint — fan out a query to multiple LLMs and combine results
    name: Roundtable
  - description: Web search, fetch, and other utility tools
    name: Tools
  - description: Caller identity, credits, and usage
    name: Account
paths:
  /v3/audio/transcriptions:
    post:
      tags:
        - Audio
      summary: Transcribe audio (STT)
      description: >-
        Transcribe audio to text. By default runs synchronously and returns the
        transcript inline (200); `audio` accepts a `file_<id>`, an https URL, or
        a base64 data-URI (max 25MB decoded). Set `stream: true` to receive the
        transcript live as Server-Sent Events (`transcript.text.delta` chunks
        then a final `transcript.text.done`, terminated by `data: [DONE]`) —
        supported on streaming models like `mistral/voxtral-mini-2602`, a 400
        otherwise. Set `async: true` to run on the background worker and get a
        202 with a status URL to poll instead — use it for long recordings that
        can exceed the synchronous timeout; it accepts the same `audio` sources
        (an inline data-URI is staged server-side and deleted after
        transcription) and lifts the decoded-audio cap to 100MB (a `file_<id>`
        or https URL is the best way to reach that; a data-URI that large needs
        a ~133MB request body). `stream` and `async` are mutually exclusive.
        `model` and `audio` are required; `language` and `prompt` are passed
        through as hints; `diarize` requests speaker labels (400 on models
        without diarization support); everything in `parameters` is forwarded
        verbatim to the provider.
      operationId: createTranscription
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/TranscriptionRequest'
        required: true
      responses:
        '200':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranscriptionResponse'
          description: Successful response
        '202':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TranscriptionJobResponse'
          description: >-
            Accepted – async transcription submitted (async: true). Poll the
            returned `status_url` (GET /v3/artifacts/{id}/status) for a
            presigned URL to the transcript JSON when complete.
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Bad request
        '401':
          description: Unauthorized - missing or invalid API key
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
          description: Internal server error
components:
  schemas:
    TranscriptionRequest:
      properties:
        async:
          type: boolean
        audio:
          type: string
        diarize:
          type: boolean
        language:
          type: string
        model:
          type: string
        parameters:
          type: object
        prompt:
          type: string
        stream:
          type: boolean
      required:
        - model
        - audio
      type: object
    TranscriptionResponse:
      properties:
        created:
          type: integer
        duration:
          type: number
        id:
          type: string
        language:
          type: string
        model:
          type: string
        segments:
          items:
            properties:
              end:
                type: number
              speaker:
                type: string
              start:
                type: number
              text:
                type: string
            required:
              - start
              - end
              - text
            type: object
          type: array
        text:
          type: string
        usage:
          properties:
            cost:
              type: number
            seconds:
              type: number
          required:
            - cost
            - seconds
          type: object
        words:
          items:
            properties:
              end:
                type: number
              start:
                type: number
              word:
                type: string
            required:
              - word
              - start
              - end
            type: object
          type: array
      required:
        - id
        - model
        - created
        - text
        - usage
      type: object
    TranscriptionJobResponse:
      properties:
        id:
          type: string
        status_url:
          type: string
      required:
        - id
        - status_url
      type: object
    ErrorResponse:
      properties:
        error:
          properties:
            code:
              type: string
            details:
              description: Any value
            message:
              type: string
          required:
            - code
            - message
          type: object
        meta:
          type: object
      required:
        - error
      type: object
  securitySchemes:
    BearerAuth:
      bearerFormat: API Key
      description: API key authentication. Pass your API key as a Bearer token.
      scheme: bearer
      type: http

````