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

Seedream 5.0 PRO API

Seedream 5.0 PRO images from a prompt and reference pictures (up to 10), 1K or 2K quality. It also splits a picture into layers with transparency and edits a PNG with a transparent background keeping the transparency.

Developer: ByteDanceModel key in the API: seedream

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": "seedream",
  "settings": {
    "mode": "5.0_pro",
    "prompt": "Горный хребет на рассвете, туман в долинах",
    "aspect_ratio": "21:9",
    "quality": "2K"
  }
}'

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": "seedream",
    "settings": {
        "mode": "5.0_pro",
        "prompt": "Горный хребет на рассвете, туман в долинах",
        "aspect_ratio": "21:9",
        "quality": "2K",
    },
}

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": "seedream",
  "settings": {
    "mode": "5.0_pro",
    "prompt": "Горный хребет на рассвете, туман в долинах",
    "aspect_ratio": "21:9",
    "quality": "2K"
  }
};

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 9 ₽. POST /v1/price shows the exact price of your settings.

ModePrice
Seedream 5.0 PROfrom 9 ₽
Split into layersfrom 55 ₽
Edit keeping transparencyfrom 9 ₽

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": "seedream",
  "settings": {
    "mode": "5.0_pro",
    "prompt": "Горный хребет на рассвете, туман в долинах",
    "aspect_ratio": "21:9",
    "quality": "2K"
  }
}'
  • 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.

Seedream 5.0 PRO

The newest version: 1K or 2K quality, up to 10 references. Every reference after the first one adds a little to the price.

Value of the mode field: 5.0_pro

Price in this mode from 9 ₽.

Parameters

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

promptRequired

What to draw, or what to do with the reference images.

Type: StringMinimum characters: 1Maximum characters: 5000
image_urlsOptional

Reference image URLs, up to 10. Without them the image is drawn from the prompt alone.

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

Aspect ratio.

Type: StringAllowed values: 1:12:33:23:44:39:1616:921:9Default: "9:16"
qualityOptional

Image quality: 1K or 2K. The price depends on it.

Type: StringAllowed values: 1K2KDefault: "1K"
output_formatOptional

Result file format.

Type: StringAllowed values: pngjpegDefault: "png"

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

The API sets these settings itself, do not send them: model_version = "5.0_pro"

Input

  • References are URLs of JPEG, PNG, WebP, BMP, TIFF or GIF images, up to 30 MB each.
  • Each picture has both sides longer than 14 pixels, an area of at most 6000×6000 pixels, and one side at most 16 times longer than the other.
FieldAcceptsFormatsFilesFile size up to
image_urlsImagesjpeg, jpg, png, webp, bmp, tiff, tif, gif1030 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.

Wide image in 2K

JSON
{
  "model": "seedream",
  "settings": {
    "mode": "5.0_pro",
    "prompt": "Горный хребет на рассвете, туман в долинах",
    "aspect_ratio": "21:9",
    "quality": "2K"
  }
}

A character from a reference

JSON
{
  "model": "seedream",
  "settings": {
    "mode": "5.0_pro",
    "prompt": "Этот персонаж на обложке журнала о путешествиях",
    "image_urls": [
      "https://example.com/character.png"
    ],
    "aspect_ratio": "3:4"
  }
}

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

Complete generation example

Output

  • One image per run in the chosen format.
KindFormatsHow manyNote
imagepng, jpg1The format is set by output_format.

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": "image",
        "filename": "image.png",
        "size": 1843200,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
      }
    ]
  }
}
How to read the result and download files

Split into layers

Version 5.0 PRO takes one picture apart: the base without the extracted elements and every noticeable element as its own PNG with transparency. The model decides how many parts come out. The price shown is the ceiling, the charge covers only the files that come back.

Value of the mode field: layers

Price in this mode from 55 ₽.

Parameters

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

image_urlsRequired

One URL of the picture to split.

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

What to take out, in words, for example "the cat and the caption on top". A part can also be pointed at with a frame <bbox>x1 y1 x2 y2</bbox>: the top left and bottom right corners in fractions of the picture from 0 to 1000. Without a description the model finds every noticeable element itself.

Type: StringMaximum characters: 5000
qualityOptional

Size of the base and the layers. 1K and 1.5K cost the same, 1.5K gives larger files. 2K costs more.

Type: StringAllowed values: 1K1.5K2KDefault: "1.5K"
output_formatOptional

Format of the base. Layers are always PNG.

Type: StringAllowed values: pngjpegDefault: "png"

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

The API sets these settings itself, do not send them: model_version = "5.0_pro" layer_decomposition = true

Input

  • One JPEG or PNG picture up to 30 MB, with an area from 512×512 to 6000×6000 pixels and one side at most 16 times longer than the other.
FieldAcceptsFormatsFilesFile size up to
image_urlsImagesjpeg, jpg, png130 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.

Split the whole picture

JSON
{
  "model": "seedream",
  "settings": {
    "mode": "layers",
    "image_urls": [
      "https://example.com/poster.png"
    ]
  }
}

Take out the named elements

JSON
{
  "model": "seedream",
  "settings": {
    "mode": "layers",
    "image_urls": [
      "https://example.com/poster.png"
    ],
    "prompt": "Кот и надпись сверху",
    "quality": "2K"
  }
}

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

Complete generation example

Output

  • The base as an image and a ZIP archive: the base, every layer as its own PNG with transparency, the frame assembled from the layers and a list of layers named by the model.
  • There are from one to sixteen layers.
KindFormatsHow manyNote
imagepng, jpg1The base; the format is set by output_format.
documentzip1An archive: the base, every layer as its own PNG, the frame assembled from the layers and the list of layers.

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": "image",
        "filename": "image.png",
        "size": 1843200,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
      },
      {
        "index": 1,
        "kind": "document",
        "filename": "result.zip",
        "size": 2097152,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/1"
      }
    ]
  }
}
How to read the result and download files

Edit keeping transparency

Version 5.0 PRO edits a PNG picture with a transparent background and keeps the transparency. An ordinary photo cannot be made transparent this way: splitting into layers is for that.

Value of the mode field: keep_transparency

Price in this mode from 9 ₽.

Parameters

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

promptRequired

What to change in the picture.

Type: StringMinimum characters: 1Maximum characters: 5000
image_urlsRequired

One URL of a PNG that already has transparent areas.

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

Aspect ratio.

Type: StringAllowed values: 1:12:33:23:44:39:1616:921:9Default: "9:16"
qualityOptional

Image quality: 1K or 2K. The price depends on it.

Type: StringAllowed values: 1K2KDefault: "1K"

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

The API sets these settings itself, do not send them: model_version = "5.0_pro" keep_transparency = true output_format = "png"

Input

  • One PNG picture up to 30 MB that already has transparent areas.
  • Each picture has both sides longer than 14 pixels, an area of at most 6000×6000 pixels, and one side at most 16 times longer than the other.
FieldAcceptsFormatsFilesFile size up to
image_urlsImagespng130 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.

Recolor a logo without a background

JSON
{
  "model": "seedream",
  "settings": {
    "mode": "keep_transparency",
    "prompt": "Сделай логотип синим, форму не меняй",
    "image_urls": [
      "https://example.com/logo.png"
    ],
    "aspect_ratio": "1:1"
  }
}

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

Complete generation example

Output

  • One PNG image with a transparent background.
KindFormatsHow manyNote
imagepng1

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": "image",
        "filename": "image.png",
        "size": 1843200,
        "caption": "",
        "download_path": "/v1/tasks/7c9e6679-7425-40de-944b-e07fc1f90ae7/artifacts/0"
      }
    ]
  }
}
How to read the result and download files

See also

Try Seedream 5.0 PRO through the API

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

Get an API key