GPT Image 1.5 API
GPT Image 1.5 images by OpenAI from a description and references (up to 14). Three aspect ratios and one resolution, PNG output. The prompt may be empty when references are given.
For AI assistants:Download .mdAll documentation .mdOpen as text
Connect in three steps
- Get a keyCreate a key in the dashboard after you confirm your email. One key opens every model.
- Check the pricePOST /v1/price shows the cost of a run in advance, without charging you.
- 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 -X POST "https://api.cyhub.ai/v1/tasks" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "images_chatgpt",
"settings": {
"model": "gpt-image-1.5",
"prompt": "Уютная кофейня дождливым вечером, тёплый свет в окнах",
"aspect_ratio": "1:1"
}
}'
curl "https://api.cyhub.ai/v1/tasks/TASK_ID" \
-H "Authorization: Bearer YOUR_API_KEY"import time
import requests
API = "https://api.cyhub.ai/v1"
HEADERS = {"Authorization": "Bearer YOUR_API_KEY"}
body = {
"model": "images_chatgpt",
"settings": {
"model": "gpt-image-1.5",
"prompt": "Уютная кофейня дождливым вечером, тёплый свет в окнах",
"aspect_ratio": "1:1",
},
}
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"])const API = "https://api.cyhub.ai/v1";
const HEADERS = { Authorization: "Bearer YOUR_API_KEY", "Content-Type": "application/json" };
const body = {
"model": "images_chatgpt",
"settings": {
"model": "gpt-image-1.5",
"prompt": "Уютная кофейня дождливым вечером, тёплый свет в окнах",
"aspect_ratio": "1:1"
}
};
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();Price before the run
Prices as of 15.10.2026: from 10 ₽. POST /v1/price shows the exact price of your settings.
| Mode | Price |
|---|---|
| GPT Image 1.5 | from 10 ₽ |
Send the same settings to POST /v1/price: the response shows the price of the run without charging you.
curl -X POST "https://api.cyhub.ai/v1/price" \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
--data '{
"model": "images_chatgpt",
"settings": {
"model": "gpt-image-1.5",
"prompt": "Уютная кофейня дождливым вечером, тёплый свет в окнах",
"aspect_ratio": "1:1"
}
}'amount_minor: the price of the run in minor units (kopecks for rubles)currency: the wallet currencyavailable_minor: how much your balance has for new tasks right now
GPT Image 1.5
Three aspect ratios, one resolution, up to 14 references. The prompt may be empty when references are given.
Value of the model field: gpt-image-1.5
Price in this mode from 10 ₽.
Parameters
Model parameters go inside settings. Omitted optional fields take their default values.
promptOptionalWhat to draw. May be empty when reference images are given.
Type: StringMaximum characters: 3000aspect_ratioOptionalAspect ratio.
Type: StringAllowed values:1:12:33:2Default:"1:1"image_urlsOptionalReference image URLs, up to 14.
Type: List (String, uri)Maximum items: 14
Parameters not listed here are not accepted: the response is 422 unknown_setting.
Input
- References are URLs of JPEG, PNG or WebP images, up to 10 MB each.
| Field | Accepts | Formats | Files | File size up to |
|---|---|---|---|---|
image_urls | Images | jpeg, jpg, png, webp | 14 | 10 MB |
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.
Square image
{
"model": "images_chatgpt",
"settings": {
"model": "gpt-image-1.5",
"prompt": "Уютная кофейня дождливым вечером, тёплый свет в окнах",
"aspect_ratio": "1:1"
}
}The price is calculated when the task is accepted, currency RUB.
Output
- One PNG image per run.
- 4K takes noticeably longer, up to several minutes.
| Kind | Formats | How many | Note |
|---|---|---|---|
image | png | 1 |
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.
{
"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"
}
]
}
}See also
Try GPT Image 1.5 through the API
One key opens every CyHUB model. Payment in rubles, and you see the price before the run.
Get an API key