FLUX 3 Video
Black Forest Labs' FLUX 3 Video: video with native audio up to 20 seconds from text or keyframes, 720p and 1080p.
First request
import time, requests
BASE, KEY = "https://api.altrouter.ai/v1", "ar-..."
h = {"Authorization": f"Bearer {KEY}"}
# 1. запускаем рендер - ответ приходит сразу, со статусом queued
job = requests.post(f"{BASE}/videos", headers=h, json={
"model": "flux-3-video",
"prompt": "a drone shot over a coastline",
}).json()
# 2. опрашиваем, пока не готово (рендер занимает минуты)
while job["status"] in ("queued", "in_progress"):
time.sleep(10)
job = requests.get(f"{BASE}/videos/{job['id']}", headers=h).json()
print(job["url"])// Видео асинхронное: создать рендер, затем опрашивать статус.
const BASE = "https://api.altrouter.ai/v1";
const h = { Authorization: `Bearer ${process.env.ALTROUTER_API_KEY}`, "Content-Type": "application/json" };
let job = await fetch(`${BASE}/videos`, {
method: "POST",
headers: h,
body: JSON.stringify({ model: "flux-3-video", prompt: "a drone shot over a coastline" }),
}).then((r) => r.json());
while (job.status === "queued" || job.status === "in_progress") {
await new Promise((r) => setTimeout(r, 10_000));
job = await fetch(`${BASE}/videos/${job.id}`, { headers: h }).then((r) => r.json());
}
console.log(job.url);curl https://api.altrouter.ai/v1/videos \
-H "Authorization: Bearer ar-..." \
-H "Content-Type: application/json" \
-d '{
"model": "flux-3-video",
"prompt": "a drone shot over a coastline"
}'
# → { "id": "vid_...", "status": "queued" } - готовность опрашивается
# через GET https://api.altrouter.ai/v1/videos/{id}The interface is OpenAI-compatible: in existing code only the base_url, the key and the model id change — nothing else.
FLUX 3 Video against its price neighbours
| Model | Price | Unit | Discount | |
|---|---|---|---|---|
| Wan 3.0 PrimeAlibaba | $0.14 | second | — | Open |
| Vidu Q3Vidu | $0.16 | second | — | Open |
| FLUX 3 Videothis pageBlack Forest | $0.18 | second | — | |
| Veo 3.1 FastGoogle | $0.97 | clip | −19% | Open |
| Seedance 2.5ByteDance | $0.39 | second | −17% | Open |
Prices and parameters come from the same catalog as the price above; this is not a benchmark, it is comparable billing terms.
Limits
Rendering is asynchronous: POST /v1/videos returns immediately in queued and you poll GET /v1/videos/{id}. Funds are held when the job is created and captured only for a completed render — a failed one is not charged. At $0.18 per second, length multiplies the bill directly.
There is no subscription: every successful request is billed at the price above, and a failed one is not billed at all. There is no markup over the vendor's official price. No Black Forest account of your own is needed, and no VPN: requests go to api.altrouter.ai and we make the upstream call.
Rate limiting is shared across models and counted per key: 600 requests per minute by default, and a 429 with retry-after: 60 above it. An individual key can get its own limit and a spending cap per day, week, month or lifetime in the dashboard.
When to pick FLUX 3 Video, and when a neighbour
The cheaper neighbour is Vidu Q3: $0.16 per second of video against $0.18 for FLUX 3 Video. On the same volume the bill comes out 1.1× smaller. It is the sensible pick where the task is repetitive and high-volume — labelling, classification, short templated answers — the kind of work where quality is bounded by the prompt rather than the model.
The dearer neighbour is Veo 3.1 Fast: $0.97 per clip, or 5.4× the price. On catalog parameters it offers the same capabilities and the same order of context, so the premium is only justified if FLUX 3 Video falls short on your own task.
Guessing is more expensive than checking: the table above is prices and parameters, not a benchmark, and it cannot tell you which model does better on your own prompt. Switching costs one line — the model id in the request changes, the base_url and the key stay — so running both on your own data takes minutes.
An asynchronous endpoint: the call returns immediately in queued, and you poll GET /v1/videos/{id} for the result. The finished mp4 is re-hosted on our CDN, and only a completed render is charged.
/v1/videosThe same object comes back from GET /v1/videos/{id}; the finished file is also served directly from GET /v1/videos/{id}/content.