GPT Image 2.5 is live — OpenAI's newest image model, targeted edits that leave the rest of the frame alone
rreAPI Docs

Seedream 5.0 Pro

ByteDance Doubao Seedream 5.0 Pro — flagship async image generation at 1K and 2K with text-to-image, multi-reference image-to-image, and reliable text rendering.

ByteDance's flagship Doubao Seedream image model on reAPI. 1K and 2K resolution tiers, text-to-image, single and multi-reference image-to-image (up to 10 reference images), and dependable text rendering for posters, covers, and ad creative. Async-first: submit returns a task_id; poll until ready. See current pricing on the model page.

Quick example

curl https://reapi.ai/api/v1/images/generations \
  -H "Authorization: Bearer YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "doubao-seedream-5-0-pro",
    "prompt": "a scarlet macaw on a mossy branch, cinematic god rays, magazine cover titled WILD BEAUTY",
    "aspect_ratio": "16:9",
    "quality": "high"
  }'
import requests

resp = requests.post(
    "https://reapi.ai/api/v1/images/generations",
    headers={
        "Authorization": "Bearer YOUR_API_KEY",
        "Content-Type": "application/json",
    },
    json={
        "model": "doubao-seedream-5-0-pro",
        "prompt": "a scarlet macaw on a mossy branch, cinematic god rays",
        "aspect_ratio": "16:9",
        "quality": "high",
    },
    timeout=30,
)
print(resp.json())
const r = await fetch("https://reapi.ai/api/v1/images/generations", {
  method: "POST",
  headers: {
    Authorization: "Bearer YOUR_API_KEY",
    "Content-Type": "application/json",
  },
  body: JSON.stringify({
    model: "doubao-seedream-5-0-pro",
    prompt: "a scarlet macaw on a mossy branch, cinematic god rays",
    aspect_ratio: "16:9",
    quality: "high",
  }),
});
console.log(await r.json());
package main

import (
    "bytes"
    "encoding/json"
    "fmt"
    "io"
    "net/http"
)

func main() {
    body, _ := json.Marshal(map[string]any{
        "model":  "doubao-seedream-5-0-pro",
        "prompt":       "a scarlet macaw on a mossy branch, cinematic god rays",
        "aspect_ratio": "16:9",
        "quality":      "high",
    })
    req, _ := http.NewRequest("POST",
        "https://reapi.ai/api/v1/images/generations", bytes.NewReader(body))
    req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
    req.Header.Set("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    out, _ := io.ReadAll(resp.Body)
    fmt.Println(string(out))
}

Submit response

{
  "id": "task_018f5a3a1b6e7d9f8c2b4d6e8f0a2c4e",
  "model": "doubao-seedream-5-0-pro",
  "status": "processing",
  "created_at": 1735000000
}

Poll GET /api/v1/tasks/{id} (see the Tasks reference) until status === "completed". The completed payload's output.image_urls holds the generated image URL, valid for 72 hours. Mirror to your own storage if you need it longer.


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/images/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

model — required

string. Must be doubao-seedream-5-0-pro exactly.

prompt — string, required

Up to 4,000 characters. Free-form text describing the image. Detailed prompts that name the subject, composition, lighting, and style consistently produce better results. Seedream 5.0 Pro renders in-image text well — put headline or logo copy directly in the prompt.

aspect_ratio — string, required

Output aspect ratio. Accepted values:

  • 1:1
  • 4:3
  • 3:4
  • 16:9
  • 9:16
  • 2:3
  • 3:2

quality — string, required

Output resolution tier:

  • basic — 1K output
  • high — 2K output

Seedream 5.0 Pro does not expose a 4K tier. Generated images do not include a visible watermark by default.

image_urls — array, optional

Reference images for image-to-image (1 image) or multi-reference fusion (up to 10 images). Public HTTP(S) URLs only — base64 / data: URIs are rejected at the gateway.

Upload to your own R2 / S3 / OSS / equivalent first, then pass the public URL.

layer_decomposition — boolean, optional

Defaults to false. When true, the model splits your reference image into a base image plus up to 16 independently editable layers. Each layer is a PNG with a real alpha channel, and the response carries per-layer metadata:

  • z_index — stacking order; 0 is the base image, 1..n are the layers
  • bounding_box — the layer's absolute and normalized position
  • name / description — what the model identified in that layer

Requires exactly one image in image_urls; zero or multiple are rejected. Cannot be combined with background: "transparent" — layers are already returned as transparent PNGs. Partial success is not supported: if any layer fails, the whole request fails. If your prompt asks for more layers than the model can produce, some layer content may be dropped rather than the request failing.

Billing is per image actually returned — see Pricing.

background — string, optional

Controls the alpha channel of the output. Defaults to opaque.

  • opaque — a normal solid-background image
  • transparent — a PNG with a real alpha channel

transparent requires exactly one image in image_urls and the source image must itself carry an alpha channel; text-to-image requests are rejected upstream. It also cannot be combined with layer_decomposition. opaque carries no such restriction.

content_filter — boolean, optional

Controls the final-image content check and defaults to true. Direct API requests may pass false to skip this additional check. The hosted Playground always keeps it enabled.

When enabled, a flagged image is hidden and the task returns a content-policy error. Because the upstream generation already completed, that generation is still charged. Avoid submitting restricted-content prompts when using the Playground.

There is no n parameter. An ordinary request returns exactly one image; send multiple requests when you need several variations. The one exception is layer_decomposition: true, which returns the base image plus its layers in a single call. Group-image, web-search, and streaming options are not available on this model.


Pricing

Seedream 5.0 Pro charges the official per-output-image rate, banded by quality — the high/2K band costs more than basic/1K. For reference-image requests, the first input image is included and each additional input image (2nd through 10th) adds the official ¥0.02 reference surcharge (converted at the configured 6.8 RMB/USD rate). Provider failures and requests rejected before an image is generated are refunded. An image blocked by the final output check is still charged because generation already completed.

credits = ceil((output_price_usd + additional_reference_price_usd) × 1000)

where 1 credit = $0.001. The exact per-image credit cost surfaces on the model page and reflects the current rate. There is no per-token or subscription component.

Layer decomposition

Because the model decides how many layers to produce, a layer_decomposition: true request is charged for the images you actually receive:

credits = (1 + layers_returned) × per_image_credits_at_your_quality_tier

Every returned image — the base image and each layer — is charged at the quality tier you requested. basic bills each of them at the 1K rate, high at the 2K rate. Reference-image surcharges apply to the base image only; layers are outputs, not additional inputs.

At submission time we reserve the worst case — the base image plus the maximum 16 layers — and refund the difference the moment the task settles, so you are never charged for layers the model did not return. A failed request is refunded in full.

If cost matters more than resolution, send quality: "basic". Layer decomposition on a 1K base produces the same layer structure at roughly half the per-image price.


Response

The poll envelope returns the image URL in output.image_urls:

{
  "id": "task_019dfd44b7fd74168541552a3260a623",
  "model": "doubao-seedream-5-0-pro",
  "status": "completed",
  "output": {
    "image_urls": [
      "https://cdn.reapi.ai/...jpg"
    ]
  }
}

URLs are valid for 72 hours. Mirror to your own storage for longer retention.


Errors

Failures use the standard envelope { error: { code, message, request_id } }. See the errors catalog for the full code list. Common cases:

  • Invalid parameters (bad aspect_ratio / quality, oversize image_urls) → 4xx invalid-input.
  • A prompt or reference rejected before generation → content-policy error; the task is refunded.
  • A generated image blocked by the enabled output check → content-policy error (80006); the image is hidden and the completed generation remains charged.

Tips

  • Choose aspect_ratio explicitly instead of relying on ratio wording in the prompt.
  • Multi-reference fusion keeps a character consistent — pass the same face / wardrobe references across a series.
  • Lean on Seedream 5.0 Pro's text rendering for posters, covers, and UI mockups; spell the exact words you want in quotes inside the prompt.

Table of Contents