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

# Create a batch

> Submit one or more recordings for durable asynchronous transcription.

> [!NOTE]
>
> Attach **one file** per request, or submit up to **100 URL inputs**. You can mix one upload with up to 99 URLs. Default limits are **3 hours** and **1 GiB per recording**, with a **512 KiB manifest**. See [Batch limits](https://docs.chariot.in/guides/speech-to-text/async-transcription.md#batch-limits) for request limits and per-file failure behavior.


## OpenAPI

````yaml api-reference/openapi.json POST /v1/asr/batches
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/batches:
    post:
      tags:
        - Speech to Text
      summary: Create a batch
      description: >-
        **Beta.** Submit up to 100 independent recordings using audio_url
        inputs, or attach one file with file_index: 0 and optionally add up to
        99 URL inputs. Default limits: 3 hours and 1 GiB per recording, 2 GiB
        per multipart request, and 512 KiB per manifest. Audio URLs may contain
        up to 4,096 characters and are downloaded by the async worker after
        acceptance, with a 5-minute download timeout per attempt. Invalid
        manifests reject the whole submission; processing failures after
        acceptance affect only the individual transcription. See the [Async
        transcription
        guide](/guides/speech-to-text/async-transcription#batch-limits) for
        details. Returns 202 after acceptance, before transcription completes.
        Save the items mapping of custom_id to transcription id and poll for
        results. Matching idempotent retries preserve those IDs. CSV manifests
        are not supported.
      operationId: createASRBatch
      parameters:
        - name: Idempotency-Key
          in: header
          required: false
          schema:
            type: string
            maxLength: 128
          description: >-
            Reuse the same key and identical manifest and file bytes to recover
            the original batch after a submission timeout. A changed request
            with the same key returns 409.
      requestBody:
        required: true
        content:
          application/json:
            schema:
              additionalProperties: false
              properties:
                inputs:
                  items:
                    additionalProperties: false
                    properties:
                      custom_id:
                        maxLength: 128
                        minLength: 1
                        title: Custom Id
                        type: string
                      audio_url:
                        anyOf:
                          - maxLength: 4096
                            type: string
                          - type: 'null'
                        default: null
                        title: Audio Url
                      file_index:
                        anyOf:
                          - maximum: 0
                            minimum: 0
                            type: integer
                          - type: 'null'
                        default: null
                        description: >-
                          Use 0 to reference the single uploaded file. Omit for
                          audio_url inputs.
                        title: File Index
                      language:
                        description: >-
                          Requested transcription languages supported by ASR;
                          not output translation.
                        enum:
                          - en
                          - hi
                          - none
                          - bn
                          - gu
                          - kn
                          - ml
                          - mr
                          - or
                          - pa
                          - sa
                          - ta
                          - te
                        title: ASRLanguage
                        type: string
                        default: none
                      model_type:
                        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
                        default: chariot-1-asr-realtime
                      mode:
                        description: >-
                          File transcription always uses the high accuracy
                          deployment.
                        enum:
                          - high_accuracy
                        title: ASRFileMode
                        type: string
                        default: high_accuracy
                      style:
                        description: >-
                          How code-mixed speech is written out.


                          ``codemix`` writes borrowed words (usually English) in
                          their own script,

                          "मेरी meeting cancel हो गई", and is what the current
                          deployment produces.

                          ``native`` writes everything in the spoken language's
                          script, "मेरी मीटिंग

                          कैंसल हो गई". Only a deployment that advertises
                          ``native`` can honour it.
                        enum:
                          - codemix
                          - native
                        title: ASRStyle
                        type: string
                        default: codemix
                      include_timestamps:
                        default: false
                        title: Include Timestamps
                        type: boolean
                    required:
                      - custom_id
                    title: BatchInput
                    type: object
                  maxItems: 100
                  minItems: 1
                  title: Inputs
                  type: array
                webhook_url:
                  anyOf:
                    - maxLength: 2048
                      type: string
                    - type: 'null'
                  default: null
                  title: Webhook Url
                webhook_events:
                  items:
                    enum:
                      - transcription.completed
                      - transcription.failed
                      - transcription.cancelled
                      - batch.completed
                      - batch.partially_completed
                      - batch.failed
                      - batch.cancelled
                    type: string
                  title: Webhook Events
                  type: array
              required:
                - inputs
              title: BatchSubmission
              type: object
          multipart/form-data:
            schema:
              type: object
              required:
                - manifest
              properties:
                manifest:
                  type: string
                  description: >-
                    JSON BatchSubmission with up to 100 inputs. Use file_index:
                    0 for the single optional uploaded file; use audio_url for
                    other inputs. Manifest limit: 512 KiB.
                files:
                  type: array
                  maxItems: 1
                  description: >-
                    At most one uploaded file per request, referenced exactly
                    once by file_index: 0. Optional for URL-only submissions.
                    Default limits: 1 GiB and 3 hours per recording; 2 GiB for
                    the complete multipart request.
                  items:
                    type: string
                    format: binary
      responses:
        '202':
          description: Accepted.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ASRAsyncBatchAccepted'
              example:
                id: 1f4b3eed-2fdf-4495-b988-2b7145127058
                status: queued
                created_at: '2026-10-27T08:41:44Z'
                started_at: null
                finished_at: null
                cancel_requested_at: null
                counts:
                  total: 1
                  queued: 1
                items_url: /v1/asr/history?batch_id=1f4b3eed-2fdf-4495-b988-2b7145127058
                items:
                  - id: 9cb6f4c5-b2bf-4d75-96e3-716f6f87d994
                    custom_id: meeting-1
                webhook_signing_secret: null
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          description: ASR is not available for this workspace.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '409':
          description: Idempotency key was reused with a different request.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '413':
          description: >-
            Too many attached files (at most one), or upload/manifest exceeds
            its byte-size limit.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '415':
          description: Use application/json or multipart/form-data.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '422':
          description: Invalid parameters or input.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          description: Too many pending asynchronous transcriptions. Retry with backoff.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '503':
          description: >-
            Asynchronous transcription, a requested mode or webhook delivery is
            unavailable.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
      security:
        - APIKeyHeader: []
components:
  schemas:
    ASRAsyncBatchAccepted:
      properties:
        id:
          format: uuid
          title: Id
          type: string
        status:
          enum:
            - queued
            - processing
            - cancelling
            - completed
            - partially_completed
            - failed
            - cancelled
          title: Status
          type: string
        created_at:
          format: date-time
          title: Created At
          type: string
        started_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Started At
        finished_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Finished At
        cancel_requested_at:
          anyOf:
            - type: string
              format: date-time
            - type: 'null'
          title: Cancel Requested At
        counts:
          additionalProperties:
            type: integer
          title: Counts
          type: object
        items_url:
          title: Items Url
          type: string
        items:
          description: >-
            Input-to-transcription ID mapping in submission order. Preserved on
            matching idempotent retries.
          items:
            $ref: '#/components/schemas/ASRAsyncBatchItemReference'
          title: Items
          type: array
        webhook_signing_secret:
          anyOf:
            - type: string
            - type: 'null'
          default: null
          title: Webhook Signing Secret
      required:
        - id
        - status
        - created_at
        - started_at
        - finished_at
        - cancel_requested_at
        - counts
        - items_url
        - items
      title: BatchAccepted
      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
    ASRAsyncBatchItemReference:
      properties:
        id:
          description: >-
            Transcription ID for polling and cancellation; matches webhook
            transcription_id.
          format: uuid
          title: Id
          type: string
        custom_id:
          description: Customer-supplied identifier, unique within this batch.
          title: Custom Id
          type: string
      required:
        - id
        - custom_id
      title: BatchItemReference
      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.