# GPT Image 2.5

> The ChatGPT image model: realistic photos, neat lettering, product shots and precise photo edits.

| Mode | ID | Price |
|---|---|---|
| [Edit a photo](#edit-a-photo) | `gpt-image-2.5-image-to-image` | $0.010–$0.710 (depends on quality and resolution) |
| [Create a picture](#create-a-picture) | `gpt-image-2.5-text-to-image` | $0.010–$0.710 (depends on quality and resolution) |

## Edit a photo

Upload a photo and describe what to change. ID: `gpt-image-2.5-image-to-image` · $0.010–$0.710 (depends on quality and resolution) per image · ~1.5 min

**Parameters** (field `input`)

| Parameter | Required | Description | Values (default in bold) |
|---|---|---|---|
| `prompt` | yes | What to draw or what to change | text, up to 20000 chars |
| `input_urls` | yes | Links to your photos (https), up to 16 | `["https://…"]` |
| `resolution` | no | Long side: 0.5K ≈ 512 px, 1K ≈ 1024 px, 2K ≈ 2048 px, 4K ≈ 4096 px. Sizes above native are an upscale of the finished picture (Lanczos + light sharpening): 4K on Nano Banana 2 and Pro from 2K, 2K on Nano Banana from 1K, 2K and 4K on GPT Image from its native ~1.5K | **`1K`** `2K` `4K` |
| `aspect_ratio` | no | Image shape | **`auto`** `1:1` `1:3` `3:1` `3:2` `2:3` `4:3` `3:4` `5:4` `4:5` `16:9` `9:16` `2:1` `1:2` `21:9` `9:21` |
| `output_format` | no | File format | **`png`** `jpeg` `webp` |
| `background` | no | Background: `auto`, `opaque`, `transparent` (only with `png` or `webp`) | **`auto`** `opaque` `transparent` |
| `moderation` | no | Accepted for apimart compatibility, does not change the result | **`low`** `auto` |
| `quality` | no | Rendering effort; passed to ChatGPT. Changes the price (see the table below), `auto` = `medium` | **`auto`** `low` `medium` `high` `xhigh` `max` |

**Example**

```bash
curl -X POST https://mixmedia.tech/api/v1/jobs/createTask \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-image-2.5-image-to-image","input":{"prompt":"Make the background a neon city at night","input_urls":["https://mixmedia.tech/static/img/previews/gpt-t2i.jpg"],"resolution":"1K","aspect_ratio":"auto","moderation":"low","quality":"auto"}}'
```

```python
import os, requests

r = requests.post(
    "https://mixmedia.tech/api/v1/jobs/createTask",
    headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
    json={
      "model": "gpt-image-2.5-image-to-image",
      "input": {
        "prompt": "Make the background a neon city at night",
        "input_urls": [
          "https://mixmedia.tech/static/img/previews/gpt-t2i.jpg"
        ],
        "resolution": "1K",
        "aspect_ratio": "auto",
        "moderation": "low",
        "quality": "auto"
      }
    },
)
print(r.json())  # {"code": 200, "data": {"taskId": "..."}}
```

```javascript
const r = await fetch("https://mixmedia.tech/api/v1/jobs/createTask", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "model": "gpt-image-2.5-image-to-image",
    "input": {
      "prompt": "Make the background a neon city at night",
      "input_urls": [
        "https://mixmedia.tech/static/img/previews/gpt-t2i.jpg"
      ],
      "resolution": "1K",
      "aspect_ratio": "auto",
      "moderation": "low",
      "quality": "auto"
    }
  }),
});
console.log(await r.json()); // { code: 200, data: { taskId: "..." } }
```

## Create a picture

Describe the picture and the model creates it from scratch. ID: `gpt-image-2.5-text-to-image` · $0.010–$0.710 (depends on quality and resolution) per image · ~1.5 min

**Parameters** (field `input`)

| Parameter | Required | Description | Values (default in bold) |
|---|---|---|---|
| `prompt` | yes | What to draw or what to change | text, up to 20000 chars |
| `resolution` | no | Long side: 0.5K ≈ 512 px, 1K ≈ 1024 px, 2K ≈ 2048 px, 4K ≈ 4096 px. Sizes above native are an upscale of the finished picture (Lanczos + light sharpening): 4K on Nano Banana 2 and Pro from 2K, 2K on Nano Banana from 1K, 2K and 4K on GPT Image from its native ~1.5K | **`1K`** `2K` `4K` |
| `aspect_ratio` | no | Image shape | **`auto`** `1:1` `1:3` `3:1` `3:2` `2:3` `4:3` `3:4` `5:4` `4:5` `16:9` `9:16` `2:1` `1:2` `21:9` `9:21` |
| `output_format` | no | File format | **`png`** `jpeg` `webp` |
| `background` | no | Background: `auto`, `opaque`, `transparent` (only with `png` or `webp`) | **`auto`** `opaque` `transparent` |
| `moderation` | no | Accepted for apimart compatibility, does not change the result | **`low`** `auto` |
| `quality` | no | Rendering effort; passed to ChatGPT. Changes the price (see the table below), `auto` = `medium` | **`auto`** `low` `medium` `high` `xhigh` `max` |

**Example**

```bash
curl -X POST https://mixmedia.tech/api/v1/jobs/createTask \
  -H "Authorization: Bearer $API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model":"gpt-image-2.5-text-to-image","input":{"prompt":"A cat astronaut in a neon city, cinematic light","resolution":"1K","aspect_ratio":"auto","moderation":"low","quality":"auto"}}'
```

```python
import os, requests

r = requests.post(
    "https://mixmedia.tech/api/v1/jobs/createTask",
    headers={"Authorization": f"Bearer {os.environ['API_KEY']}"},
    json={
      "model": "gpt-image-2.5-text-to-image",
      "input": {
        "prompt": "A cat astronaut in a neon city, cinematic light",
        "resolution": "1K",
        "aspect_ratio": "auto",
        "moderation": "low",
        "quality": "auto"
      }
    },
)
print(r.json())  # {"code": 200, "data": {"taskId": "..."}}
```

```javascript
const r = await fetch("https://mixmedia.tech/api/v1/jobs/createTask", {
  method: "POST",
  headers: { Authorization: `Bearer ${process.env.API_KEY}`, "Content-Type": "application/json" },
  body: JSON.stringify({
    "model": "gpt-image-2.5-text-to-image",
    "input": {
      "prompt": "A cat astronaut in a neon city, cinematic light",
      "resolution": "1K",
      "aspect_ratio": "auto",
      "moderation": "low",
      "quality": "auto"
    }
  }),
});
console.log(await r.json()); // { code: 200, data: { taskId: "..." } }
```

## Price by quality and resolution

Per picture. `auto` costs the same as `medium`.

| `quality` | 1K | 2K | 4K |
|---|---|---|---|
| `auto` | $0.010 | $0.030 | $0.040 |
| `low` | $0.010 | $0.010 | $0.020 |
| `medium` | $0.010 | $0.030 | $0.040 |
| `high` | $0.050 | $0.110 | $0.180 |
| `xhigh` | $0.090 | $0.190 | $0.320 |
| `max` | $0.210 | $0.430 | $0.710 |

## Compatibility

apimart/OpenAI-style requests work too:

- `model`: `gpt-image-2.5-image-to-image`, `gpt-image-2-image-to-image`, `gpt-image-2.5-text-to-image`, `gpt-image-2-text-to-image`, `gpt-image-2.5`, `gpt-image-2-5`, `gpt-image-2.5-flare`, `gpt-image-2.5-sunburst`.
- `size` instead of `aspect_ratio`: a ratio (`16:9`) or exact pixels (`1600x1200`) — we use the closest supported ratio.
- Photos can go in `image_urls`, `image_input` or `input_urls`. Parameters may also be sent at the top level of the body, without the `input` wrapper.
- `resolution` in any case (`1k`, `2K`); `jpg` and `jpeg` are the same. `n` must be `1` (one image per request).
- One name, `gpt-image-2.5`, for both modes: with photos the task runs as Photo → Photo. `resolution`: `1k`, `2k` or `4k` — ChatGPT draws about 1.5K; 2K and 4K are an upscale of the finished picture (Lanczos + light sharpening) to a 2048 / 4096 px long side. `quality` (`auto`, `low`, `medium`, `high`, `xhigh`, `max`; `hd` = `high`, `standard` = `medium`) is passed to ChatGPT: the size stays the same, detail changes a little; the price follows the table below. `model`: `gpt-image-2.5-flare` and `gpt-image-2.5-sunburst` are the same model. `moderation` and `mask_url` are accepted but do not change the result.

## Result

Same as any task: call [recordInfo](https://docs.mixmedia.tech/en/endpoints/record-info) or receive a [callback](https://docs.mixmedia.tech/en/callbacks). Image links are in `resultJson` (kept for 24 hours).

Upload your photos via [files/upload](https://docs.mixmedia.tech/en/endpoints/upload) or pass any public https links.
