FLUX 3
Black Forest Labs FLUX 3 — one multimodal model for video with native audio, image synthesis and editing. Text-to-video, keyframes, video continuation and a draft-to-finalize loop through one reAPI endpoint.
Video is live; the rest of the family is not. FLUX 3 video generation is
callable now with model: "flux-3-video". Black Forest Labs is still rolling
out the other modalities in phases — image synthesis, action prediction and
the open-weight backbone are separate releases and are not part of this
endpoint.
FLUX 3 is Black Forest Labs' multimodal foundation model: images, video and audio learned jointly inside one architecture built on Self-Flow. It generates video with native audio — up to 20 seconds in a single generation — follows keyframes, reference images, reference clips and existing video-audio, speaks multilingual dialogue, and synthesizes and edits images from the same backbone.
Status
Black Forest Labs' published rollout order, and what reAPI exposes today:
| Stage | Capability | Access |
|---|---|---|
| 1 | FLUX 3 Video — video + audio generation and editing | Live on reAPI as flux-3-video |
| 2 | FLUX 3 Action / FLUX-mimic — action prediction | Selected research + commercial partners |
| 3 | FLUX 3 Image — image synthesis and editing | Early Access announced for the following weeks |
| 4 | FLUX 3 Dev — open-weight multimodal backbone | After the phases above |
Only stage 1 is callable here. Everything documented below is the video endpoint; the other stages will get their own model ids when they ship.
Capabilities
Published by Black Forest Labs for FLUX 3 Video. All outputs carry native audio generation.
- Text-to-video — prompt in, video with sound out.
- Image-to-video — continue from a starting frame ("animation"), or use images as visual references.
- Video continuation — pick a source clip up where it stopped, carrying its audio forward with it.
- Video-audio continuation — extend an existing video and its audio.
- Keyframe-to-video — controlled transitions between defined moments.
- Multilingual dialogue — spoken dialogue across languages.
- Typography — strong text rendering and animated designs inside the frame.
- Draft then finalize — render a cheap low-quality preview, then re-render that exact draft at full quality.
Duration is an integer 5-20 seconds. There is no multi-shot sequencing parameter on this endpoint — 20 seconds is a hard per-request ceiling.
FLUX 3 Image adds synthesis and editing across styles, aspect ratios and resolutions, with high-accuracy text in multiple languages.
Quick example
curl https://reapi.ai/api/v1/videos/generations \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "flux-3-video",
"prompt": "A rain-soaked cafe terrace at dusk, a tram rolls past",
"duration": 10
}'import requests
resp = requests.post(
"https://reapi.ai/api/v1/videos/generations",
headers={
"Authorization": "Bearer YOUR_API_KEY",
"Content-Type": "application/json",
},
json={
"model": "flux-3-video",
"prompt": "A rain-soaked cafe terrace at dusk, a tram rolls past",
"duration": 10,
},
timeout=30,
)
task = resp.json()
print(task["id"])const resp = await fetch('https://reapi.ai/api/v1/videos/generations', {
method: 'POST',
headers: {
Authorization: 'Bearer YOUR_API_KEY',
'Content-Type': 'application/json',
},
body: JSON.stringify({
model: 'flux-3-video',
prompt: 'A rain-soaked cafe terrace at dusk, a tram rolls past',
duration: 10,
}),
});
const task = await resp.json();
console.log(task.id);package main
import (
"bytes"
"encoding/json"
"fmt"
"net/http"
)
func main() {
body, _ := json.Marshal(map[string]any{
"model": "flux-3-video",
"prompt": "A rain-soaked cafe terrace at dusk, a tram rolls past",
"duration": 10,
})
req, _ := http.NewRequest("POST",
"https://reapi.ai/api/v1/videos/generations", bytes.NewReader(body))
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
req.Header.Set("Content-Type", "application/json")
resp, err := http.DefaultClient.Do(req)
if err != nil {
panic(err)
}
defer resp.Body.Close()
var task map[string]any
json.NewDecoder(resp.Body).Decode(&task)
fmt.Println(task["id"])
}Authentication
Every call needs a Bearer token. Generate keys at reapi.ai/settings/apikeys.
Authorization: Bearer YOUR_API_KEYKeys carry the active workspace's billing scope — there is no separate project header.
Endpoint
POST /api/v1/videos/generations
GET /api/v1/tasks/{id}Submission is async. The POST returns immediately with a task_id; the task
endpoint returns the same envelope until completion. Polling does not consume
credits.
Request body
Mode is inferred from the media fields you set — prompt only is
text-to-video, image_urls is keyframes, a video field is continuation — or
you can state it with mode. An explicit mode wins over inference.
| Field | Type | Default | Notes |
|---|---|---|---|
model | string | — | flux-3-video. Required. |
prompt | string | — | Required, except when finalizing a draft, where sending one is an error. |
duration | integer | 5 | Integer seconds, 5-20. "auto" is not supported. |
resolution | string | hd | hd or fhd; 720p / 1080p are accepted aliases. Draft renders at hd only. |
aspect_ratio | string | auto | 21:9, 2:1, 16:9, 4:3, 1:1, 3:4, 9:16, or auto. |
image_urls | string[] | — | 1-10 keyframes. Order is semantic: one image is the start frame, two are start and end, three or more add evenly-spaced middles. Not sorted or deduped. |
video_url | string | — | Public MP4 URL to continue. |
video_urls | string[] | — | Accepted alias for video_url; the first item is used. |
audio | boolean | true | Generated audio. false yields a silent clip and is not cheaper. |
draft | boolean | false | Cheap low-quality preview. hd only; mutually exclusive with draft_from_task_id. |
draft_from_task_id | string | — | Your reAPI task id for a completed draft. Only resolution may differ from that draft — prompt, duration and media are rejected. |
safety_tolerance | integer | 2 | 0-4; higher is more permissive. The playground caps its control at 2; 3 and 4 are API-only. |
mode | string | inferred | t2v, i2v, v2v, draft_enhance, or the long forms text-to-video, image-continuation, video-continuation. Note image-continuation means image-to-video. |
No data: URIs. reAPI rejects base64 inputs platform-wide — every URL
field must be a public HTTP(S) URL. Upload to your own object storage (S3, R2,
OSS, …) and pass the URL.
Response envelope
Submit and poll share the same shape — only status and output fill in over
time.
{
"id": "task_018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e",
"model": "flux-3-video",
"status": "completed",
"created_at": 1735000000,
"output": {
"video_urls": ["https://cdn.reapi.ai/media/tasks/.../0.mp4"]
},
"error": null
}Poll GET /api/v1/tasks/{id} (see the Tasks reference) until
status === "completed". output.video_urls holds the generated MP4 URL —
audio is muxed into that file, not returned separately.
Pricing
FLUX 3 bills per second, and the per-second rate depends on three things together — the mode, the resolution, and whether it is a draft:
| Tier | What triggers it |
|---|---|
| Base | Text-to-video or keyframes at hd |
| Base, fhd | Text-to-video or keyframes at fhd |
| Draft | draft: true (always hd) |
| Continuation | A video field is set, at hd |
| Continuation, fhd | A video field is set, at fhd |
| Continuation draft | draft: true with a video field |
Continuation costs materially more than text-to-video at the same resolution, because the model has to process your source footage. Current rates for every tier are on the model page — that table is dynamic and always reflects the live price.
The bill is:
credits = ceil(per_second_usd × billable_seconds × 1000)where 1 credit = $0.001. Failed jobs are refunded automatically.
Errors
FLUX 3 returns the platform's standard envelope:
{
"error": {
"code": "INVALID_REQUEST",
"message": "duration must be at most 20",
"request_id": "req_01hq2k..."
}
}See the errors catalog for the full code list and retry guidance.