OneProvider
Guides

Video generation

Create a video from text or an image through one API: send the request, poll the status, download the file and see the exact price per second for every model.

Create a video from text or an image: the request, the statuses, the download, and the price per second.

All models, capabilities, and prices Documentation index for AI agents: https://oneprovider.dev/docs/llms.txt

Available video models

kling-3.0 Runnable
720p, no sound
$0.4872 / second
1080p, no sound
$0.6496 / second
720p, with sound
$0.7308 / second
1080p, with sound
$0.9744 / second
720p · 1080p · 5–10s kling-3.0-omni Runnable
720p, no sound
$0.546 / second
1080p, no sound
$0.728 / second
720p, with sound
$0.728 / second
1080p, with sound
$0.91 / second
720p · 1080p · 5–10s kling-3.0-turbo Runnable
720p, sound included
$0.63 / second
1080p, sound included
$0.7875 / second
720p · 1080p · 5–10s

How the workflow works

  1. Send POST /v1/videos/generations with the model, a prompt, and the options. The reply carries a request_id.
  2. Videos are made asynchronously, usually in 1–3 minutes. Check the status every 10 seconds until it is done or failed.
  3. When the status is done, download the file from the path in video.url with the same key.

Request

bash
curl -sS https://api.oneprovider.dev/v1/videos/generations \
-H "Authorization: Bearer $ONEPROVIDER_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "kling-3.0",
"prompt": "A red balloon rises over a quiet harbor at sunrise",
"duration": 5,
"resolution": "720p",
"aspect_ratio": "16:9"
}'
# {"request_id":"task_..."}
Request parameters
FieldValue
modelRequired. A model ID from the table above.
promptRequired. A description of the video.
durationLength in seconds: 5 (default) or 10.
resolution720p (default) or 1080p.
aspect_ratio16:9 (default) or 9:16.
audiotrue adds sound (a higher per-second price). kling-3.0-turbo always includes sound.
imageOne reference image for image-to-video: {"url": "https://…"}. Available in kling-3.0-omni.

A combination that is not in the price table is rejected at once with a 400 error, and nothing is charged.

Status

bash
curl -sS https://api.oneprovider.dev/v1/videos/generations/$REQUEST_ID \
-H "Authorization: Bearer $ONEPROVIDER_KEY"
# {"request_id":"task_...","status":"pending","progress":50}
# {"request_id":"task_...","status":"done","progress":100,
# "video":{"url":"/v1/videos/generations/$REQUEST_ID/content","duration":5}}
Statuses
statusWhat to do
pendingThe video is still being made. Ask again in 10 seconds.
doneReady. Download the file from video.url. video.duration is the length you were charged for.
failedThe video could not be made. Nothing is charged; send the request again.

Download

bash
curl -sS https://api.oneprovider.dev/v1/videos/generations/$REQUEST_ID/content \
-H "Authorization: Bearer $ONEPROVIDER_KEY" \
-o video.mp4

The reply is a video/mp4 file and the Range header is supported. Save the file on your side right away; do not count on the link working forever.

Pricing

You pay per second of video at the rate of the matching row in the table above (resolution and sound). The charge happens once, when the status becomes done; failed or unfinished videos are not charged.

Example: kling-3.0, 720p, no sound, 5 seconds = $0.4872 × 5 = $2.436.

Errors

Error codes
HTTPCause
400An invalid field, or a combination that is not in the price table.
401The key is invalid or revoked.
402 / 403 / 429Insufficient balance or the key limit was reached. Top up and retry.
404No such request_id for this key.
502The video service is temporarily unavailable. Nothing was charged; retry later.
One key for every model Video is paid from the same balance as text. See the full model and price table on the pricing page .

Quick answers

Which base URL do I use?

Claude Code and Anthropic SDKs use https://api.oneprovider.dev. OpenAI SDKs and OpenAI-compatible clients use https://api.oneprovider.dev/v1. One key works behind both; the model list is on the models page ; rates are on the pricing page .

How do I authenticate?

Send the raw sk-… key in x-api-key or Authorization: Bearer: one of them, never both. Keep the key in an environment variable, not in a file that gets committed. More on authentication .

Where do I get a key?

Open your cabinet in the Telegram bot @oneprovider_robot or at app.oneprovider.dev, top up the balance and press “Issue a key”. Each key can carry its own spend limit. Cabinet & API keys .

What do 401, 404 and 429 mean?

401: the key is missing, mistyped or sent in the wrong header; paste the whole key without quotes or spaces. 404: usually a wrong base URL, for example a missing or doubled /v1. 429 with “Insufficient balance”: the cabinet balance or the key’s spend limit is used up, so top up instead of retrying; any other 429 is a rate limit, so wait for Retry-After. Details: error codes and troubleshooting .

Why do streams cut off or reset?

VPN and VLESS proxies often buffer SSE or break HTTP/2 negotiation. OneProvider has no regional restrictions and does not buffer streams, so turn the proxy off and retry.

Where do I ask if this is not enough?

Message @Oneproviderhelpbot on Telegram or open “Support” in the web cabinet, with the HTTP status code and the exact error message. How support works .

Last updated: 2026-10-18 Found a bug? @Oneproviderhelpbot