FLUX 3 Max Text to Video API
blackforestlabs/flux-3-max/text-to-videoFLUX 3 Max Text to Video turns a written shot into a 5–20 second 720p or 1080p video with native audio and eight aspect ratios. It follows the camera moves, lighting and sound cues you describe, so one prompt returns picture and audio together.
REST API
Quick Start
Make your first FLUX 3 Max Text to Video request in three steps. The example asks for an 8-second 16:9 shot with sound and returns a task_id.
Connect to the Vidgo API
Create an API key, keep it on your server, and send it in the Authorization header as a Bearer token.
- Endpoint
- POST
https://api.vidgo.ai/api/generate/submit - Authentication
- Authorization: Bearer VIDGO_API_KEY
Submit one generation task
Run the short example with a prompt. Every other field has a default.
curl --request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data '{
"model": "blackforestlabs/flux-3-max/text-to-video",
"input": {
"prompt": "One continuous 8-second shot at dawn on a wind-swept salt flat. A lone kite surfer in a rust-orange wetsuit carves a wide arc across a thin sheet of mirror-still water, spray fanning out behind the board. Camera: low tracking shot that starts beside the board and slowly rises to reveal the pale pink horizon. Lighting: soft low sun, long reflections, gentle haze. Native audio: steady wind, the hiss of the board on water, a single gull far away. No text, no logos, no watermark.",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "16:9",
"sound": true
}
}'Wait for the result
Use the returned task_id to check the same task until it reaches finished or failed. On success, read data.files[].file_url.
Track status
GET https://api.vidgo.ai/api/generate/status/{task_id}Poll every few seconds while the status is not_started or running, and stop on finished or failed. On success, read data.files[].file_url. For longer clips, lengthen the interval gradually or add callback_url to the submit request.
not_startedrunningfinishedfailed{
"code": 200,
"data": {
"task_id": "1WS6SQGB9KFNYIOX",
"status": "not_started",
"created_time": "2026-11-05T07:04:44"
}
}{
"code": 200,
"data": {
"task_id": "1WS6SQGB9KFNYIOX",
"status": "finished",
"files": [
{
"file_url": "https://cdn.vidgo.ai/apis/models/blackforestlabs/flux-3-max/text-to-video/v2/01/output-01.mp4",
"file_type": "video"
}
],
"created_time": "2026-11-05T07:04:44",
"error_message": null,
"progress": 100
}
}Complete runnable example
Open this after the three-step flow is clear. It combines submission, polling, terminal-state handling and result extraction in one script.
set -euo pipefail
: "${VIDGO_API_KEY:?Set VIDGO_API_KEY in your environment}"
REQUEST_BODY=$(cat <<'JSON'
{
"model": "blackforestlabs/flux-3-max/text-to-video",
"input": {
"prompt": "One continuous 8-second shot at dawn on a wind-swept salt flat. A lone kite surfer in a rust-orange wetsuit carves a wide arc across a thin sheet of mirror-still water, spray fanning out behind the board. Camera: low tracking shot that starts beside the board and slowly rises to reveal the pale pink horizon. Lighting: soft low sun, long reflections, gentle haze. Native audio: steady wind, the hiss of the board on water, a single gull far away. No text, no logos, no watermark.",
"duration": 8,
"resolution": "720p",
"aspect_ratio": "16:9",
"sound": true
}
}
JSON
)
SUBMIT_RESPONSE=$(curl --silent --show-error --fail-with-body \
--request POST \
--url "https://api.vidgo.ai/api/generate/submit" \
--header "Authorization: Bearer $VIDGO_API_KEY" \
--header "Content-Type: application/json" \
--data "$REQUEST_BODY")
TASK_ID=$(printf '%s' "$SUBMIT_RESPONSE" | jq -r '.data.task_id // .task_id // empty')
if [ -z "$TASK_ID" ]; then
printf 'Submit response did not include task_id:
%s
' "$SUBMIT_RESPONSE" >&2
exit 1
fi
while true; do
STATUS_RESPONSE=$(curl --silent --show-error --fail-with-body \
--url "https://api.vidgo.ai/api/generate/status/$TASK_ID" \
--header "Authorization: Bearer $VIDGO_API_KEY")
STATUS=$(printf '%s' "$STATUS_RESPONSE" | jq -r '.data.status // .status // empty')
case "$STATUS" in
finished)
printf '%s' "$STATUS_RESPONSE" | jq -r '(.data.files // .files // [])[]?.file_url'
break
;;
failed)
printf '%s' "$STATUS_RESPONSE" | jq -r '.data.error_message // .error_message // "Generation failed"' >&2
exit 1
;;
not_started|running)
sleep 2
;;
*)
printf 'Unexpected task status: %s
' "$STATUS" >&2
exit 1
;;
esac
doneRequest Parameters
model and callback_url belong at the request root; generation parameters belong inside input.
| Field | Type | Required | Default | Description |
|---|---|---|---|---|
| model | string | Yes | — | Fixed to blackforestlabs/flux-3-max/text-to-video. |
| callback_url | string (URL) | No | — | A public HTTP(S) URL that receives the task result when it finishes. |
| input | object | Yes | — | Generation parameters: a prompt plus optional duration, resolution, aspect_ratio and sound. |
| input.prompt | string | Yes | — | Text prompt for the shot, including audio cues when sound is on. |
| input.duration | integer | No | 5 | Whole seconds, 5–20. |
| input.resolution | string | No | 720p | 720p or 1080p. |
| input.aspect_ratio | string | No | auto | auto, 21:9, 2:1, 16:9, 4:3, 1:1, 3:4, 9:16. |
| input.sound | boolean | No | true | Native audio on or off; does not change the price. |
Response Fields
Submission returns the task identity immediately. Status responses add progress, output files or a failure message as the task advances.
| Field | Type | Description |
|---|---|---|
| code | integer | Application result code. Successful responses use 0 or 200. |
| message | string | Human-readable response or error message when present. |
| data.task_id | string | Task identifier used in the status endpoint path. |
| data.status | string | Current state: not_started, running, finished or failed. |
| data.created_time | string | Task creation time in date-time format. |
| data.progress | number | Completion percentage when the provider reports progress. |
| data.files[] | array | Generated output files returned after a successful task. |
| data.files[].file_url | string | Public URL of the generated video. |
| data.files[].file_type | string | Generated file type, such as video. |
| data.files[].watermark_url | string | null | Watermarked output URL when one is available. |
| data.error_message | string | null | Failure detail when status is failed. |
Task Lifecycle
Treat not_started and running as non-terminal states. finished and failed are terminal; stop polling when either is returned.
not_startedThe task has been accepted and is queued to start.
runningThe video is being generated. Keep polling the status endpoint.
finishedThe task is complete. Read the video URL from data.files[].file_url.
failedGeneration failed. Read data.error_message for details and stop polling.
Polling and Errors
- Authentication401 means the Bearer API key is missing or invalid. Check your key in the dashboard before retrying.
- Validation400 means a request field is invalid or belongs to another endpoint. Check prompt, duration and aspect_ratio.
- Polling intervalPoll every few seconds while the task runs, and lengthen the interval gradually for longer clips.
- Terminal statesPoll only while the status is not_started or running. Stop on finished or failed.
- Callback optionAdd callback_url at the request root to receive the final result without continuous polling.
Model Specifications
| Specification | Value | Description |
|---|---|---|
| Model | blackforestlabs/flux-3-max/text-to-video | Model identifier for asynchronous text-to-video generation. |
| Duration | 5–20 | Whole seconds; defaults to 5. |
| Resolution | 720p | 1080p | Defaults to 720p. |
| Aspect ratio | auto | 21:9 | 2:1 | 16:9 | 4:3 | 1:1 | 3:4 | 9:16 | Defaults to auto. |
| Pricing | 34 / 58 credits/s | 720p / 1080p, per output second; audio is included. |
Related Models
FLUX 3 Max Text to Video API FAQ
What is the FLUX 3 Max Text to Video API?
FLUX 3 Max Text to Video is a video model post-trained by fal in collaboration with Black Forest Labs for generating video from text. It turns a prompt into a 5–20 second clip at 720p or 1080p with native audio and eight aspect ratios. Built on the FLUX 3 video base, it keeps the subject, camera path and lighting you describe while adding motion and a matching sound track in the same pass. You can call it programmatically or try it from the playground above.
How does FLUX 3 Max Text to Video handle sound?
Sound is on by default: the model generates an audio track together with the picture, guided by the sounds you describe in the prompt. Set sound to false when you need silent footage for your own score; the price is the same either way.
How long can a FLUX 3 Max Text to Video clip be?
Set duration to any whole number from 5 to 20 seconds; the default is 5. Longer clips work best when the prompt describes how the action or camera develops over time.
How much does FLUX 3 Max Text to Video cost per second?
720p costs 34 credits ($0.17) per output second and 1080p costs 58 credits ($0.29). An 8-second 720p clip is 272 credits; audio does not change the price.
Which aspect ratio does FLUX 3 Max Text to Video use with auto?
With no image to follow, auto renders 16:9. Choose 21:9, 2:1, 4:3, 1:1, 3:4 or 9:16 explicitly when the destination format is fixed.
Should I draft FLUX 3 Max Text to Video at 720p or 1080p?
Iterate on prompt wording at 720p, which costs about 40% less per second, then rerun the approved prompt at 1080p for delivery. Both resolutions accept the same fields.
How is FLUX 3 Max Text to Video different from FLUX 3 Text to Video?
FLUX 3 Max is the post-trained tier of the FLUX 3 video model, tuned by fal for prompt adherence and render speed, and it is billed at the same per-second rates. The FLUX 3 family on Vidgo also offers extend-video and first-last-frame endpoints if your workflow needs them.















