> ## Documentation Index
> Fetch the complete documentation index at: https://docs.apimart.ai/llms.txt
> Use this file to discover all available pages before exploring further.

# GPT-Image-2.6 Ext Генерация изображений

> Генерация с gpt-image-2.6-ext по фиксированной цене за изображение. Выбор Flare / Sunburst через version; поддержка образцов, SVG и GIF.

> [!NOTE]
>
> Модель `gpt-image-2.6-ext`, параметр `version`: `flare` / `sunburst`. Оплата за изображение. Поддерживается **`resolution` `1k` / `2k` / `4k`** при **`n: 1`**, все уровни качества и PNG / JPEG / WebP / SVG / GIF.

Это API Ext. Имя модели и правила параметров отличаются от [GPT-Image-2.6 с оплатой за токены](https://docs.apimart.ai/ru/api-reference/images/gpt-image-2.6/generation.md).

```bash cURL theme={null}
curl --request POST \
  --url https://api.apimart.ai/v1/images/generations \
  --header 'Authorization: Bearer <token>' \
  --header 'Content-Type: application/json' \
  --data '{
  "model": "gpt-image-2.6-ext",
  "version": "flare",
  "prompt": "An orange cat resting on a sunny windowsill, a city after the rain, warm cinematic lighting",
  "size": "16:9",
  "resolution": "1k",
  "quality": "high",
  "n": 1
}'
```

```python Python theme={null}
import time
import requests

base_url = "https://api.apimart.ai"
headers = {"Authorization": "Bearer <token>"}
payload = {
    "model": "gpt-image-2.6-ext",
    "version": "flare",
    "prompt": "An orange cat resting on a sunny windowsill, a city after the rain, warm cinematic lighting",
    "size": "16:9",
    "resolution": "1k",
    "quality": "high",
    "n": 1
}
response = requests.post(
    f"{base_url}/v1/images/generations",
    headers=headers, json=payload, timeout=30,
)
response.raise_for_status()
task_id = response.json()["data"][0]["task_id"]
print(task_id)

deadline = time.monotonic() + 300
while time.monotonic() < deadline:
    response = requests.get(
        f"{base_url}/v1/tasks/{task_id}", headers=headers, timeout=30,
    )
    response.raise_for_status()
    body = response.json()
    task = body.get("data", body)
    if task["status"] == "completed":
        print(task["result"]["images"][0]["url"])
        break
    if task["status"] == "failed":
        raise RuntimeError(task["error"]["message"])
    time.sleep(4)
else:
    raise TimeoutError(f"Continue polling task {task_id}")
```

```javascript JavaScript theme={null}
const baseUrl = "https://api.apimart.ai";
const headers = {
  Authorization: "Bearer <token>",
  "Content-Type": "application/json",
};
const response = await fetch(`${baseUrl}/v1/images/generations`, {
  method: "POST",
  headers,
  body: JSON.stringify({
    "model": "gpt-image-2.6-ext",
    "version": "flare",
    "prompt": "An orange cat resting on a sunny windowsill, a city after the rain, warm cinematic lighting",
    "size": "16:9",
    "resolution": "1k",
    "quality": "high",
    "n": 1
  }),
});
if (!response.ok) throw new Error(await response.text());
const taskId = (await response.json()).data[0].task_id;
console.log(taskId);

async function waitForTask(taskId) {
  const deadline = Date.now() + 300_000;
  while (Date.now() < deadline) {
    const response = await fetch(`${baseUrl}/v1/tasks/${taskId}`, { headers });
    if (!response.ok) throw new Error(await response.text());
    const body = await response.json();
    const task = body.data ?? body;
    if (task.status === "completed") return task.result.images[0].url;
    if (task.status === "failed") throw new Error(task.error.message);
    await new Promise(resolve => setTimeout(resolve, 4000));
  }
  throw new Error(`Continue polling task ${taskId}`);
}
console.log(await waitForTask(taskId));
```

```json 200 theme={null}
{
  "code": 200,
  "data": [
    {
      "status": "submitted",
      "task_id": "task_01EXAMPLE"
    }
  ]
}
```

```json 400 theme={null}
{
  "error": {
    "message": "quality \"ultra\" is not supported (supported: auto / low / medium / high / xhigh / max)",
    "type": "invalid_request_error",
    "param": "",
    "code": "invalid_request_error"
  }
}
```

## Аутентификация

**Authorization** `string` *required*

Используйте ключ платформы как Bearer Token. Получите его на [странице API-ключей](https://apimart.ai/keys). Отправляйте `Content-Type: application/json`.

## Выбор версии

| Версия | Применение |
| - | - |
| `flare` | По умолчанию; приоритет скорости для повседневных изображений, пакетов и быстрых итераций. |
| `sunburst` | Приоритет композиции и точности правок для готовых материалов, текста и детального редактирования. |

## Параметры запроса

Значения перечислений нечувствительны к регистру; крайние пробелы удаляются. В примерах используется нижний регистр.

**model** `string` *required*

Фиксированное значение `gpt-image-2.6-ext`.

**prompt** `string` *required*

Обязательные непустые инструкции. При нескольких образцах укажите первое или второе изображение и опишите изменения и сохраняемые элементы.

**version** `string` (default: flare)

`flare` / `sunburst`; по умолчанию `flare`. Другие значения: HTTP 400. Цены версий могут различаться.

**resolution** `string` (default: 1k)

`1k` / `2k` / `4k` (также принимаются `1K` / `2K` / `4K`). Вместе с пропорцией `size` определяет выходные пиксели; см. таблицу «Пропорции и размеры» ниже. Цена за изображение зависит от уровня; другие значения, например `hd` / `8k`, — HTTP 400.

**size** `string` (default: auto)

Только `auto` или 10 пропорций ниже, не пиксели вроде `1024x1024`. Для генерации по тексту `auto` даёт 1:1. Для редактирования выбирается ближайшая допустимая пропорция первого образца с читаемыми размерами. Для GIF опустите поле или задайте `auto`.

**aspect\_ratio** `string`

Псевдоним `size`; достаточно одного поля. Если указаны оба, они должны совпадать, иначе HTTP 400. Для GIF также только отсутствие поля или `auto`.

**n** `integer` (default: 1)

Сейчас используйте целое `1`.

**quality** `string`

`auto` / `low` / `medium` / `high` / `xhigh` / `max`. Если не указано, поле не передаётся поставщику, и он выбирает автоматически. `auto` не фиксируется на `low`. Цена за изображение не меняется; высокие уровни обычно требуют больше времени. Другие значения: HTTP 400.

**output\_format** `string` (default: png)

`png` / `jpeg` / `webp` / `svg` / `gif`; `jpg` — псевдоним `jpeg`. SVG и GIF поддерживают только генерацию по тексту. Другие форматы: HTTP 400.

> [!WARNING]
>
> Вывод SVG пока не поддерживается.

**complexity** `string`

`low` / `medium` / `high`; без поля выбирает поставщик. Управляет сложностью: `low` для простых значков и плоских иллюстраций, `high` для богатых деталей. На цену не влияет.

**image\_urls** `string[]`

До 16 изображений, каждое до 20 MB. PNG / JPEG / WebP / GIF / BMP. Публичные HTTP(S) URL или Data URL изображения вроде `data:image/png;base64,...`. Наличие образцов включает редактирование. SVG и GIF не допускают образцы.

> [!WARNING]
>
> При `resolution``2k` / `4k` референсы не могут быть в формате GIF / BMP.

Допустимые псевдонимы: `image_url`, `image`, `images`, `input_image`, `input_images`. Рекомендуется `image_urls`. URL должны быть доступны публично без входа.

## Пропорции и размеры

| Пропорция | `1k` | `2k` | `4k` |
| - | - | - | - |
| `1:1` | 1024×1024 | 2048×2048 | 2880×2880 |
| `3:2` | 1536×1024 | 2048×1360 | 3520×2336 |
| `2:3` | 1024×1536 | 1360×2048 | 2336×3520 |
| `4:3` | 1024×768 | 2048×1536 | 3312×2480 |
| `3:4` | 768×1024 | 1536×2048 | 2480×3312 |
| `5:4` | 1280×1024 | 2560×2048 | 3216×2576 |
| `4:5` | 1024×1280 | 2048×2560 | 2576×3216 |
| `16:9` | 1536×864 | 2048×1152 | 3840×2160 |
| `9:16` | 864×1536 | 1152×2048 | 2160×3840 |
| `21:9` | 2016×864 | 2688×1152 | 3840×1648 |

При `auto` генерация по тексту использует 1:1: 1024×1024 для `1k`, 2048×2048 для `2k`, 2880×2880 для `4k`. Редактирование выбирает ближайшую пропорцию из таблицы без гарантии исходных пиксельных размеров.

## Пример с образцами

Редактирование также использует `POST /v1/images/generations`. Замените примерные URL доступными изображениями.

```json theme={null}
{
  "model": "gpt-image-2.6-ext",
  "version": "sunburst",
  "prompt": "Place the product from the first image into the scene in the second image. Preserve the logo and packaging text, and match the lighting.",
  "image_urls": [
    "https://example.com/product.png",
    "https://example.com/scene.jpg"
  ],
  "size": "auto",
  "quality": "high",
  "n": 1
}
```

## Вывод SVG

Укажите `output_format: "svg"`. Только генерация по тексту с `n=1`. `size` принимает пропорции; `complexity: "low"` подходит для простой векторной графики.

**svg** `object`

Необязательная конфигурация модели, создающей SVG, только для SVG. Весь объект можно опустить. Текстовая модель не оплачивается дополнительно.

**svg**

**model** `string` *required*

Обязателен, если передан объект `svg`. Например, `gpt-4.1-mini`.

**reasoning** `object`

**reasoning**

**effort** `string`

Необязательно: `none` / `minimal` / `low` / `medium` / `high` / `xhigh` / `max`. Значения зависят от текстовой модели; при сомнениях опустите поле.

```json theme={null}
{
  "model": "gpt-image-2.6-ext",
  "prompt": "A minimalist rocket icon in a single line color, flat vector style, no text",
  "size": "1:1",
  "output_format": "svg",
  "complexity": "low",
  "svg": {
    "model": "gpt-4.1-mini"
  },
  "n": 1
}
```

## Анимированные GIF

Укажите `output_format: "gif"`. Только генерация по тексту. Опустите `size` / `aspect_ratio` или задайте `auto`; пропорции и пиксельные размеры дают HTTP 400. Опишите движение и цикл.

```json theme={null}
{
  "model": "gpt-image-2.6-ext",
  "prompt": "A cartoon puppy raises one paw to wave, then returns to the starting pose. White background, fixed camera, seamless loop.",
  "output_format": "gif",
  "quality": "medium",
  "n": 1
}
```

## Неподдерживаемые и игнорируемые параметры

| Параметр | Поведение |
| - | - |
| `width` / `height` / `markup` / `markup_url` | HTTP 400 при отправке. Размер задавайте пропорцией; редактирование по разметке не поддерживается. |
| `background` / `moderation` / `output_compression` / `seed` / `negative_prompt` / `style` | Принимается, но не действует. |
| `response_format` | Не меняет выдачу: результаты — URL файлов, а не изображения Base64. |

## Отправка и результаты

Успешная отправка: HTTP 200. Прочитайте `data[0].task_id` и опрашивайте [API статуса](https://docs.apimart.ai/ru/api-reference/tasks/status.md) каждые 3–5 секунд до `completed` или `failed`. При таймауте клиента продолжайте проверять ту же задачу вместо повторной генерации.

```bash theme={null}
curl --request GET \
  --url https://api.apimart.ai/v1/tasks/task_01EXAMPLE \
  --header 'Authorization: Bearer <token>'
```

Пример показывает объект задачи. Если ответ обёрнут в `{code, data}`, сначала прочитайте `data`. Примеры Python / JavaScript обрабатывают оба варианта.

```json theme={null}
{
  "id": "task_01EXAMPLE",
  "status": "completed",
  "progress": 100,
  "result": {
    "images": [
      {
        "url": [
          "https://upload.apimart.ai/images/example.png"
        ],
        "expires_at": 1793923252
      }
    ]
  }
}
```

`result.images[0].url` — массив; первая ссылка: `result.images[0].url[0]`. Скачайте до `expires_at`; рекомендуемый срок действия — 24 часа после завершения. `cost` / `credits_cost` показывают итоговое списание.

| Статус | Действие |
| - | - |
| `pending` / `processing` | Продолжать опрос. |
| `completed` | Получить ссылки и сохранить файлы. |
| `failed` | Прочитать `error.message`. Полный возврат, `cost` равен 0. Исправить причину перед повторной отправкой. |

Пакетная проверка: `POST /v1/tasks/batch` с `{"task_ids":["task_xxx","task_yyy"]}`.

## Оплата

Цена за изображение зависит только от `version` × `resolution`. Качество, формат, включая SVG / GIF, сложность, пропорции, число образцов и `svg.model` цену не меняют. Сейчас используйте `n=1`; неудачные задачи полностью возмещаются. Тарифы: [страница цен APIMart](https://apimart.ai/pricing) или `/api/pricing`.

## Обработка ошибок

| Этап / статус | Причина и действие |
| - | - |
| HTTP 400 | Недопустимые параметры: отказ до создания задачи без списания. Проверьте перечисления, пропорции, ограничения образцов и специальные поля SVG / GIF. |
| HTTP 401 | API-ключ отсутствует или недействителен; проверьте Authorization. |
| HTTP 403 | `model_price_not_configured`: для этой комбинации `version` × `resolution` цена не настроена. Обратитесь в поддержку или выберите другой уровень. |
| HTTP 429 | Слишком много запросов; уменьшите параллельность перед повтором. |
| `status: "failed"` | Ошибка выполнения: например, статичное изображение / GIF с `n=2`–`4`, недоступный образец или политика безопасности. Прочитайте `error.message` и измените запрос. Полный возврат средств. |


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.