HiAPI
Blog

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.

Aug 21, 2026
FLUX.3 Video API Guide: Text-to-Video, Keyframes and Continuation
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: true while you test prompts. prompt is 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_video must be an MP4 of up to 15 seconds and 50 MB.
  • images and start_video can'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 to input and deduplicate by taskId.
  • Save the output right away: output[0].url is temporary.
  • Send an Idempotency-Key header: retries with the same key create the task only once and return the original taskId.
  • 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 →

Start building with persistent AI artifacts

Get your API key and call image, video and audio models through one task-based API.

Read the API docs