Openai Whisper With Video API Documentation
Playground
Try it on WaveSpeedAI!OpenAI Whisper Large v3 (Video-to-Text) delivers high-accuracy multilingual transcription directly from video files, with automatic language detection and optional timestamped, subtitle-ready segments. Built for stable production use with a ready-to-use REST API, fast response, no cold starts, and predictable pricing.
Features
OpenAI Whisper — Video-to-Text is a production-ready speech recognition endpoint powered by Whisper large-v3. It transcribes or translates speech directly from video files by extracting audio and returning clean, readable text, with optional word-level timestamps for subtitle and alignment workflows.
Built for stable production use with a ready-to-use REST API, no cold starts, and predictable pay-per-second pricing.
Key capabilities
- Video input support (audio is extracted automatically)
- Two tasks: transcribe and translate
- Language selection: auto detection or manual language code
- Optional word-level timestamps via enable_timestamps
- Optional sync response via enable_sync_mode (API only)
Parameters
| Parameter | Required | Description |
|---|---|---|
| video | Yes | Input video (upload or public URL). |
| language | No | Language code or auto (default). |
| task | No | transcribe or translate. |
| enable_timestamps | No | Generate word-level timestamps (may increase processing time). |
| prompt | No | Short guidance text to steer transcription/translation style. |
| enable_sync_mode | No | API only: wait for result and return it directly in the response. |
How to use
- Upload video (or paste a public video URL).
- Set language:
- Use auto for most cases.
- Choose a specific language code if detection is unstable.
- Choose task:
- transcribe for same-language transcription
- translate for translated output
- (Optional) Enable enable_timestamps if you need subtitle timing/alignment.
- (Optional) Add a prompt to guide formatting or terminology (names, jargon, punctuation).
- Run and read the transcript output.
API note: enable_sync_mode is not shown as a normal UI option; it’s only available through the API.
Pricing
| Mode | enable_timestamps | Price per second |
|---|---|---|
| Standard | false | $0.001 / s |
| Timestamped | true | $0.002 / s |
Examples
| Video length | Standard | Timestamped |
|---|---|---|
| 60s | $0.06 | $0.12 |
| 600s (10 min) | $0.60 | $1.20 |
Notes
- If you use a URL, it must be publicly accessible; the UI showing a preview thumbnail is a good sanity check.
- Timestamps are best for subtitles and editing, but may take longer to process.
- For best accuracy, use clear speech and minimize background music/noise.
More Models to Try
- OpenAI Whisper Turbo on WaveSpeedAI — Faster, cost-efficient speech-to-text for real-time or high-volume transcription pipelines while keeping strong multilingual recognition quality.
Duration limit
The maximum supported video duration is 10 minutes. Longer video is automatically trimmed to 10 minutes before processing.
Authentication
For authentication details, please refer to the Authentication Guide.
API Endpoints
Submit Task & Query Result
set -euo pipefail
export WAVESPEED_API_KEY="your-api-key"
REQUEST_BODY=$(cat <<'JSON'
{
"video": "https://interactive-examples.mdn.mozilla.net/media/cc0-videos/flower.mp4",
"language": "auto",
"task": "transcribe",
"enable_timestamps": false
}
JSON
)
# 1. Submit the prediction.
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
-X POST "https://api.wavespeed.ai/api/v3/wavespeed-ai/openai-whisper-with-video" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}" \
-H "Content-Type: application/json" \
-d "${REQUEST_BODY}")
TASK=$(printf '%s' "${SUBMIT_RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
PREDICTION_ID=$(printf '%s' "${TASK}" | jq -r '.id // empty')
if [ -z "${PREDICTION_ID}" ]; then
printf 'Submission response did not contain a prediction id
' >&2
exit 1
fi
RESULT_URL=$(printf '%s' "${TASK}" | jq -r '.urls.get // empty')
if [ -z "${RESULT_URL}" ]; then RESULT_URL="https://api.wavespeed.ai/api/v3/predictions/${PREDICTION_ID}/result"; fi
# 2. Poll until the prediction finishes.
while true; do
RESPONSE=$(curl --silent --show-error --fail-with-body \
"${RESULT_URL}" \
-H "Authorization: Bearer ${WAVESPEED_API_KEY}")
RESULT=$(printf '%s' "${RESPONSE}" | jq 'if type == "object" and has("data") then .data else . end')
STATUS=$(printf '%s' "${RESULT}" | jq -r '.status // empty')
case "${STATUS}" in
completed) printf '%s\n' "${RESULT}" | jq '.outputs'; break ;;
failed|cancelled|timeout) printf '%s\n' "${RESULT}" | jq . >&2; exit 1 ;;
created|processing) sleep 2 ;;
*) printf 'Unexpected status: %s
' "${STATUS}" >&2; exit 1 ;;
esac
doneParameters
Task Submission Parameters
Request Parameters
| Parameter | Type | Required | Default | Range | Description |
|---|---|---|---|---|---|
| video | string | Yes | - | Video file or URL to transcribe. Provide an HTTPS URL or upload a video file. Audio will be extracted for transcription. | |
| language | string | No | auto | auto, af, am, ar, as, az, ba, be, bg, bn, bo, br, bs, ca, cs, cy, da, de, el, en, es, et, eu, fa, fi, fo, fr, gl, gu, ha, haw, he, hi, hr, ht, hu, hy, id, is, it, ja, jw, ka, kk, km, kn, ko, la, lb, ln, lo, lt, lv, mg, mi, mk, ml, mn, mr, ms, mt, my, ne, nl, nn, no, oc, pa, pl, ps, pt, ro, ru, sa, sd, si, sk, sl, sn, so, sq, sr, su, sv, sw, ta, te, tg, th, tk, tl, tr, tt, uk, ur, uz, vi, yi, yo, zh, yue | Language spoken in the audio. Set to 'auto' for automatic language detection (default). |
| task | string | No | transcribe | transcribe, translate | The task to perform. 'transcribe' to the source language or 'translate' to English. |
| enable_timestamps | boolean | No | false | - | Enable to generate word-level timestamps for the transcription. Note: This may increase processing time. |
| prompt | string | No | - | An optional text to provide as a prompt to guide the model's style or continue a previous audio segment. The prompt should be in the same language as the audio. | |
| enable_sync_mode | boolean | No | false | - | If set to `true`, the request attempts to wait for the generated result and return outputs in the same response. If the result is not ready within the sync wait window, the API can return a timeout body while the task continues processing. This option is only available via the API and is supported only by some models. |
Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data.id | string | Unique identifier for the prediction, Task Id |
| data.model | string | Model ID used for the prediction |
| data.outputs | array | Output values, usually URL strings; some models return text strings or structured result objects (empty when status is not completed) |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to retrieve the prediction result |
| data.status | string | Status of the task: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created (e.g., “2023-04-01T12:34:56.789Z”) |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |
Result Request Parameters
| Parameter | Type | Required | Default | Description |
|---|---|---|---|---|
| id | string | Yes | - | Task ID |
Result Response Parameters
| Parameter | Type | Description |
|---|---|---|
| code | integer | HTTP status code (e.g., 200 for success) |
| message | string | Status message (e.g., “success”) |
| data | object | The prediction data object containing all details |
| data.id | string | Unique identifier for the prediction |
| data.model | string | Model ID used for the prediction |
| data.outputs | array<string | object> | Array of generated outputs (empty when status is not completed). Items are usually URL strings, but may be text strings or structured result objects, depending on the model. |
| data.urls | object | Object containing related API endpoints |
| data.urls.get | string | URL to poll for the prediction result |
| data.status | string | Status: created, processing, completed, or failed |
| data.created_at | string | ISO timestamp of when the request was created |
| data.error | string | Error message (empty if no error occurred) |
| data.timings | object | Object containing timing details |
| data.timings.inference | integer | Inference time in milliseconds |