POST /v1/speech-to-text
Speech to text
Transcribe one audio file and return the transcript in this response. For a live stream, see Speech to text realtime.
POST https://api.pascalai.co/v1/speech-to-textContent-Type: multipart/form-data
Authenticate with Authorization: Bearer and an API key. Send model before file. The file must be under 500 MB. Pascal Transcribe accepts a file under 80 MB. Sarvam Saaras accepts audio up to 2 hours. The call remains open for up to 4 minutes. When processing has finished inside that window, the body is the job, including result.text. When status is queued or running, retrieve the same object with GET /v1/speech-to-text/{job_id}.
| Field | Type | Description |
|---|---|---|
modelRequired | string | Catalogue id of the model, for example whisper-large-v3-turbo. This part must be sent before the file. A missing model is rejected with model_required. |
fileRequired | file | Audio file to transcribe. The file must be under 500 MB. Pascal Transcribe accepts a file under 80 MB. Sarvam Saaras accepts audio up to 2 hours. |
params | string | JSON object for that model, encoded as a string. Omit the field, or send an empty string, to use the defaults. The value must be a JSON object. The fields are on the model page. |
name | string | Optional label stored on the job and returned as name. |
Parameters
params is a JSON object for the chosen model. Each row is one field for one model, with the default used when the field is omitted. Limits and accepted language codes are on the model page. speaker_diarization labels who spoke. Pascal Transcribe, Pascal Transcribe Live, Sarvam Saaras, Deepgram Nova-3, and Deepgram Nova-3 Streaming accept it. Sarvam Saaras Live and the Flux models do not.
| Field | Model | Default |
|---|---|---|
params.speaker_diarization | Pascal Transcribe | false. true labels speakers and bills $0.20 per hour. |
| Pascal Transcribe Live | false. true labels speakers and bills $0.25 per hour. | |
| Sarvam Saaras | false. true labels speakers and bills $0.0075 per minute. Saaras Live does not diarize. | |
| Deepgram Nova-3 | false. true labels speakers. Included in the file price. | |
| Deepgram Nova-3 Streaming | false. true labels speakers and adds $0.0020 per minute. | |
params.language | Whisper Large V3 Turbo | auto. Detects the language. |
| Whisper Large V3 | auto. Detects the language. | |
| Canary 1B Flash | auto. Transcribes the file as English. | |
| Canary 1B v2 | auto. Transcribes the file as English. | |
| Qwen3 ASR 1.7B | auto. Detects the language. | |
| Cohere Transcribe | Send a language code. This field has no default. | |
params.task | Whisper Large V3 | transcribe. translate returns English. |
params.response_format | Whisper Large V3 Turbo | verbose_json |
| Whisper Large V3 | verbose_json | |
| Parakeet TDT 0.6B v3 | verbose_json | |
| Parakeet TDT 0.6B v2 | verbose_json | |
| Parakeet CTC 0.6B | verbose_json | |
| Parakeet RNNT 0.6B | verbose_json | |
| Canary 1B Flash | verbose_json | |
| Canary 1B v2 | verbose_json | |
| Qwen3 ASR 1.7B | json | |
| Cohere Transcribe | json | |
params.timestamp_granularity | Whisper Large V3 Turbo | word. Also accepts segment and none. |
| Whisper Large V3 | word. Also accepts segment and none. | |
| Parakeet TDT 0.6B v3 | word. Also accepts none. | |
| Parakeet TDT 0.6B v2 | word. Also accepts none. | |
| Parakeet CTC 0.6B | word. Also accepts none. | |
| Parakeet RNNT 0.6B | word. Also accepts none. | |
| Canary 1B Flash | word. Also accepts none. | |
| Canary 1B v2 | word. Also accepts none. | |
| Qwen3 ASR 1.7B | none. Also accepts word. | |
params.prompt | Whisper Large V3 Turbo | Omitted. |
| Whisper Large V3 | Omitted. | |
| Qwen3 ASR 1.7B | Omitted. | |
params.temperature | Whisper Large V3 Turbo | 0, 0.2, 0.4, 0.6, 0.8, 1.0 |
| Whisper Large V3 | 0, 0.2, 0.4, 0.6, 0.8, 1.0 | |
params.hotwords | Whisper Large V3 Turbo | Omitted. |
| Whisper Large V3 | Omitted. | |
params.vad_filter | Whisper Large V3 Turbo | false |
| Whisper Large V3 | false | |
params.min_silence_duration_ms | Whisper Large V3 Turbo | 1000 when vad_filter is true |
| Whisper Large V3 | 1000 when vad_filter is true | |
params.condition_on_previous_text | Whisper Large V3 Turbo | true |
| Whisper Large V3 | true | |
params.prompt_reset_on_temperature | Whisper Large V3 Turbo | 0.5 |
| Whisper Large V3 | 0.5 | |
params.language_detection_threshold | Whisper Large V3 Turbo | 0.5 |
| Whisper Large V3 | 0.5 | |
params.prefix | Whisper Large V3 Turbo | Omitted. |
| Whisper Large V3 | Omitted. | |
params.repetition_penalty | Whisper Large V3 Turbo | 1 |
| Whisper Large V3 | 1 | |
params.no_repeat_ngram_size | Whisper Large V3 Turbo | 0 |
| Whisper Large V3 | 0 | |
params.hallucination_silence_threshold | Whisper Large V3 Turbo | Omitted. |
| Whisper Large V3 | Omitted. | |
params.no_speech_threshold | Whisper Large V3 Turbo | 0.6 |
| Whisper Large V3 | 0.6 | |
params.log_prob_threshold | Whisper Large V3 Turbo | -1 |
| Whisper Large V3 | -1 | |
params.max_initial_timestamp | Whisper Large V3 Turbo | 999999 |
| Whisper Large V3 | 999999 | |
params.length_penalty | Whisper Large V3 Turbo | 1 |
| Whisper Large V3 | 1 | |
params.compression_ratio_threshold | Whisper Large V3 Turbo | 2.4 |
| Whisper Large V3 | 2.4 | |
params.multilingual | Whisper Large V3 Turbo | false |
| Whisper Large V3 | false | |
params.max_new_tokens | Whisper Large V3 Turbo | Omitted. |
| Whisper Large V3 | Omitted. | |
params.chunk_length | Whisper Large V3 Turbo | Omitted. |
| Whisper Large V3 | Omitted. | |
params.language_detection_segments | Whisper Large V3 Turbo | 1 |
| Whisper Large V3 | 1 | |
params.blank_penalty | Parakeet TDT 0.6B v3 | 0.75 |
| Parakeet TDT 0.6B v2 | 0 |
Response
200 with the job. A successful file is charged $0.05 plus the audio duration in minutes. duration_seconds is the measured length that usage is billed from.
| Field | Type | Description |
|---|---|---|
id | string | Identifier of the job. Pass it to GET /v1/speech-to-text/{job_id}. |
status | string | queued, running, succeeded, failed, cancelled, or expired. queued and running mean the transcript is not in this body yet. |
model_id | string | Catalogue id of the model that ran. |
name | string | Label stored on the job. |
language | string | Language code from the request, when one was sent. |
duration_seconds | string | Measured length of the audio, as a decimal string of seconds. Null until the file has been measured. Audio minutes are billed from this value. |
result | object | Present when status is succeeded. result.text is the transcript. verbose_json also includes language, duration, segments, and words. |
error_code | string | Set when the job has failed, and while a queued job is waiting for capacity. Cleared once the job starts. |
error_message | string | Message for a failed job. Branch on error_code. |
created_at | string | Time the job was created, as an ISO 8601 timestamp. |
started_at | string | Time processing started. Null while the job is queued. |
finished_at | string | Time the job reached a terminal status. Null while it is queued or running. |
Example
This example sends a few fields for one model. The full list for the model you call is on that model’s page.
curl https://api.pascalai.co/v1/speech-to-text \
-H "Authorization: Bearer $PASCAL_API_KEY" \
-H "Idempotency-Key: $(uuidgen)" \
-F model=whisper-large-v3-turbo \
-F params='{"response_format":"verbose_json","timestamp_granularity":"word","language":"en"}' \
-F file=@input.wav
curl https://api.pascalai.co/v1/speech-to-text/$JOB_ID \
-H "Authorization: Bearer $PASCAL_API_KEY"Batch
POST /v1/speech-to-text/batch
Transcribe up to 50 files in a single request. All files use the same model and the same parameters. Send model, then params, then each audio file as a part named file. Each file must be under 500 MB. Pascal Transcribe accepts a file under 80 MB. Sarvam Saaras accepts audio up to 2 hours.
The response contains the batch identifier. Retrieve progress with GET /v1/speech-to-text/batch/{batch_id}. An account may have two open batches. A file can be retrieved on its own with GET /v1/speech-to-text/{job_id}.
| Field | Type | Description |
|---|---|---|
id | string | Identifier of the batch. |
status | string | open while any file is still in progress, and complete when every file has finished. |
model_id | string | Model applied to every file in the batch. |
file_count | integer | Number of files in the batch. |
succeeded | integer | Number of files with status succeeded. |
failed | integer | Number of files with status failed, cancelled, or expired. |
remaining | integer | Number of files still pending, queued, or running. |
files[].job_id | string | Job identifier for the file, available after the file is queued. |
files[].name | string | Original file name. |
files[].status | string | pending, queued, running, succeeded, failed, cancelled, or expired. |
files[].result | object | Transcript of the file. |
files[].error_code | string | Error code for that file. |
files[].error_message | string | Error message for that file. |
A successful batch is charged $0.05 once. Each file is charged for its audio duration in minutes.
curl https://api.pascalai.co/v1/speech-to-text/batch \
-H "Authorization: Bearer $PASCAL_API_KEY" \
-F model=whisper-large-v3-turbo \
-F params='{"language":"en"}' \
-F file=@clip-001.wav \
-F file=@clip-002.wav
curl https://api.pascalai.co/v1/speech-to-text/batch/$BATCH_ID \
-H "Authorization: Bearer $PASCAL_API_KEY"Models
whisper-large-v3-turboWhisper Large V3 Turbo transcription.whisper-large-v3Full Whisper Large V3, including translate to English.parakeet-tdt-0.6b-v3NVIDIA Parakeet batch ASR. 25 European languages.parakeet-tdt-0.6b-v2NVIDIA Parakeet English TDT.parakeet-ctc-0.6bNVIDIA Parakeet English CTC. Word timestamps from token times.parakeet-rnnt-0.6bNVIDIA Parakeet English RNNT. Word timestamps from token times.canary-1b-flashNVIDIA Canary Flash. 25 European languages. Word timestamps.canary-1b-v2NVIDIA Canary 1B v2. 25 European languages. Word timestamps.qwen3-asr-1.7bQwen3 batch ASR. 30 languages. Accepts a prompt.cohere-transcribe-03-2026Cohere batch transcription. Language is required.pascal-transcribeSpeech-to-text. $0.18 per audio hour, or $0.20 per audio hour with speaker diarization, plus the $0.05 request fee.sarvam-saarasSaaras v4. $0.005 / min. Diarization is $0.0075 / min. language and language_code are the same field.deepgram-nova-3File speech-to-text at Deepgram Pay As You Go. $0.0043 per minute for one language, $0.0052 per minute when language is multi. File diarization is included.