CyHUB
РусскийGet an API key

FLUX 3 API

FLUX 3 video with sound up to 20 seconds: from a description, from frames or continuing an existing clip. A draft costs about a third of a full video.

Developer: Black Forest LabsModel key in the API: flux3

For AI assistants:Download .mdAll documentation .mdOpen as text

Connect in three steps

  1. Get a keyCreate a key in the dashboard after you confirm your email. One key opens every model.
  2. Check the pricePOST /v1/price shows the cost of a run in advance, without charging you.
  3. Run a task and collect the resultPOST /v1/tasks starts a task, GET /v1/tasks/{id} shows its status and files.

Ready-to-use code

Replace YOUR_API_KEY with your key. The code starts a task and waits for the result. In cURL, repeat the second request with the id from the first response instead of TASK_ID until status becomes succeeded.

cURL
curl -X POST "https://api.cyhub.ai/v1/tasks" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "flux3",
  "settings": {
    "mode": "t2v",
    "prompt": "Лиса бежит сквозь утренний туман, под лапами хрустят ветки",
    "aspect_ratio": "16:9",
    "duration": 8
  }
}'

curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
  -H "Authorization: Bearer YOUR_API_KEY"
Python
import time

import requests

API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}

body = {
    "model": "flux3",
    "settings": {
        "mode": "t2v",
        "prompt": "Лиса бежит сквозь утренний туман, под лапами хрустят ветки",
        "aspect_ratio": "16:9",
        "duration": 8,
    },
}

response = requests.post(f"{API}/tasks", json=body, headers=HEADERS, timeout=60)
response.raise_for_status()
task = response.json()
while task["status"] in ("queued", "running"):
    time.sleep(5)
    task = requests.get(f"{API}/tasks/{task['id']}", headers=HEADERS, timeout=30).json()
print(task["status"], task["result"])
Node.js
const API = "https://api.cyhub.ai/v1";
const HEADERS = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };

const body = {
  "model": "flux3",
  "settings": {
    "mode": "t2v",
    "prompt": "Лиса бежит сквозь утренний туман, под лапами хрустят ветки",
    "aspect_ratio": "16:9",
    "duration": 8
  }
};

async function main() {
  let response = await fetch(`${API}/tasks`, { method: "POST", headers: HEADERS, body: JSON.stringify(body) });
  if (!response.ok) throw new Error(await response.text());
  let task = await response.json();
  while (task.status === "queued" || task.status === "running") {
    await new Promise((resolve) => setTimeout(resolve, 5000));
    response = await fetch(`${API}/tasks/${task.id}`, { headers: HEADERS });
    task = await response.json();
  }
  console.log(task.status, task.result);
}

main();
Get a key

Price before the run

Prices as of 15.10.2026: from 43 ₽. POST /v1/price shows the exact price of your settings.

ModePrice
From a descriptionfrom 43 ₽
From framesfrom 43 ₽
Video continuation with a 1 s filefrom 86 ₽

Send the same settings to POST /v1/price: the response shows the price of the run without charging you.

cURL
curl -X POST "https://api.cyhub.ai/v1/price" \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  --data '{
  "model": "flux3",
  "settings": {
    "mode": "t2v",
    "prompt": "Лиса бежит сквозь утренний туман, под лапами хрустят ветки",
    "aspect_ratio": "16:9",
    "duration": 8
  }
}'
  • amount_minor: the price of the run in minor units (kopecks for rubles)
  • currency: the wallet currency
  • available_minor: how much your balance has for new tasks right now

Modes

Each mode has its own parameters and examples. The mode is set by the mode field.

From a description

A video from text alone, no files are sent.

Value of the mode field: t2v

Price in this mode from 43 ₽.

Parameters

Model parameters go inside settings. Omitted optional fields take their default values.

promptRequired

What happens in the video: the scene, the camera movement, the sounds. Spoken lines and on-screen text can be described too.

Type: StringMinimum characters: 1Maximum characters: 5000
renderOptional

A full video or a draft. A draft is faster, always HD and costs about a third of a full video. A draft cannot be rebuilt in full quality through the API: a full video is a new generation, and the scene may come out differently.

Type: StringAllowed values: fulldraftDefault: "full"
resolutionOptional

Quality of a full video: HD or Full HD, Full HD costs more. A draft is always HD, this field does not apply to it.

Type: StringAllowed values: hdfhdDefault: "hd"
aspect_ratioOptional

Aspect ratio. Auto: the model picks it itself, from the frames or the source clip.

Type: StringAllowed values: auto21:92:116:94:31:13:49:16Default: "9:16"
audioOptional

With sound or silent. The model writes speech, effects and ambience in the same run, the sound is not billed separately.

Type: StringAllowed values: onoffDefault: "on"
durationOptional

Video length in seconds, 5 to 20. The price is per second, so it grows with the length.

Type: IntegerMinimum: 5Maximum: 20Default: 5

Parameters not listed here are not accepted: the response is 422 unknown_setting.

The API sets these settings itself, do not send them: files_as_is = true

Input

    Request example

    Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

    A video from a description

    JSON
    {
      "model": "flux3",
      "settings": {
        "mode": "t2v",
        "prompt": "Лиса бежит сквозь утренний туман, под лапами хрустят ветки",
        "aspect_ratio": "16:9",
        "duration": 8
      }
    }

    A draft to check the idea

    JSON
    {
      "model": "flux3",
      "settings": {
        "mode": "t2v",
        "prompt": "Бармен подбрасывает шейкер, ловит его за спиной и говорит: «Ваш коктейль»",
        "render": "draft",
        "duration": 6
      }
    }

    The price is calculated when the task is accepted, currency RUB.

    Complete generation example

    Output

    • One MP4 video, 24 frames per second, with sound unless it is turned off.
    • Generation takes 1 to 10 minutes depending on length and quality.
    KindFormatsHow manyNote
    videomp41

    A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

    JSON
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "status": "succeeded",
      "finished_at": "2026-10-01T12:03:41+00:00",
      "result": {
        "caption": "Caption of the result: the model and its settings",
        "texts": [],
        "files_expire_at": "2026-10-08T12:03:41+00:00",
        "files_expired": false,
        "artifacts": [
          {
            "index": 0,
            "kind": "video",
            "filename": "video.mp4",
            "size": 12582912,
            "caption": "",
            "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
          }
        ]
      }
    }
    How to read the result and download files

    From frames

    Your pictures become frames of the video: one opens the clip, two set the start and the end, more than two are spread evenly from start to finish.

    Value of the mode field: i2v

    Price in this mode from 43 ₽.

    Parameters

    Model parameters go inside settings. Omitted optional fields take their default values.

    promptRequired

    What happens in the video: the scene, the camera movement, the sounds. Spoken lines and on-screen text can be described too.

    Type: StringMinimum characters: 1Maximum characters: 5000
    renderOptional

    A full video or a draft. A draft is faster, always HD and costs about a third of a full video. A draft cannot be rebuilt in full quality through the API: a full video is a new generation, and the scene may come out differently.

    Type: StringAllowed values: fulldraftDefault: "full"
    resolutionOptional

    Quality of a full video: HD or Full HD, Full HD costs more. A draft is always HD, this field does not apply to it.

    Type: StringAllowed values: hdfhdDefault: "hd"
    aspect_ratioOptional

    Aspect ratio. Auto by default: the model picks it from your frames.

    Type: StringAllowed values: auto21:92:116:94:31:13:49:16Default: "auto"
    audioOptional

    With sound or silent. The model writes speech, effects and ambience in the same run, the sound is not billed separately.

    Type: StringAllowed values: onoffDefault: "on"
    durationOptional

    Video length in seconds, 5 to 20. The price is per second, so it grows with the length.

    Type: IntegerMinimum: 5Maximum: 20Default: 5
    image_urlsRequired

    One to ten frame URLs, in order.

    Type: List (String, uri)Maximum items: 10

    Parameters not listed here are not accepted: the response is 422 unknown_setting.

    The API sets these settings itself, do not send them: files_as_is = true

    Input

    • Frames are URLs of JPEG, PNG or WebP images, each at least 256 by 256 pixels.
    FieldAcceptsFormatsFilesFile size up to
    image_urlsImagesjpeg, jpg, png, webp10
    How to send files

    Request example

    Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

    Animate a frame

    JSON
    {
      "model": "flux3",
      "settings": {
        "mode": "i2v",
        "prompt": "Камера медленно наезжает, листья шевелятся на ветру",
        "image_urls": [
          "https://example.com/first-frame.jpg"
        ]
      }
    }

    Start and end

    JSON
    {
      "model": "flux3",
      "settings": {
        "mode": "i2v",
        "prompt": "Бутон распускается в цветок, капли росы блестят на солнце",
        "aspect_ratio": "1:1",
        "duration": 6,
        "image_urls": [
          "https://example.com/bud.png",
          "https://example.com/flower.png"
        ]
      }
    }

    The price is calculated when the task is accepted, currency RUB.

    Complete generation example

    Output

    • One MP4 video, 24 frames per second, with sound unless it is turned off.
    • Generation takes 1 to 10 minutes depending on length and quality.
    KindFormatsHow manyNote
    videomp41

    A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

    JSON
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "status": "succeeded",
      "finished_at": "2026-10-01T12:03:41+00:00",
      "result": {
        "caption": "Caption of the result: the model and its settings",
        "texts": [],
        "files_expire_at": "2026-10-08T12:03:41+00:00",
        "files_expired": false,
        "artifacts": [
          {
            "index": 0,
            "kind": "video",
            "filename": "video.mp4",
            "size": 12582912,
            "caption": "",
            "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
          }
        ]
      }
    }
    How to read the result and download files

    Video continuation

    The model continues your clip from its last frames. The source is not part of the result. Noticeably more expensive than the other modes.

    Value of the mode field: v2v

    Price in this mode from 86 ₽, with a 1 s file.

    Parameters

    Model parameters go inside settings. Omitted optional fields take their default values.

    promptRequired

    What happens in the video: the scene, the camera movement, the sounds. Spoken lines and on-screen text can be described too.

    Type: StringMinimum characters: 1Maximum characters: 5000
    renderOptional

    A full video or a draft. A draft is faster, always HD and costs about a third of a full video. A draft cannot be rebuilt in full quality through the API: a full video is a new generation, and the scene may come out differently.

    Type: StringAllowed values: fulldraftDefault: "full"
    resolutionOptional

    Quality of a full video: HD or Full HD, Full HD costs more. A draft is always HD, this field does not apply to it.

    Type: StringAllowed values: hdfhdDefault: "hd"
    aspect_ratioOptional

    Aspect ratio. Auto by default: the continuation keeps the aspect ratio of the source clip, so the join is clean.

    Type: StringAllowed values: auto21:92:116:94:31:13:49:16Default: "auto"
    audioOptional

    With sound or silent. The model writes speech, effects and ambience in the same run, the sound is not billed separately.

    Type: StringAllowed values: onoffDefault: "on"
    durationOptional

    Video length in seconds, 5 to 15. The price is per second, so it grows with the length.

    Type: IntegerMinimum: 5Maximum: 15Default: 5
    video_urlsRequired

    One URL of the MP4 clip to continue.

    Type: List (String, uri)Maximum items: 1

    Parameters not listed here are not accepted: the response is 422 unknown_setting.

    The API sets these settings itself, do not send them: files_as_is = true

    Input

    • The clip is a URL of an MP4 file up to 50 MB and no longer than 60 seconds. It is sent whole, there is no trimming: cut it beforehand if needed.
    FieldAcceptsFormatsFilesFile size up to
    video_urlsVideomp4150 MB
    How to send files

    Request example

    Send this JSON to POST /v1/tasks with your API key. To check the price first, send the same JSON to POST /v1/price.

    Continue a clip

    JSON
    {
      "model": "flux3",
      "settings": {
        "mode": "v2v",
        "prompt": "Машина уходит в поворот, из-под колёс летит гравий, камера догоняет её",
        "duration": 5,
        "video_urls": [
          "https://example.com/clip.mp4"
        ]
      }
    }

    The price is calculated when the task is accepted, currency RUB.

    Complete generation example

    Output

    • One MP4 video, 24 frames per second, with sound unless it is turned off.
    • Generation takes 1 to 10 minutes depending on length and quality.
    KindFormatsHow manyNote
    videomp41

    A finished task as GET /v1/tasks/{id} returns it (some fields left out). The caption may sit on the task or on a single file and may be empty; the model picks the file name.

    JSON
    {
      "id": "7c9e6679-7425-40de-944b-e07fc1f90ae7",
      "status": "succeeded",
      "finished_at": "2026-10-01T12:03:41+00:00",
      "result": {
        "caption": "Caption of the result: the model and its settings",
        "texts": [],
        "files_expire_at": "2026-10-08T12:03:41+00:00",
        "files_expired": false,
        "artifacts": [
          {
            "index": 0,
            "kind": "video",
            "filename": "video.mp4",
            "size": 12582912,
            "caption": "",
            "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
          }
        ]
      }
    }
    How to read the result and download files

    See also

    Try FLUX 3 through the API

    One key opens every CyHUB model. Payment in rubles, and you see the price before the run.

    Get an API key