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

# Transcribe a file

> Upload a recording or provide an audio URL and receive a complete transcript.



## OpenAPI

````yaml api-reference/openapi.json POST /v1/asr/transcribe
openapi: 3.1.0
info:
  title: Chariot API
  version: '1'
  description: >-
    Chariot is a voice AI platform built for Indian and English languages.
    Convert text into natural-sounding speech over a simple REST call, an HTTP
    audio stream, or a low-latency WebSocket, and transcribe speech to text over
    a streaming WebSocket or from a prerecorded file (Beta). This reference
    documents the public, API-key-authenticated endpoints.
  contact:
    name: Chariot Support
    email: support@chariot.in
    url: https://chariot.in
servers:
  - url: https://api.chariot.in
    description: Production
security:
  - APIKeyHeader: []
tags:
  - name: Text to Speech
    description: Convert text into speech synchronously or as a stream.
  - name: Speech to Text
    description: >-
      Transcribe prerecorded files (Beta) and review streaming speech-to-text
      sessions.
  - name: Voices
    description: Browse the voice catalog.
  - name: Account
    description: Inspect your credit balance and usage.
paths:
  /v1/asr/transcribe:
    post:
      tags:
        - Speech to Text
      summary: Transcribe a file
      description: >-
        **Beta.** Transcribe one prerecorded audio or video file and receive the
        complete transcript in the same HTTP response. Send exactly one of
        `input_audio_file` or `input_audio_url` as multipart form data. Optional
        `model_type`, `language`, `style`, and `include_timestamps` fields apply
        to either input. File transcription defaults to `mode=high_accuracy` and
        rejects `balanced`; live WebSocket sessions still support both modes.
        Let your HTTP client set the multipart boundary.


        This is synchronous file transcription. Keep the request open until it
        completes. It does not create a durable background job or accept
        multiple files or CSV uploads. A retry is a new transcription request.
        Set include_timestamps=true for estimated word timings. Confidence
        scores and speaker labels are not returned. For durable jobs and
        multiple recordings, use POST /v1/asr/batches.


        See the [File transcription
        guide](/guides/speech-to-text/file-transcription) for upload and URL
        examples. File acceptance constraints can change during beta; handle
        validation responses rather than assuming every recording is accepted.
      operationId: transcribeFile
      requestBody:
        required: true
        content:
          multipart/form-data:
            schema:
              $ref: '#/components/schemas/ASRFileTranscriptionRequest'
      responses:
        '200':
          description: Complete transcription.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ASRFileTranscriptionResponse'
              example:
                request_id: a38c6b32-1f3a-4f02-a779-478282bce082
                created: '2026-10-23T07:00:00Z'
                text: Hi, I'd like to move the meeting to Thursday.
                duration: 4.82
                words: []
                model_type: chariot-1-asr-realtime
        '401':
          $ref: '#/components/responses/Unauthorized'
        '402':
          description: Insufficient credits for this recording.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: ASR is not permitted by the current plan.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: The upload is too large.
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Explanation of the upload rejection.
                required:
                  - detail
        '422':
          description: >-
            Invalid input or transcription settings. Supply exactly one input
            and a readable audio track. A supplied URL must be accessible and
            the recording must meet the current file acceptance constraints.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: >-
            Too many simultaneous ASR requests. Reduce concurrency and retry
            with backoff.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '502':
          description: Transcription failed while processing the recording.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: >-
            File transcription or the selected settings are temporarily
            unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '504':
          description: Transcription did not complete before the service timeout.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      x-codeSamples:
        - lang: bash
          label: Upload a file
          source: |-
            curl --fail-with-body https://api.chariot.in/v1/asr/transcribe \
              -H "chariotai-api-key: $CHARIOT_API_KEY" \
              -F "input_audio_file=@recording.wav"
        - lang: bash
          label: Use a URL
          source: |-
            curl --fail-with-body https://api.chariot.in/v1/asr/transcribe \
              -H "chariotai-api-key: $CHARIOT_API_KEY" \
              --form-string "input_audio_url=$AUDIO_URL"
components:
  schemas:
    ASRFileTranscriptionRequest:
      type: object
      description: >-
        Send exactly one of input_audio_file or input_audio_url as
        multipart/form-data. Other fields apply to either input.
      oneOf:
        - title: File upload
          type: object
          required:
            - input_audio_file
          properties:
            input_audio_file:
              type: string
              format: binary
              description: >-
                The audio or video file bytes. The file must contain a readable
                audio track. Supply this or input_audio_url, not both.
            language:
              type: string
              enum:
                - none
                - en
                - hi
                - bn
                - gu
                - kn
                - ml
                - mr
                - or
                - pa
                - sa
                - ta
                - te
              default: none
              description: >-
                Requested transcription language. Omit or use none for automatic
                detection. This does not request translation.
            mode:
              type: string
              enum:
                - high_accuracy
              default: high_accuracy
              description: >-
                File transcription always uses high_accuracy. balanced is only
                supported by the live WebSocket.
            style:
              type: string
              enum:
                - codemix
                - native
              default: codemix
              description: >-
                Writing style for mixed-language speech. codemix keeps borrowed
                words in their own script; native writes them in the spoken
                language's script.
            include_timestamps:
              type: boolean
              default: false
              description: >-
                Return estimated word timestamps in seconds from the start of
                the file. Applies to either file upload or URL input.
            model_type:
              type: string
              enum:
                - chariot-1-asr-realtime
              default: chariot-1-asr-realtime
              description: >-
                Public ASR model. The same model_type is used across WebSocket,
                file and batch transcription.
          not:
            required:
              - input_audio_url
        - title: Media URL
          type: object
          required:
            - input_audio_url
          properties:
            input_audio_url:
              type: string
              format: uri
              minLength: 1
              description: >-
                Direct HTTP or HTTPS media URL reachable by Chariot, including a
                signed URL. It must remain valid during download and must not
                require additional authentication headers. Supply this or
                input_audio_file, not both.
            language:
              type: string
              enum:
                - none
                - en
                - hi
                - bn
                - gu
                - kn
                - ml
                - mr
                - or
                - pa
                - sa
                - ta
                - te
              default: none
              description: >-
                Requested transcription language. Omit or use none for automatic
                detection. This does not request translation.
            mode:
              type: string
              enum:
                - high_accuracy
              default: high_accuracy
              description: >-
                File transcription always uses high_accuracy. balanced is only
                supported by the live WebSocket.
            style:
              type: string
              enum:
                - codemix
                - native
              default: codemix
              description: >-
                Writing style for mixed-language speech. codemix keeps borrowed
                words in their own script; native writes them in the spoken
                language's script.
            include_timestamps:
              type: boolean
              default: false
              description: >-
                Return estimated word timestamps in seconds from the start of
                the file. Applies to either file upload or URL input.
            model_type:
              type: string
              enum:
                - chariot-1-asr-realtime
              default: chariot-1-asr-realtime
              description: >-
                Public ASR model. The same model_type is used across WebSocket,
                file and batch transcription.
          not:
            required:
              - input_audio_file
    ASRFileTranscriptionResponse:
      description: One complete file transcript; uploaded channels are mixed to mono.
      properties:
        model_type:
          $ref: '#/components/schemas/ASRFileASRModelType'
          default: chariot-1-asr-realtime
        request_id:
          description: Identifier for this transcription request.
          title: Request Id
          type: string
        created:
          description: Response creation time in UTC.
          format: date-time
          title: Created
          type: string
        text:
          description: Complete recognized text, empty when no speech is recognized.
          title: Text
          type: string
        duration:
          description: Processed audio duration in seconds, not request latency.
          title: Duration
          type: number
        words:
          anyOf:
            - items:
                $ref: '#/components/schemas/ASRFileASRWordTimestamp'
              type: array
            - type: 'null'
          description: >-
            Estimated word boundaries in seconds from the start of the file when
            include_timestamps=true. Null when requested but unavailable or
            invalid; an empty list means no timed words. Also empty when
            timestamps are not requested.
          title: Words
      required:
        - request_id
        - created
        - text
        - duration
      title: ASRResponse
      type: object
    Error:
      type: object
      description: Standard error envelope returned by all endpoints.
      properties:
        statusCode:
          type: integer
          description: HTTP status code, echoed in the body.
        error:
          type: string
          description: Machine-readable error class name.
        message:
          type: string
          description: Human-readable description of what went wrong.
      required:
        - statusCode
        - error
        - message
    ASRFileASRModelType:
      description: >-
        Public streaming ASR ``model_type`` values, the same parameter name TTS

        uses. A product name, never the checkpoint or serving name behind it:
        the

        upstream's served name is configuration and is never sent to a caller.
      enum:
        - chariot-1-asr-realtime
      title: ASRModelType
      type: string
    ASRFileASRWordTimestamp:
      description: Estimated word boundaries in seconds from the start of session audio.
      properties:
        text:
          title: Text
          type: string
        start:
          minimum: 0
          title: Start
          type: number
        end:
          minimum: 0
          title: End
          type: number
      required:
        - text
        - start
        - end
      title: ASRWordTimestamp
      type: object
  responses:
    Unauthorized:
      description: Authentication failed. The API key is missing, invalid, or expired.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          examples:
            missing:
              summary: No credentials provided
              value:
                statusCode: 401
                error: UnauthorizedException
                message: No API key or user credentials provided
            invalid:
              summary: Invalid or unknown API key
              value:
                statusCode: 401
                error: UnauthorizedException
                message: Invalid API Key or user credentials
  securitySchemes:
    APIKeyHeader:
      type: apiKey
      in: header
      name: chariotai-api-key
      description: >-
        Your Chariot API key, generated from the dashboard. Send it in the
        `chariotai-api-key` header on every request.

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.