Tutorial
FLUX.3 Video API Guide: Text-to-Video, Keyframes and Continuation
One flux-3 model for three modes, $0.09/s draft previews, curl and Python, pricing tables, and the full input schema.
- Draft / second
- $0.09
- 720p / second
- $0.25
- 1080p / second
- $0.42
TL;DR
- FLUX.3 Video from Black Forest Labs runs on HiAPI under one model id,
flux-3, which covers text-to-video, image-to-video (1–10 keyframes), and video continuation. Clips are 5–20 seconds with synchronized sound by default. Try it on the model page. - Pricing is per second: $0.25 at 720p and $0.42 at 1080p. Draft mode is $0.09 per second, so a 5-second draft preview costs $0.45.
- Turn on
draft: truewhile you test prompts.promptis the only required field, so a bare request is valid and billed at the full rate.
What it produces
The model page example, 720p, 5 seconds, with sound:
A silent maglev train glides through a vast solar-panel field at golden hour, reflective silver body catching warm directional light, low tracking shot alongside the train, distant maintenance drones crossing the sky, cinematic composition, rich cohesive color grade, premium commercial finish, subtle film grain, high dynamic range, smooth natural motion, stable cinematic camera movement, consistent lighting across frames
Generate with this prompt → (5 seconds, 720p)
flux-3 model page example, 720p, 5 seconds, with sound. $1.25 at the standard rate, or $0.45 as a draft.
Pricing
| Mode | 720p / second | 1080p / second |
|---|---|---|
| Standard (text or image input) | $0.25 | $0.42 |
| Draft preview | $0.09 | not available |
Continuation (start_video set) |
$0.59 | $0.76 |
| Draft + continuation | $0.18 | not available |
Live HiAPI prices, checked October 15, 2026. Sound on or off doesn't change the price.
| Duration | Draft 720p | Standard 720p | Standard 1080p |
|---|---|---|---|
| 5 s | $0.45 | $1.25 | $2.10 |
| 10 s | $0.90 | $2.50 | $4.20 |
| 20 s | $1.80 | $5.00 | $8.40 |
A sensible workflow: get the prompt and motion right in draft mode ($0.45 for 5 seconds), then render the final cut at 720p or 1080p.
curl: start with a draft
curl -X POST https://api.hiapi.ai/v1/tasks \
-H "Authorization: Bearer $HIAPI_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-3",
"input": {
"prompt": "A paper airplane glides through a sunlit office in slow motion, the camera following it",
"duration": 5,
"aspect_ratio": "16:9",
"draft": true
}
}'
That's a 5-second draft for $0.45. Poll GET /v1/tasks/{taskId}; when status is success, download output[0].url. The sound is already muxed into the same MP4.
Python: submit, poll, download
# pip install requests; export HIAPI_KEY=your-key
import os, time, uuid, requests
KEY = os.environ["HIAPI_KEY"]
H = {"Authorization": f"Bearer {KEY}"}
def generate(timeout_s=900, **params):
body = {"model": "flux-3", "input": params}
# Reuse the same Idempotency-Key if you retry this submission, so it is billed once
headers = {**H, "Idempotency-Key": str(uuid.uuid4())}
r = requests.post("https://api.hiapi.ai/v1/tasks", json=body, headers=headers, timeout=30)
r.raise_for_status()
res = r.json()
if res.get("code") != 200:
raise RuntimeError(res)
task_id = res["data"]["taskId"]
deadline = time.time() + timeout_s
while time.time() < deadline:
d = requests.get(f"https://api.hiapi.ai/v1/tasks/{task_id}", headers=H, timeout=30).json()["data"]
if d["status"] == "success":
return d["output"][0]["url"]
if d["status"] == "fail":
raise RuntimeError(d)
time.sleep(10)
raise TimeoutError(task_id)
# Final render at 1080p once the draft looks right
url = generate(
prompt="A paper airplane glides through a sunlit office in slow motion, the camera following it",
duration=8, resolution="1080p", aspect_ratio="16:9",
)
with open("clip.mp4", "wb") as f:
f.write(requests.get(url).content)
That 8-second 1080p render costs $3.36.
Image-to-video: one first frame, or up to 10 keyframes
Add images to input (the field is images, not image_urls; image_urls is rejected with HTTP 400). The number of images decides the mode:
- 1 image: the first frame.
- 2 images: first and last frame; the model fills in the transition.
- 3–10 images: a keyframe storyboard, spread evenly across the clip.
{
"model": "flux-3",
"input": {
"prompt": "A smooth cinematic transition from sunrise to a neon-lit night city, stable camera motion",
"images": [
"https://your-cdn.example.com/start.webp",
"https://your-cdn.example.com/end.webp"
],
"resolution": "1080p",
"duration": 8
}
}
PNG, JPEG, and WebP are accepted. Image-to-video costs the same as text-to-video.
Continuation: pick up where a clip ends
Pass start_video and the model continues from the end of that clip:
{
"model": "flux-3",
"input": {
"prompt": "Continue the forward camera move as the train enters a bright mountain tunnel",
"start_video": "https://your-cdn.example.com/source.mp4",
"duration": 5,
"draft": true
}
}
start_videomust be an MP4 of up to 15 seconds and 50 MB.imagesandstart_videocan't be sent together.- Continuation has its own, higher rate: $0.59 per second at 720p, or $0.18 as a draft.
Input schema
| Field | Values | Notes |
|---|---|---|
prompt |
string, required | Scene, action, camera, dialogue, and sound |
duration |
integer 5–20, default 5 | Seconds |
resolution |
720p / 1080p, default 720p |
Draft supports 720p only; draft + 1080p is rejected |
aspect_ratio |
auto 21:9 2:1 16:9 4:3 1:1 3:4 9:16, default auto |
|
draft |
default false |
Low-cost preview |
generate_audio |
default true |
Turn off for a silent video; same price |
images |
up to 10 URLs | Image-to-video |
start_video |
MP4 URL | Continuation |
The schema is strict: unknown fields return HTTP 400 with the field named in the message, for example <root>: additional properties 'image_urls' not allowed or duration: maximum: got 99, want 20.
Before you ship
- Use a callback instead of polling: add
"callback": {"url": "https://your-app.example.com/hiapi/callback"}next toinputand deduplicate bytaskId. - Save the output right away:
output[0].urlis temporary. - Send an
Idempotency-Keyheader: retries with the same key create the task only once and return the originaltaskId. - Failed tasks are refunded.
FAQ
What's the longest FLUX.3 clip?
20 seconds. Use continuation to go further.
Can I turn the sound off? Is it cheaper?
Yes, with generate_audio: false, but it isn't cheaper. Price depends only on resolution, draft mode, and continuation.
How much cheaper is draft mode?
$0.09 versus $0.25 per second at 720p, about 64% less, and it renders faster. Use it for prompt iteration.
Why is there no /text-to-video suffix on the model id?
FLUX.3 puts text-to-video, image-to-video, and continuation in one flux-3 model. Whether you send images or start_video decides the mode.
To try it, generate a clip on the model page. For editing existing footage, see FLUX.3 video editing API.
Related articles
View all articles →-
Tutorial
How to Call hailuo-2.3-fast/image-to-video via the HiAPI API: curl and Python
A first working request for the fast, low-cost image-to-video tier — from model ID to downloaded MP4
9 min read -
Tutorial
How to Use hailuo-2.3/text-to-video via the HiAPI API: curl, Python, and a Working Request
11 min read -
Tutorial
Kandinsky 6.0 Pro Text-to-Video on HiAPI: curl and Python Tutorial
A request-first walkthrough: build the prompt-to-clip call, submit it, poll for completion, and download the result
11 min read