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

# Transcribe audio

> Transcribe audio to text using Whisper. Returns a job that you poll or stream for completion.

Supports both Fal-hosted Whisper and Groq-hosted Whisper (faster, cheaper).




## OpenAPI

````yaml /openapi.yaml post /transcription
openapi: 3.1.0
info:
  title: Varg Gateway API
  version: 0.1.0
  description: >-
    Unified REST API for AI generation (video, image, speech, music) at
    api.varg.ai
servers:
  - url: https://api.varg.ai/v1
security:
  - bearerAuth: []
tags:
  - name: Generation
    description: Create AI-generated content
  - name: Jobs
    description: Manage and monitor generation jobs
  - name: Files
    description: Upload files for use in generation
  - name: Reference
    description: Available models and voices
  - name: Media Processing
    description: FFmpeg-powered video utilities (trim, resize, probe, custom commands)
  - name: Account
    description: Account info, balance, and usage
paths:
  /transcription:
    post:
      tags:
        - Generation
      summary: Transcribe audio
      description: >
        Transcribe audio to text using Whisper. Returns a job that you poll or
        stream for completion.


        Supports both Fal-hosted Whisper and Groq-hosted Whisper (faster,
        cheaper).
      operationId: createTranscription
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - model
                - audio_url
              properties:
                model:
                  type: string
                  description: >
                    Transcription model to use.


                    **Fal (standard):** `whisper`, `whisper-large-v3`


                    **Groq (faster, cheaper):** `groq-whisper`,
                    `groq-whisper-large-v3`, `groq-whisper-large-v3-turbo`
                  examples:
                    - whisper
                    - whisper-large-v3
                    - groq-whisper
                    - groq-whisper-large-v3-turbo
                audio_url:
                  type: string
                  format: uri
                  description: >-
                    URL of the audio file to transcribe (mp3, wav, m4a, webm,
                    etc.)
                  example: https://example.com/audio.mp3
                language:
                  type: string
                  description: >-
                    Language code (e.g. "en", "es", "fr", "ja"). Auto-detected
                    if omitted.
                  example: en
                provider_options:
                  type: object
                  description: Additional options passed directly to the provider
                  additionalProperties: true
            examples:
              whisper:
                summary: Whisper — standard transcription
                value:
                  model: whisper
                  audio_url: https://example.com/podcast-episode.mp3
              whisper-large:
                summary: Whisper Large V3 — highest accuracy
                value:
                  model: whisper-large-v3
                  audio_url: https://example.com/interview.wav
                  language: en
              groq-whisper:
                summary: Groq Whisper — fast and cheap
                value:
                  model: groq-whisper
                  audio_url: https://example.com/meeting-recording.mp3
              groq-whisper-turbo:
                summary: Groq Whisper Turbo — fastest
                value:
                  model: groq-whisper-large-v3-turbo
                  audio_url: https://example.com/voice-memo.m4a
                  language: en
      responses:
        '202':
          description: Job created
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobResponse'
        '400':
          $ref: '#/components/responses/ValidationError'
        '401':
          $ref: '#/components/responses/AuthError'
        '402':
          $ref: '#/components/responses/InsufficientBalanceError'
        '429':
          $ref: '#/components/responses/RateLimitError'
        '500':
          $ref: '#/components/responses/InternalError'
        '502':
          $ref: '#/components/responses/ProviderError'
components:
  schemas:
    JobResponse:
      type: object
      required:
        - job_id
        - status
        - model
        - created_at
      properties:
        job_id:
          type: string
          description: Unique job identifier
          example: job_a1b2c3d4
        status:
          type: string
          enum:
            - queued
            - processing
            - completed
            - failed
            - cancelled
          description: Current job status
          example: completed
        model:
          type: string
          description: Resolved model identifier (provider:model format)
          example: fal:kling-v2.5
        created_at:
          type: string
          format: date-time
          description: When the job was created
          example: '2026-02-13T10:00:00Z'
        completed_at:
          type: string
          format: date-time
          description: When the job finished (completed, failed, or cancelled)
          example: '2026-02-13T10:02:30Z'
        output:
          type: object
          description: Job output, present when status is completed
          properties:
            url:
              type: string
              format: uri
              description: URL of the generated file on s3.varg.ai
              example: https://s3.varg.ai/o/job_a1b2c3d4.mp4
            media_type:
              type: string
              description: MIME type of the output
              example: video/mp4
        cache:
          type: object
          description: Cache metadata
          properties:
            hit:
              type: boolean
              description: Whether this result was served from cache
              example: false
            key:
              type: string
              description: Cache key for this request
              example: sha256:abc123...
        error:
          type: string
          description: Error message, present when status is failed
          example: Provider returned an error
    ErrorResponse:
      type: object
      required:
        - error
        - message
      properties:
        error:
          type: string
          description: Error code
          example: ValidationError
        message:
          type: string
          description: Human-readable error description
          example: prompt is required
        field:
          type: string
          description: The field that caused the error, if applicable
          example: prompt
        provider:
          type: string
          description: The upstream provider that returned the error, if applicable
          example: fal
        statusCode:
          type: number
          description: HTTP status code
          example: 400
  responses:
    ValidationError:
      description: Invalid request body
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: ValidationError
            message: prompt is required
            field: prompt
            statusCode: 400
    AuthError:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: AuthError
            message: Invalid API key
            statusCode: 401
    InsufficientBalanceError:
      description: Account balance too low
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: InsufficientBalanceError
            message: Insufficient balance. Add credits at varg.ai/dashboard.
            statusCode: 402
    RateLimitError:
      description: Too many requests
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: RateLimitError
            message: Rate limit exceeded. Retry after 60 seconds.
            statusCode: 429
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: InternalError
            message: An unexpected error occurred
            statusCode: 500
    ProviderError:
      description: Upstream provider returned an error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error: ProviderError
            message: Provider returned an error
            provider: fal
            statusCode: 502
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: varg_xxx
      description: |
        API key from [varg.ai/dashboard](https://varg.ai/dashboard).

        Pass as `Authorization: Bearer varg_xxx`.

````