GPT Image API: как отправить первый запрос и проверить результат

GPT Image API — официальный эндпоинт OpenAI для генерации изображений из текста. Чтобы отправить первый запрос, нужны API Key с доступом к модели, Python или curl и модель gpt-image-2. Ответ приходит в формате base64 — его декодируют и записывают в файл. Ниже минимальный рабочий путь от ключа до проверки результата.

Что понадобится для первого запроса

Перед стартом нужно три вещи:

  • API Key — создаётся на platform.openai.com. На странице модели бесплатный уровень отмечен как неподдерживаемый; доступный tier и лимиты проверяйте в своём API dashboard.
  • Python или curl с утилитами jq и base64.
  • Пакет openai для Python: python -m pip install --upgrade openai.

Модель gpt-image-2 работает через Image API: POST https://api.openai.com/v1/images/generations. Все актуальные параметры — в Image generation guide и на странице модели gpt-image-2.

Как безопасно передать API Key

API Key нельзя вставлять прямо в код. Если файл уйдёт в репозиторий или на чужую машину, ключ придётся сразу отозвать.

Правильный вариант — переменная окружения:

export OPENAI_API_KEY="ваш_ключ_здесь"

Python SDK читает переменную при инициализации клиента. В curl она подставляется как $OPENAI_API_KEY. Если приложение загружает .env-файл, добавьте его в .gitignore; сам SDK не превращает .env в переменную текущего shell.


Для разработчиков, которым нужен альтернативный API-доступ, BetterToken.ai можно рассматривать как пример сервиса с OpenAI-compatible API Key и Base URL и моделью pay-as-you-go без фиксированной месячной подписки. Совместимость интерфейса сама по себе не подтверждает поддержку gpt-image-2: в этой инструкции запрос идёт на официальный endpoint OpenAI, а доступные у BetterToken модели нужно сверять на странице цен.


Минимальный запрос к GPT Image API

Python

import base64
from pathlib import Path
from openai import OpenAI

client = OpenAI()  # читает OPENAI_API_KEY из переменной окружения

result = client.images.generate(
    model="gpt-image-2",
    prompt="A red apple on a white background, photorealistic",
    size="1024x1024",
)

image_bytes = base64.b64decode(result.data[0].b64_json)
Path("output.png").write_bytes(image_bytes)
print("Saved: output.png")

curl

curl https://api.openai.com/v1/images/generations \
  -H "Authorization: Bearer $OPENAI_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{
    "model": "gpt-image-2",
    "prompt": "A red apple on a white background, photorealistic",
    "size": "1024x1024"
  }' \
  | jq -r '.data[0].b64_json' \
  | base64 --decode > output.png

На macOS встроенная утилита base64 может требовать флаг -D вместо --decode. Если jq не установлен, используйте подходящий пакетный менеджер вашей системы.

Доступные значения и ограничения size зависят от модели — сверяйте их с текущей документацией.

Как сохранить и проверить изображение

После выполнения команды в текущей директории должен появиться файл output.png.

Шаг 1. Откройте файл в любом просмотрщике. Если он открывается — запрос дошёл и декодирование прошло без ошибок.

Шаг 2. Проверьте размеры через Python (понадобится python -m pip install Pillow):

from PIL import Image
img = Image.open("output.png")
print(img.size)  # ожидаем (1024, 1024)

Или через CLI, если установлен ImageMagick:

identify output.png
# output.png PNG 1024x1024 ...

Или стандартным file:

file output.png
# output.png: PNG image data, 1024 x 1024, 8-bit/color RGB...

Шаг 3. Если размеры совпадают с запрошенными — запрос завершился успешно.

Если файл пустой или не открывается: скорее всего, API вернул JSON с ошибкой, который записался вместо изображения. Уберите пайп декодирования (| base64 --decode > output.png) и посмотрите сырой ответ, чтобы найти поле error.

Как исправить ошибку авторизации, модели или параметров

401 Unauthorized

Запрос отклонён на уровне аутентификации. Распространённые причины:

  • Переменная OPENAI_API_KEY не установлена или задана в другой сессии. Проверяйте только наличие, не выводя сам ключ:
if test -n "${OPENAI_API_KEY:-}"; then
  printf 'set\n'
else
  printf 'not set\n'
fi

Если выводится not set, задайте переменную в текущей сессии и перезапустите приложение, которое отправляет запрос.

  • В ключе попал пробел или перевод строки при копировании.
  • Ключ удалён или деактивирован на platform.openai.com/api-keys.

Неверное имя модели

Поле model чувствительно к точному строковому значению. Для этого примера используется gpt-image-2; актуальное имя и доступность проверяйте на странице модели.

400 Bad Request (параметры)

  • Значение size не отвечает ограничениям выбранной модели. Допустимые размеры и ограничения — в Image generation guide.
  • gpt-image-2 сейчас не поддерживает background: "transparent". Уберите этот параметр или используйте поддерживаемое значение.

Файл содержит JSON вместо изображения

Это происходит, когда curl-команда записала в файл ответ API до декодирования. Сначала выведите ответ без перенаправления, убедитесь, что ключ .data[0].b64_json есть в ответе, и только затем добавляйте пайп.


Актуальные параметры запроса, форматы ответа и поддерживаемые размеры — в официальных источниках: Image generation guide, GPT Image 2 model page.