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
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
kling-3.0-turbo Runnable - 720p, sound included
- $0.63 / second
- 1080p, sound included
- $0.7875 / second
How the workflow works
- Send
POST /v1/videos/generationswith the model, a prompt, and the options. The reply carries arequest_id. - Videos are made asynchronously, usually in 1–3 minutes. Check the status every 10 seconds until it is done or failed.
- When the status is
done, download the file from the path invideo.urlwith the same key.
Request
bashcurl -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_..."} | Field | Value |
|---|---|
model | Required. A model ID from the table above. |
prompt | Required. A description of the video. |
duration | Length in seconds: 5 (default) or 10. |
resolution | 720p (default) or 1080p. |
aspect_ratio | 16:9 (default) or 9:16. |
audio | true adds sound (a higher per-second price). kling-3.0-turbo always includes sound. |
image | One 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
bashcurl -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}} | status | What to do |
|---|---|
pending | The video is still being made. Ask again in 10 seconds. |
done | Ready. Download the file from video.url. video.duration is the length you were charged for. |
failed | The video could not be made. Nothing is charged; send the request again. |
Download
bashcurl -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
| HTTP | Cause |
|---|---|
| 400 | An invalid field, or a combination that is not in the price table. |
| 401 | The key is invalid or revoked. |
| 402 / 403 / 429 | Insufficient balance or the key limit was reached. Top up and retry. |
| 404 | No such request_id for this key. |
| 502 | The video service is temporarily unavailable. Nothing was charged; retry later. |
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