# Bytedance Doubao Seedream 5.0 (Build 260128) — Image Edit > Unlock professional-grade visual manipulation with doubao-seedream-5-0-260128/image-edit on GPT Proto. Leading-edge generative fill and retouching capabilities. ## Overview - **Endpoint**: `POST https://gptproto.com/api/v3/doubao/doubao-seedream-5-0-260128/image-edit` - **Result URL**: `GET https://gptproto.com/api/v3/predictions/{result_id}/result` — the submit response also returns the authoritative URL in `data.urls.get` - **Model ID**: `doubao-seedream-5-0-260128` - **Vendor**: Bytedance - **Scene**: `image-edit` - **Category**: image-to-image - **Modalities**: input image → output image - **Playground**: https://gptproto.com/model/bytedance/doubao-seedream-5-0-260128/image-edit - **API documentation**: https://docs.gptproto.com/docs/allapi/Doubao/doubao-seedream-5-0-260128/gptproto-format/image-edit - **Other scenes of this model**: `text-to-image` — same auth, different endpoint path and input schema ## Authentication Every request needs a GPTProto API key in the `Authorization` header. Create one at https://gptproto.com/dashboard/api-key, then export it: ```bash export GPTPROTO_API_KEY="your-api-key" ``` Header: `Authorization: Bearer $GPTPROTO_API_KEY` (plus `Content-Type: application/json` on POST). ## Pricing Platform price by tier (USD, already includes the GPTProto discount): - **1** — $0.0298 per run - **2** — $0.0595 per run - **3** — $0.0892 per run - **4** — $0.119 per run - **5** — $0.1487 per run - **6** — $0.1785 per run - **7** — $0.2082 per run - **8** — $0.238 per run - **9** — $0.2677 per run - **10** — $0.2975 per run Price range: $0.0298 – $0.2975 per generation. Prices may change. The model page always shows the live price: https://gptproto.com/model/bytedance/doubao-seedream-5-0-260128/image-edit ## API Information The API is asynchronous: POST the endpoint to create a prediction, then poll its result URL until `status` is `completed` or `failed`. ### Input Schema The endpoint accepts the following JSON body parameters: - **`prompt`** (`string`, _required_): The positive prompt for the generation. - **`images`** (`string[]`, _required_): The size of the generated media, supporting up to 3K resolution for images. If you need to match the size of an existing image, you must explicitly specify the dimensions, as automatic resizing to match the image is not supported. - **`size`** (`integer`, _optional_): - Default: `2048x2048` - **`enable_base64_output`** (`enum`, _optional_): If enabled, the output will be encoded into a BASE64 string instead of a URL. This property is only available through the API. - Default: `false` - Options: true, false - **`enable_sync_mode`** (`enum`, _optional_): If set to true, the function will wait for the result to be generated and uploaded before returning the response. It allows you to get the result directly in the response. This property is only available through the API. - Default: `false` - Options: true, false **Required Parameters Example**: ```json { "prompt": "A tiny origami fox sailing a teacup across a moonlit puddle", "images": [ "https://d1q70pf5vjeyhc.cloudfront.net/media/92d2d4ca66f84793adcb20742b15d262/images/1757414555847323990_Si8cqCBF.jpeg" ] } ``` **Full Example**: ```json { "prompt": "A tiny origami fox sailing a teacup across a moonlit puddle", "images": [ "https://d1q70pf5vjeyhc.cloudfront.net/media/92d2d4ca66f84793adcb20742b15d262/images/1757414555847323990_Si8cqCBF.jpeg" ], "size": "2048x2048", "enable_base64_output": false, "enable_sync_mode": false } ``` ### Output Schema Both submit and poll return the same envelope: - **`data.id`** (`string`): Prediction id. Use it as `result_id` when polling for the result. - **`data.status`** (`string`): One of `created`, `running`, `completed`, `failed`. See Status Values below. - **`data.outputs`** (`array of string`): Generated files. Empty until `status` is `completed`; then it holds the output URLs (or base64 strings when the model exposes a base64 option). - **`data.urls.get`** (`string`): Authoritative result URL for this prediction. Prefer it over building the poll URL yourself. - **`data.error`** (`string | null`): Failure reason when `status` is `failed`, otherwise `null`. - **`data.executionTime`** (`integer`): Total processing time in milliseconds. - **`data.timings.inference`** (`integer`): Model inference time in milliseconds. - **`data.hasNsfwContents`** (`array of boolean`): Per-output moderation flags. - **`message`** (`string`): `success` on a normal response, otherwise the error message. - **`code`** (`integer`): Business status code. `200` means the request was accepted. **Example Response — submit (task accepted)**: ```json { "data": { "id": "pred_example_01", "model": "doubao-seedream-5-0-260128", "outputs": [], "urls": { "get": "https://gptproto.com/api/v3/predictions/pred_example_01/result" }, "hasNsfwContents": [], "status": "created", "createdAt": "2026-01-01T12:00:00Z", "executionTime": 0, "timings": { "inference": 0 } }, "message": "success", "code": 200 } ``` **Example Response — poll (completed)**: ```json { "data": { "id": "pred_example_01", "model": "doubao-seedream-5-0-260128", "outputs": [ "https://oss-us.gptproto.com/example/output.png" ], "urls": { "get": "https://gptproto.com/api/v3/predictions/pred_example_01/result" }, "status": "completed", "error": null, "executionTime": 12345, "timings": { "inference": 12000 }, "has_nsfw_contents": [], "created_at": "2026-01-01T12:00:00Z" }, "message": "success", "code": 200 } ``` ### Status Values - `created` — Task accepted. Use `data.id` as `result_id` for polling. - `running` — Generation is in progress. Keep polling. - `completed` — Finished successfully. Generated files are in `data.outputs`. - `failed` — Generation failed. Read `data.error` for the reason. ## Usage Examples ### 1. Submit a request ```bash curl --request POST "https://gptproto.com/api/v3/doubao/doubao-seedream-5-0-260128/image-edit" \ --header "Authorization: Bearer $GPTPROTO_API_KEY" \ --header "Content-Type: application/json" \ --data '{ "prompt": "A tiny origami fox sailing a teacup across a moonlit puddle", "images": [ "https://d1q70pf5vjeyhc.cloudfront.net/media/92d2d4ca66f84793adcb20742b15d262/images/1757414555847323990_Si8cqCBF.jpeg" ], "size": "2048x2048", "enable_base64_output": false, "enable_sync_mode": false }' ``` ```python import os import requests url = "https://gptproto.com/api/v3/doubao/doubao-seedream-5-0-260128/image-edit" headers = { "Authorization": f"Bearer {os.environ['GPTPROTO_API_KEY']}", "Content-Type": "application/json" } payload = { "prompt": "A tiny origami fox sailing a teacup across a moonlit puddle", "images": [ "https://d1q70pf5vjeyhc.cloudfront.net/media/92d2d4ca66f84793adcb20742b15d262/images/1757414555847323990_Si8cqCBF.jpeg" ], "size": "2048x2048", "enable_base64_output": False, "enable_sync_mode": False } response = requests.request("POST", url, headers=headers, json=payload) print(response.json()) ``` ```typescript const response = await fetch("https://gptproto.com/api/v3/doubao/doubao-seedream-5-0-260128/image-edit", { method: "POST", headers: { "Authorization": `Bearer ${process.env.GPTPROTO_API_KEY}`, "Content-Type": "application/json", }, body: JSON.stringify({ prompt: "A tiny origami fox sailing a teacup across a moonlit puddle", images: [ "https://d1q70pf5vjeyhc.cloudfront.net/media/92d2d4ca66f84793adcb20742b15d262/images/1757414555847323990_Si8cqCBF.jpeg", ], size: "2048x2048", enable_base64_output: false, enable_sync_mode: false, }), }); const data = await response.json(); console.log(data); ``` ### 2. Poll until the task finishes Replace `YOUR_RESULT_ID` with `data.id` from the submit response (or call `data.urls.get` directly), and keep polling every 1–3 seconds while `status` is `created` or `running`. ```bash result_id="YOUR_RESULT_ID" curl --request GET "https://gptproto.com/api/v3/predictions/$result_id/result" \ --header "Authorization: Bearer $GPTPROTO_API_KEY" ``` ```python import os import requests result_id = "YOUR_RESULT_ID" url = f"https://gptproto.com/api/v3/predictions/{result_id}/result" headers = { "Authorization": f"Bearer {os.environ['GPTPROTO_API_KEY']}" } response = requests.request("GET", url, headers=headers) print(response.json()) ``` ```typescript const result_id = "YOUR_RESULT_ID"; const response = await fetch(`https://gptproto.com/api/v3/predictions/${result_id}/result`, { method: "GET", headers: { "Authorization": `Bearer ${process.env.GPTPROTO_API_KEY}`, }, }); const data = await response.json(); console.log(data); ``` ## Example Prompts - **Edit Task**: Journey Traveler (Steampunk Transformation) **Prompt**: Replace the horse with a large retro steampunk mechanical beast featuring rusted brass plates, exposed rotating gears, and glowing blue steam vents. Change the leather saddle into a complex metallic control ri… - **Edit Prompt:** Change the traditional fishing boat setting to a high-tech **cyberpunk neon city** harbor. Replace the fisherman's yellow raincoat with a **silver reflective chrome jacket featuring neon blue circuitry patterns**. Transform the background lighthouse into a **towe… - **Prompt:** **Convert the realistic street food scene into a Studio Ghibli animation style.** The chef is transformed into a hand-drawn character with soft, expressive features and a charmingly stained white apron, while the fire in the wok becomes vibrant, painterly swirls of gl… ## HTTP Status Codes - `400` — malformed body, a parameter or value this model does not accept, or input blocked by the provider's content moderation - `401` — missing or invalid API key - `403` — insufficient credits - `413` — request body too large - `429` — rate limited; retry with backoff - `500` — An internal server error occurred - `502` — An internal server error occurred - `504` — Gateway timeout — upstream service did not respond in time; retry later ## Additional Resources - [Model playground](https://gptproto.com/model/bytedance/doubao-seedream-5-0-260128/image-edit) - [API documentation](https://docs.gptproto.com/docs/allapi/Doubao/doubao-seedream-5-0-260128/gptproto-format/image-edit) - [All models](https://gptproto.com/model) - [API keys](https://gptproto.com/dashboard/api-key) - [Platform overview for LLMs](https://gptproto.com/llm-full.txt) - Any other model: `https://gptproto.com/model/{vendor}/{model}/{scene}/llms.txt`