Skip to main content

Overview

Submit one or more audio files for transcription and receive a job_id immediately. Poll the status endpoint on a fixed interval until the job completes and transcripts are available. Ideal for long recordings, bulk files, or offline pipelines where you do not need a live response. For real-time transcription, see STT Realtime. For short clips under 60 seconds, see STT REST.

Endpoints

OperationMethodURL
Submit JobPOSThttps://api.vachana.ai/stt/v3/batch/submit
Check Job StatusGEThttps://api.vachana.ai/stt/v3/batch/status/{job_id}

Limits & Specifications

View limits and supported formats

ItemLimit
Max audio durationLess than 1 hour per file
Max files per request10 files per API call
Max total payload size80 MB across all files and form fields combined
Minimum poll interval60 seconds between status calls for the same job_id

Supported Audio Formats

AAC · WAV · FLAC · ALAC · OGG (Vorbis) · OpusUse standard file extensions and MIME types (e.g. .m4a for AAC, .wav, .flac, .ogg).

Authentication

Send these headers on every request — both submit and status calls.
HeaderRequiredDescription
X-API-Key-IDYesYour API key. Required for all requests.
X-API-Request-IDNoA unique trace ID (e.g. UUID) you assign. Used to correlate your logs with platform logs or support. If omitted, the platform may generate one.
Do not set Content-Type: application/json on the submit request. Use multipart/form-data. curl sets the correct boundary automatically when you use -F / --form.

Submit a Transcription Job

POST /stt/v3/batch/submit

Upload audio files and kick off an asynchronous transcription job. The response returns a job_id immediately — the files are not yet transcribed at this point.

Request — Form Fields

FieldRequiredTypeDescription
audio_filesYesfileAudio files to transcribe. Add one audio_files field per file. Accepts 1–10 files, each under 1 hour. Formats: AAC, WAV, FLAC, ALAC, OGG, Opus. Total body must not exceed 80 MB.
language_codeYesstringBCP-47 language code for transcription (e.g. hi-IN, en-IN). See supported language codes.
is_multi_channelNobooleanSet to true if the audio is multi-channel (e.g. stereo or per-speaker tracks). Set to false for standard mono audio. Defaults to false.

Supported Language Codes

The Vachana API supports these 10 Indian languages

LanguageCodeNative ScriptExample Text
Bengalibn-INBengali (বাংলা)“আমি ভাত খাই”
Englishen-INLatin”I am going to the market”
Gujaratigu-INGujarati (ગુજરાતી)“હું બજાર જાઉં છું”
Hindihi-INDevanagari (हिन्दी)“मैं बाज़ार जा रहा हूँ”
Kannadakn-INKannada (ಕನ್ನಡ)“ನಾನು ಮಾರುಕಟ್ಟೆಗೆ ಹೋಗುತ್ತೇನೆ”
Malayalamml-INMalayalam (മലയാളം)“ഞാൻ ചന്തയിലേക്ക് പോകുന്നു”
Marathimr-INDevanagari (मराठी)“मी बाजारात जातोय”
Punjabipa-INGurmukhi (ਪੰਜਾਬੀ)“ਮੈਂ ਬਾਜ਼ਾਰ ਜਾ ਰਿਹਾ ਹਾਂ”
Tamilta-INTamil (தமிழ்)“நான் சந்தைக்கு செல்கிறேன்”
Telugute-INTelugu (తెలుగు)“నేను మార్కెట్‌కి వెళ్తున్నాను”
Hinglish(Latin) (experimental)en-hi-IN-latnLatin”Main market ja raha hu”
Hinglish (experimental)en-hi-in-cmLatin + Devanagari (हिन्दी)“मैं market जा रहा हूँ”
Auto-detect (experimental)en-IN,hi-IN,ta-IN,te-IN,kn-IN,ml-IN,gu-IN,mr-IN,bn-IN,pa-INAll supportedAutomatically detects language

Example — curl

curl --location --request POST 'https://api.vachana.ai/stt/v3/batch/submit' \
  --header 'X-API-Key-ID: <YOUR_API_KEY>' \
  --header 'X-API-Request-ID: 550e8400-e29b-41d4-a716-446655440000' \
  --form 'language_code=hi-IN' \
  --form 'is_multi_channel=false' \
  --form 'audio_files=@"/path/to/first.wav"' \
  --form 'audio_files=@"/path/to/second.wav"'

Response — 200 OK

{
  "job_id": "batch_7f3a92c1d4e8",
  "status": "submitted",
  "file_count": 2,
  "message": "Job accepted. Poll the status endpoint every 60 seconds for results."
}
FieldTypeDescription
job_idstringIdentifier for this job. Use it in the status URL.
statusstringInitial value is always submitted.
file_countintegerNumber of files accepted into the job.
messagestringShort confirmation with polling instructions.

Errors

HTTP StatusWhen
400No files uploaded, empty file, more than 10 files, payload over 80 MB, unsupported format, or other client-side validation failure.
500Server error.

Check Job Status

GET /stt/v3/batch/status/{job_id}

Poll this endpoint to check progress and retrieve transcription results once the job finishes. Call this once every 60 seconds per job_id — do not poll more frequently.

Path Parameter

ParameterRequiredDescription
job_idYesThe job_id returned from the Submit response.

Example — curl

curl --location --request GET 'https://api.vachana.ai/stt/v3/batch/status/{job_id}' \
  --header 'X-API-Key-ID: <YOUR_API_KEY>' \
  --header 'X-API-Request-ID: 550e8400-e29b-41d4-a716-446655440000'

Response — 200 OK

{
  "job_id": "batch_7f3a92c1d4e8",
  "status": "completed",
  "total_files": 2,
  "completed_files": 2,
  "failed_files": 0,
  "overall_progress": 100,
  "error": null,
  "results": [
    {
      "filename": "first.wav",
      "status": "completed",
      "full_transcript": "नमस्ते, आप कैसे हैं?",
      "total_duration": 45.3,
      "error": null,
      "segments": [
        {
          "segment_id": 0,
          "start_time": 0.0,
          "end_time": 3.2,
          "text": "नमस्ते, आप कैसे हैं?",
          "speaker_id": 1,
          "confidence": 0.97,
          "language_detected": "hi-IN",
          "sentiment": "Neutral",
          "emotion": "Neutral"
        }
      ]
    }
  ]
}

Job-Level Response Fields

FieldTypeDescription
job_idstringJob identifier.
statusstringsubmitted — accepted or in progress. processing — actively transcribing. completed — done. failed — job-level failure.
total_filesintegerTotal number of files in the job.
completed_filesintegerFiles finished successfully. Meaningful only when the job has reached a final state.
failed_filesintegerFiles that failed. Meaningful only when the job has reached a final state.
overall_progressintegerApproximate progress from 0 to 100 while the job is running.
resultsarray or nullPer-file results. null while the job is submitted or processing.
errorstring or nullTop-level error message for the job, if any.

Per-File Result Fields — results[]

FieldTypeDescription
filenamestringOriginal file name as submitted.
full_transcriptstringComplete transcribed text for the file.
segmentsarrayTime-aligned transcript segments (see below).
total_durationnumberAudio duration in seconds.
statusstringcompleted or failed for this individual file.
errorstring or nullError message for this file if it failed.

Per-Segment Fields — results[].segments[]

FieldTypeDescription
segment_idintegerSegment index (zero-based).
start_timenumberSegment start time in seconds.
end_timenumberSegment end time in seconds.
textstringTranscribed text for this segment.
speaker_idintegerSpeaker identifier. Populated for multi-channel audio.
confidencenumberConfidence score for the segment transcript (0–1).
language_detectedstringBCP-47 code of the detected language for this segment.
sentimentstringSentiment label (e.g. Neutral, Positive, Negative).
emotionstringEmotion label (e.g. Neutral, Happy, Sad).

Errors

HTTP StatusWhen
404job_id not found — unknown ID or the job is no longer available.
500Server error.

Flow Summary

  1. SubmitPOST https://api.vachana.ai/stt/v3/batch/submit with X-API-Key-ID, optional X-API-Request-ID, and form fields audio_files, language_code, and optionally is_multi_channel.
  2. Save the job_id from the submit response.
  3. PollGET https://api.vachana.ai/stt/v3/batch/status/{job_id} (same auth headers) every 60 seconds until status is completed or failed and results is populated.