On this page
- Short answer
- Generate your first image in five steps
- Seedream image models on the API
- What is the Seedream image API?
- Which Seedream model should you use through the API?
- What goes in a /v1/images request?
- How do you call the Seedream API with curl?
- How do you generate an image from Node.js?
- How do you generate an image from Python?
- Can you edit an existing image with the API?
- How do you turn a generated image into a video?
- Should you poll or use webhooks?
- How is the Seedream API billed?
- What errors and limits should you plan for?
- Frequently asked questions
Short answer
The Seedream image API on KreatorFlow is one endpoint, POST /v1/images: send a model alias, a prompt and optional reference images, then poll the job or wait for a webhook and download the file. As of 17 October 2026 an image costs $0.05 to $0.10 (1 or 2 tokens) from prepaid tokens, with up to 14 reference images on Seedream 4.5.
Get started
Generate your first image in five steps
- 1
Create an API key and top up
In the developer console, create a key with the images:create and jobs:read scopes and buy prepaid tokens (1 token = $0.05, top-ups from $20). Keep the key on your server in an environment variable.
- 2
Pick a model alias
GET /v1/models lists every alias with its limits. kreator-image-pro runs Seedream 4.5, the default choice for product and character stills. kreator-image-fast runs Seedream 5.0 Lite for cheaper drafts.
- 3
POST the prompt to /v1/images
Send model, prompt, ratio and resolution as JSON with an Idempotency-Key header, so a retry on your side never bills a second image.
- 4
Wait for the job
The create call returns data.job straight away. Poll GET /v1/jobs/{job_id} until it is completed, failed, canceled or blocked, or pass webhook_url and let the result come to you.
- 5
Download and store the file
Fetch GET /v1/jobs/{job_id}/output with the same API key and save the image in your own storage. The output link has an expiry time, so do not hot-link it.
Seedream image models on the API
Every image model the API offers as of 17 October 2026, with the per-image price from the quote that bills the job.
| Alias | Model | Price per image | Resolution | Max reference images | Max prompt characters |
|---|---|---|---|---|---|
| kreator-image-fast | Seedream 5.0 Lite | $0.05 (1 token) | standard (2K) | 4 | 4,000 |
| kreator-image-pro | Seedream 4.5 | $0.10 (2 tokens) | standard (2K) or high (4K) | 14 | 8,000 |
| kreator-image-seedream-5-pro | Seedream 5.0 Pro | $0.10 (2 tokens) | standard (2K) | 10 | 8,000 |
| kreator-image-seedream-5-flash | Seedream 5.0 Flash | $0.05 (1 token) | standard (2K) | 10 | 4,000 |
What is the Seedream image API?
It is a REST endpoint that runs ByteDance's Seedream image models for your app. You send JSON to https://kreatorflow.ai/v1/images with a Bearer API key, and KreatorFlow returns a job you can track. KreatorFlow is an official BytePlus partner, and the models run on BytePlus.
Image and video share the same design: the same key, the same job object, the same GET /v1/jobs/{job_id} status call and the same signed webhooks. Once images work, adding Seedance video is a new model alias and a few extra fields, not a new integration.
Prices are per finished image, not per pixel: Seedream 5.0 Lite costs $0.05, Seedream 4.5 costs $0.10, Seedream 5.0 Pro costs $0.10 and Seedream 5.0 Flash costs $0.05. The price does not change with the aspect ratio or the resolution you ask for.
Which Seedream model should you use through the API?
Use Seedream 4.5 (kreator-image-pro) for finished stills: product shots, character portraits and anything that has to match reference images. It takes up to 14 references and is the only alias with a high setting, which returns 4K.
Use Seedream 5.0 Lite (kreator-image-fast) for drafts, thumbnails and high-volume variants at $0.05 an image. It takes up to 4 references and 4,000 characters of prompt.
Use Seedream 5.0 Pro (kreator-image-seedream-5-pro) when fine detail matters most: $0.10 an image, up to 10 references, output at 2K.
Seedream 5.0 Flash (kreator-image-seedream-5-flash) is the low-cost option of the 5.0 family at $0.05 an image, for high-volume variants.
Not sure? Start on the cheaper alias while you tune the prompt, then switch the model field for the final render. Nothing else in the request has to change.
What goes in a /v1/images request?
Only model and prompt are required. Everything else has a default.
- model: an image alias from the table above (GET /v1/models lists the ones switched on for your account).
- prompt: what to make, up to the model's prompt limit. A request without a prompt is refused with prompt_required.
- ratio (or aspect_ratio): one of 1:1, 4:5, 3:4, 9:16, 16:9 or 21:9, depending on the model. Defaults to 1:1.
- resolution: standard (2K) on every alias, or high (4K) on Seedream 4.5.
- references: image references as objects ({ "type": "image_url", "url": "https://..." }), or public URLs in reference_image_urls, or your own uploads in reference_image_upload_ids.
- character_ids: saved characters from POST /v1/characters, to keep a face or design the same across images.
- webhook_url (or callback_url): an HTTPS address to receive the finished job.
- Idempotency-Key header (or idempotency_key in the body): makes retries safe.
- safety_identifier: an optional hashed id of your end user, useful for abuse reports.
How do you call the Seedream API with curl?
Set KREATORFLOW_API_KEY in your shell, then send the request below. The response has success: true and the job in data.job, with its id, its status and the quoted token cost.
curl
curl https://kreatorflow.ai/v1/images \ -H "Authorization: Bearer $KREATORFLOW_API_KEY" \ -H "Content-Type: application/json" \ -H "Idempotency-Key: product-shot-0001" \ -d '{ "model": "kreator-image-pro", "prompt": "Studio product photo of a matte black water bottle on wet slate, soft rim light, shallow depth of field", "ratio": "4:5", "resolution": "standard" }'
How do you generate an image from Node.js?
This function creates the job, polls every three seconds until it ends and returns the image bytes. Most images finish quickly, but keep the loop rather than assuming a fixed time.
Node.js (18+)
const KEY = process.env.KREATORFLOW_API_KEY; const headers = { Authorization: `Bearer ${KEY}`, "Content-Type": "application/json" }; async function generateImage(prompt) { const created = await fetch("https://kreatorflow.ai/v1/images", { method: "POST", headers: { ...headers, "Idempotency-Key": crypto.randomUUID() }, body: JSON.stringify({ model: "kreator-image-pro", prompt, ratio: "1:1", resolution: "standard" }), }).then((r) => r.json()); if (!created.success) throw new Error(created.code + ": " + created.error); let job = created.data.job; while (!["completed", "failed", "canceled", "blocked"].includes(job.status)) { await new Promise((resolve) => setTimeout(resolve, 3000)); job = (await fetch(`https://kreatorflow.ai/v1/jobs/${job.id}`, { headers }).then((r) => r.json())).data.job; } if (job.status !== "completed") throw new Error(job.errorCode ?? job.status); // The file is behind your key: fetch it and keep your own copy. const file = await fetch(`https://kreatorflow.ai/v1/jobs/${job.id}/output`, { headers }); return Buffer.from(await file.arrayBuffer()); }
How do you generate an image from Python?
The same flow with the requests library. In production, add a time limit to the loop and handle a 429 response by waiting for the seconds in its Retry-After header.
Python
import os, time, uuid, requests KEY = os.environ["KREATORFLOW_API_KEY"] H = {"Authorization": f"Bearer {KEY}"} created = requests.post( "https://kreatorflow.ai/v1/images", headers={**H, "Idempotency-Key": str(uuid.uuid4())}, json={"model": "kreator-image-pro", "prompt": "Isometric illustration of a tiny coffee shop at dawn", "ratio": "16:9"}, ).json() job = created["data"]["job"] while job["status"] not in ("completed", "failed", "canceled", "blocked"): time.sleep(3) job = requests.get(f"https://kreatorflow.ai/v1/jobs/{job['id']}", headers=H).json()["data"]["job"] if job["status"] == "completed": image = requests.get(f"https://kreatorflow.ai/v1/jobs/{job['id']}/output", headers=H) open("coffee-shop.png", "wb").write(image.content)
Can you edit an existing image with the API?
Yes, with the same endpoint. Send the picture as a reference and describe the change in the prompt: swap the background, change the lighting, restyle the scene or put a product in a new setting. Seedream 4.5 is built for this kind of reference-led work.
Say what must stay the same as well as what should change, and refer to the reference directly ("the product in the reference image"). Several references can be combined, for example a product photo plus a lighting or style reference.
Edit request body
{ "model": "kreator-image-pro", "prompt": "Keep the product exactly as in the reference image. Replace the background with a sunlit marble kitchen counter and add a soft reflection.", "ratio": "1:1", "references": [ { "type": "image_url", "url": "https://example.com/my-product.jpg" } ] }
How do you turn a generated image into a video?
Use it as the first frame of a Seedance video. Download the finished image from /v1/jobs/{job_id}/output, upload it with POST /v1/uploads (PUT the bytes to the returned direct_upload_url, then POST /v1/uploads/complete), and pass the upload id as first_frame_upload_id on POST /v1/videos. A last_frame_upload_id can set the end of the shot.
The output link needs your API key, so upload the file rather than passing the output URL as a public reference.
POST /v1/videos body
{ "model": "kreator-video-seedance-2", "prompt": "The camera slowly pushes in as steam rises from the cup", "first_frame_upload_id": "<upload_id from /v1/uploads/complete>", "duration": 5, "ratio": "16:9", "resolution": "720p" }
Should you poll or use webhooks?
Both work. Polling GET /v1/jobs/{job_id} is simplest for scripts and batch jobs. For an app, pass webhook_url on the create call: KreatorFlow sends a POST with the job when it finishes or fails, signed in the X-KreatorFlow-Signature header (t=timestamp,v1=HMAC-SHA256 of the timestamp and body). Verify the signature, then fetch the output.
Keep a slow poll as a fallback for any callback your server misses.
How is the Seedream API billed?
From prepaid tokens, with no subscription. One token is $0.05, top-ups start at $20, and every create response includes the quoted token cost before the image is made. Seedream 5.0 Lite uses 1 token, Seedream 4.5 uses 2 tokens, Seedream 5.0 Pro uses 2 tokens and Seedream 5.0 Flash uses 1 token per image.
If a job fails or is blocked, its reserved tokens are released, so you pay for finished images.
What errors and limits should you plan for?
The API answers errors with success: false, a stable code and a readable message. The ones to handle first:
- invalid_api_key (401) and scope_missing (403): the key is wrong or lacks images:create.
- model_not_found (400): the alias is not available on this endpoint or not switched on for your account.
- prompt_required (400) and prompt length errors: check the prompt is present and within the model's limit.
- aspect_ratio_not_supported (400): the response lists the ratios the model accepts.
- rate_limited (429): wait for the seconds in the Retry-After header, then try again with the same Idempotency-Key.
- A job that ends failed or blocked: read errorCode and errorMessage on the job; its reserved tokens are released.
Frequently asked questions
Is there a Seedream API?
Yes. KreatorFlow offers Seedream through a REST API at POST https://kreatorflow.ai/v1/images, with Seedream 5.0 Lite, Seedream 4.5, Seedream 5.0 Pro and Seedream 5.0 Flash available as of 17 October 2026.
How much does the Seedream API cost per image?
$0.05 for Seedream 5.0 Lite, $0.10 for Seedream 4.5, $0.10 for Seedream 5.0 Pro and $0.05 for Seedream 5.0 Flash, paid from prepaid tokens (1 token = $0.05). The price is the same at every aspect ratio and resolution.
Can the Seedream API make 4K images?
Yes, on Seedream 4.5: set resolution to high. The standard setting returns 2K on every model.
How many reference images can I send?
Up to 14 on Seedream 4.5. Seedream 5.0 Lite takes 4, Seedream 4.5 takes 14, Seedream 5.0 Pro takes 10 and Seedream 5.0 Flash takes 10.
Does the API return the image directly?
No. It returns a job. When the job is completed, download the file from GET /v1/jobs/{job_id}/output with your API key and store it yourself.
Can I keep the same character across images?
Yes. Register a reference image once with POST /v1/characters (mode register) and pass the returned id in character_ids on each /v1/images or /v1/videos request.
Can I use the Seedream API from n8n, Make or Zapier?
Yes. Any tool that can send an HTTP request with a Bearer header can call it. The automation guide walks through each tool.
Is KreatorFlow's Seedream API official?
KreatorFlow is an official BytePlus partner, and the models run on BytePlus. The API, keys and billing are KreatorFlow's own.



