Model APIs
Whisper-1
Submit an audio file for transcription or English translation, poll its task, and download text, JSON or subtitles.
Whisper-1 converts recorded speech into text. Use /v1/audio/transcriptions to keep the spoken language or /v1/audio/translations to produce English. Both accept multipart/form-data with an uploaded file. SeedRouter returns a task ID first; download the selected result after the task completes. This differs from a synchronous OpenAI SDK response.
Playground and live pricing · First transcription tutorial · OpenAPI · Markdown
Submit a recording
Keep your API key on the server. Let your HTTP client generate the multipart boundary; do not manually set a bare Content-Type: multipart/form-data header.
curl https://api.seedrouter.ai/v1/audio/transcriptions \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-F model=whisper-1 \
-F [email protected] \
-F language=en \
-F response_format=verbose_json \
-F 'timestamp_granularities[]=word' \
-F 'timestamp_granularities[]=segment'The response acknowledges a task, not a finished transcription:
{
"id": "task_example",
"model": "whisper-1",
"status": "processing",
"created_at": 1792376116
}Store the actual returned id. Submit once. A lost connection does not establish whether the request was accepted; check your task history before creating another request.
Read the result
curl "https://api.seedrouter.ai/v1/tasks/$TASK_ID" \
-H "Authorization: Bearer $SEEDROUTER_API_KEY"Poll while status is processing. A completed task contains output.url and output.format; a failed task contains error.code and error.message. A polling timeout is not a terminal task state. Only the task owner can read it. The examples below illustrate the response shape:
{
"id": "task_example",
"model": "whisper-1",
"status": "completed",
"output": {
"format": "verbose_json",
"url": "https://static.seedrouter.ai/media/tasks/task_example/0.json"
}
}Download output.url with a separate GET request. Read a JSON artifact as JSON and the other formats as text. Public task responses do not include prices or account details.
Transcription parameters
file and model are required. The nine fields below comprise the shared request surface, including file, model and the explicitly ignored stream. chunking_strategy remains a compatibility gap, as described below.
| Field | Type | Default | Contract |
|---|---|---|---|
file | Binary upload | Required | One nonempty audio file, not a URL or filename string. See file limits. |
model | String | Required | Exactly whisper-1. |
language | String | Automatic detection | Input language hint, such as en. No local language whitelist is imposed. Omit for detection. |
prompt | String | Omitted | Context, spelling or continuation in the audio's language. No character limit is invented; Whisper considers the last 224 tokens of its own tokenizer. This is not a general instruction prompt. |
response_format | String | json | json, text, srt, verbose_json or vtt. |
temperature | Number | 0 | Inclusive range 0–1. Zero allows the model's automatic temperature adjustment; it does not promise deterministic text. |
timestamp_granularities[] | Repeated string | Segment timestamps when applicable | word, segment, or both. Requires response_format=verbose_json. The bare repeated field spelling timestamp_granularities is also accepted. |
chunking_strategy | auto, VAD object or null | Omitted | Shared audio schema field whose Whisper applicability is unresolved. Leave omitted for the verified path. Explicit auto failed live compatibility verification. |
stream | Boolean or null | false | Ignored for Whisper-1. No SSE or partial transcript is produced. |
The VAD object contains required type: "server_vad", optional integer prefix_padding_ms (documented default 300), optional integer silence_duration_ms (documented default 200), and optional numeric threshold from 0 to 1 (documented default 0.5). No undocumented integer range is enforced. An omitted strategy stays omitted; these object defaults do not make auto the request default.
For SDK compatibility, the VAD object can be encoded in one JSON multipart part or as chunking_strategy[type], chunking_strategy[prefix_padding_ms], chunking_strategy[silence_duration_ms] and chunking_strategy[threshold]. Do not mix the two encodings. Acceptance of these field shapes does not establish that VAD works with this model.
Optional text fields use omission, not the literal multipart string null. Unknown and model-inapplicable fields are discarded. In particular, diarized_json, speaker reference controls, logprobs and realtime events are not Whisper-1 features. Duplicate scalar fields are invalid.
File limits
The documented audio formats are FLAC, MP3, MP4, MPEG, MPGA, M4A, OGG, WAV and WebM. The current upload ceiling is 26,214,400 bytes (25 MiB). The OpenAI Audio API FAQ specifies a 25 MiB maximum request size for legacy Whisper-1 uploads; keep files below the ceiling to leave room for multipart fields. Files must contain readable audio and a positive, measurable duration. An extension alone is not proof of valid audio.
There is no additional local one-hour ceiling, fixed sample-rate requirement or mono-only restriction. File size can still require splitting long recordings. Review boundaries between split recordings to avoid omitting or duplicating speech.
English translation
curl https://api.seedrouter.ai/v1/audio/translations \
-H "Authorization: Bearer $SEEDROUTER_API_KEY" \
-F model=whisper-1 \
-F [email protected] \
-F response_format=text \
-F temperature=0Translation has five fields: file, model, prompt, response_format and temperature, with the same types and bounds as above. Its optional prompt should be English. There is no selectable target language. language, timestamp controls, chunking controls and other transcription-only fields are discarded on this endpoint. A successful English-input translation check does not establish accuracy for every source language.
Downloaded artifact fields
| Format | Content |
|---|---|
json | Object with text. Transcription may also include usage: {type: "duration", seconds: number}. |
text | Plain transcript text. |
srt | Numbered subtitle cues with SRT timecodes. |
vtt | WebVTT subtitles. |
verbose_json | text, language and duration in seconds; optional segments and, for transcription, words and duration usage. |
Each word has word, start and end. Each segment has id, seek, start, end, text, tokens, temperature, avg_logprob, compression_ratio and no_speech_prob. start and end are seconds. Segments do not identify speakers. The transcription-only constant task: "transcribe" may be present. Translation artifacts omit transcription-only words and usage. Audio measurements and transcript text are not rewritten to imitate an expected answer.
Billing
Both operations use measured input duration. For each recording, audio metering units equal round(ceil(seconds) × 1000 / 60). Multiply those units by the live unit rate; these units do not count transcript text. For example, 15 seconds yields 250 units, while 15.1 seconds yields 267. The page and Playground read the same live rate. Failed requests are not charged.
Verification status
Checked October 19, 2026. Local end-to-end tests completed all five transcription output formats and a verbose_json translation, including owned result downloads and exact account deductions. A transcription requested both word and segment timestamps successfully. FLAC, OGG, M4A, MP4 and subsecond/fractional WAV uploads passed separate live compatibility checks.
Explicit chunking_strategy=auto was rejected. Three submitted cases involving WebM, MPEG plus VAD, and MPGA plus stream=true did not succeed. These failures do not establish which of their combined settings caused rejection. Those formats and options remain unverified; the service does not silently replace an explicitly requested strategy. The translation test used English input, so cross-language translation quality remains unmeasured. Do not treat the accepted schema as proof that every combination has passed a live test.
Errors and recovery
Invalid file and parameter combinations are refused before task creation. API errors contain a numeric code and a readable message; see error codes. After acceptance, check the task's terminal status. For an uncertain submission, find its existing task before submitting again. A failed task is not charged.
Contract sources
- OpenAI transcription reference
- OpenAI translation reference
- OpenAI speech-to-text guide
- OpenAI Whisper prompting guide
OpenAI has announced a February 26, 2027 shutdown date for Whisper on its own API. That announcement does not establish a shutdown date for this service. See the OpenAI deprecation notice.
