Official GPT direct · per token (#184 / #185)
Direct access to OpenAI's own image models: requests go to the official API unchanged, with native 1K–4K output, no web-app reverse engineering and no upscaling. Billed per token from the usage the official API returns. Standard OpenAI Images endpoints (generations and edits), same base URL as other groups.
https://yyds.seqnode.com/v1Authorization: Bearer <API key>/v1/images/generations · JSON/v1/images/edits · multipart/v1/models · free, handy to check a key- There is no fixed per-image price: it depends on size,
qualityand reference images. The table below is a measured average; theusagein each response and your usage log are authoritative. - Set
qualityexplicitly. Without it the upstream picks one, and the price for the same size can differ several times. - Without
response_formatyou get Base64 (data[].b64_json);"url"returns a link on this site that expires after 1 hour, so download it promptly. - A 4K Base64 response is 15–26 MB and can take minutes or longer to download from mainland China. Prefer
"response_format": "url"and download the image separately. - Streaming and async are available on #185 only; #184 supports neither. With
"stream": truethe preview frames are the upstream's loading animation and the final image is the same as without streaming. For async, submit to/v1/images/generations/asyncor/v1/images/edits/asyncand poll the returnedpoll_url; the result is an image link valid for 24 hours.
1Groups and models
#185OpenAI official
gpt-image-2gpt-image-2.5-flaregpt-image-2.5-sunburstAll three models; quality low / medium / high / xhigh / max (xhigh and max tested on the two 2.5 models). Sunburst images carry OpenAI's official C2PA content credentials.
Both groups take the same requests; switching is just a different key. Group names: #185 「【GPT 官方直连 按量】OAI · Image 2 / Flare / Sunburst」, #184 「【GPT 官方直连 按量】Azure · Image 2」.
2Billing
Both groups bill per token: unit price = OpenAI list price × group multiplier (currently 2.5; see the model plaza):
| Item | OpenAI / 1M tokens | This site (× 2.5) / 1M tokens |
|---|---|---|
| Text input (prompt) | $5 | $12.50 |
| Image input (references) | $8 | $20 |
| Image output | $30 | $75 |
| Cached input | $1.25 | $3.125 |
Measured average charge per image (2026-10-27/28, #185 gpt-image-2.5-flare / sunburst, 16:9 text-to-image, multiplier 2.5):
| Size | Pixels | quality | Per image |
|---|---|---|---|
| 1K | 1280×720 | low | |
| 1K | 1280×720 | high | |
| 2K | 2048×1152 | low | |
| 2K | 2048×1152 | medium | |
| 2K | 2048×1152 | high | |
| 2K | 2048×1152 | xhigh | |
| 2K | 2048×1152 | max | |
| 4K | 3840×2160 | medium | |
| 4K | 3840×2160 | high | |
| 4K | 3840×2160 | xhigh | |
| 4K | 3840×2160 | max |
gpt-image-21024×1024 low is about $0.015 per image; #184 at 3840×2160 low measured $0.028.- Edits add image-input tokens: one 512×512 reference is about 1024 tokens (about $0.02). Measured 2K high edit about $0.137, 4K high edit about $0.28.
- Failed requests (HTTP 4xx / 5xx) are not charged.
3Quick start
Create an API key for group #185 or #184 in the dashboard. Text to image:
curl https://yyds.seqnode.com/v1/images/generations \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "gpt-image-2.5-sunburst",
"prompt": "A quiet lakeside town at dawn, soft mist",
"size": "2048x1152",
"quality": "high",
"n": 1,
"response_format": "url"
}'
Edit with a reference image (multipart, field image):
curl https://yyds.seqnode.com/v1/images/edits \
-H "Authorization: Bearer $API_KEY" \
-F model=gpt-image-2.5-flare \
-F "prompt=Turn this photo into a watercolor painting" \
-F size=2048x1152 \
-F quality=high \
-F response_format=url \
-F "image=@input.png"
Python (handles both link and Base64 responses):
import base64, requests
API_KEY = "sk-..." # 分组 #185 或 #184 的 Key / a key of group #185 or #184
r = requests.post(
"https://yyds.seqnode.com/v1/images/generations",
headers={"Authorization": f"Bearer {API_KEY}"},
json={"model": "gpt-image-2", "prompt": "a red fox in snow",
"size": "1024x1024", "quality": "low", "response_format": "url"},
timeout=600,
)
r.raise_for_status()
d = r.json()
item = d["data"][0]
if item.get("url"):
open("out.png", "wb").write(requests.get(item["url"], timeout=300).content)
else:
open("out.png", "wb").write(base64.b64decode(item["b64_json"]))
print(d.get("usage"))
4Try itCharged for real
Call this site's API straight from the browser. The key goes only to this site; it is kept in this browser only if you tick «Remember».
gpt-image-2 · 1024×1024 · low) cost about $0.015; «Check key» only calls /v1/models and is free.Matching curl (follows the form, copyable):
5Request parameters
| Parameter | Type | Required | Notes |
|---|---|---|---|
model | string | Required | #185: gpt-image-2, gpt-image-2.5-flare, gpt-image-2.5-sunburst; #184: gpt-image-2. |
prompt | string | Required | Chinese or English. |
size | string | Optional | WIDTHxHEIGHT, e.g. 1024x1024, 1280x720, 2048x1152, 3840x2160 (all tested). OpenAI's rules: edges a multiple of 16, longest edge at most 3840, aspect ratio at most 3:1. |
quality | string | Optional | low medium high; the 2.5 models on #185 also take xhigh max. Higher is slower and costs more. Set it explicitly. |
n | integer | Optional | Use 1. |
response_format | string | Optional | b64_json (default) or url. |
image | file | Optional | Required for edits: multipart file field, PNG / JPEG / WebP. References are billed as image-input tokens. |
6Response
Generations and edits return the same shape:
{
"created": 1793151600,
"data": [{ "url": "https://img.yydsbest.com/adb085ce-….png" }],
"usage": {
"input_tokens": 16,
"input_tokens_details": { "text_tokens": 16, "image_tokens": 0 },
"output_tokens": 371,
"output_tokens_details": { "image_tokens": 371, "text_tokens": 0 },
"total_tokens": 387
}
}
| Field | Type | Notes |
|---|---|---|
created | integer | Unix timestamp (seconds). |
data[].url | string | With response_format=url: a link on this site, downloadable without a key, 404 after 1 hour. |
data[].b64_json | string | Default: Base64-encoded PNG. |
usage.input_tokens | integer | Input tokens; input_tokens_details.image_tokens is the reference-image part. |
usage.output_tokens | integer | Output tokens (almost all image tokens), billed at $75 / 1M. |
usage.total_tokens | integer | Total. |
7Errors
Failed requests are not charged. Error bodies are {"error": {"type", "message", "request_id"}} (key check failures: {"code", "message"}); include the request_id when reporting a problem.
| HTTP | Code / example message | Cause | What to do |
|---|---|---|---|
| 400 | Invalid size '1000x1000'. Width and height must both be divisible by 16. | Invalid parameter: size, quality, or an edit without image | Fix the request; do not retry as is |
| 401 | INVALID_API_KEY / API_KEY_REQUIRED | Missing or wrong key | Check the Authorization header |
| 403 | INSUFFICIENT_BALANCE | Account balance too low | Top up, then retry |
| 404 | Model "…" is not available for this group | Model not in this key's group (e.g. a 2.5 model with a #184 key) | Change the model or the key |
| 429 | API_KEY_QUOTA_EXHAUSTED etc. | Key quota used up, or too many requests | Raise the key quota in the dashboard, or lower concurrency |
| 502 / 503 | Upstream service temporarily unavailable | Temporary upstream failure | Retry later |
8Latency and network
- Measured generation time: 1K about 20–35 s, 2K about 20–50 s, 4K about 40–70 s;
maxup to about 100 s. Use a client timeout of at least 300 s. - 4K Base64 responses are large (15–26 MB) and still have to be downloaded after the image is ready. At peak hours some mainland China networks download from this site at tens of KB/s; one 4K Base64 response took over 20 minutes. With
urlthe API returns almost at once and the PNG, about a quarter smaller than Base64, downloads separately. - For large batches, limit the number of requests in flight so downloads do not compete for bandwidth.