Seedance 2.5 is live — 30-second cinematic video with native audio & real-person references
rreAPI Docs

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:

StageCapabilityAccess
1FLUX 3 Video — video + audio generation and editingLive on reAPI as flux-3-video
2FLUX 3 Action / FLUX-mimic — action predictionSelected research + commercial partners
3FLUX 3 Image — image synthesis and editingEarly Access announced for the following weeks
4FLUX 3 Dev — open-weight multimodal backboneAfter 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_KEY

Keys 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.

FieldTypeDefaultNotes
modelstringflux-3-video. Required.
promptstringRequired, except when finalizing a draft, where sending one is an error.
durationinteger5Integer seconds, 5-20. "auto" is not supported.
resolutionstringhdhd or fhd; 720p / 1080p are accepted aliases. Draft renders at hd only.
aspect_ratiostringauto21:9, 2:1, 16:9, 4:3, 1:1, 3:4, 9:16, or auto.
image_urlsstring[]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_urlstringPublic MP4 URL to continue.
video_urlsstring[]Accepted alias for video_url; the first item is used.
audiobooleantrueGenerated audio. false yields a silent clip and is not cheaper.
draftbooleanfalseCheap low-quality preview. hd only; mutually exclusive with draft_from_task_id.
draft_from_task_idstringYour reAPI task id for a completed draft. Only resolution may differ from that draft — prompt, duration and media are rejected.
safety_toleranceinteger20-4; higher is more permissive. The playground caps its control at 2; 3 and 4 are API-only.
modestringinferredt2v, 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:

TierWhat triggers it
BaseText-to-video or keyframes at hd
Base, fhdText-to-video or keyframes at fhd
Draftdraft: true (always hd)
ContinuationA video field is set, at hd
Continuation, fhdA video field is set, at fhd
Continuation draftdraft: 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.

Table of Contents