Общая документация Public API · API-ключ можно создать в настройках аккаунта
GPT Image 2 - нейросеть для создания изображений по тексту и редактирования уже готовых картинок по словесной инструкции. Её удобно использовать для иллюстраций к постам и презентациям, афиш и карточек товаров, правок в существующих фото (сменить фон, поправить свет, убрать лишний предмет) и в задачах, где нужно оставить читаемый текст прямо на картинке.
Два режима работы:
input_urls, нейросеть вносит правки в загруженные картинки и старается сохранить детали, которые не нужно менять.Режим выбирается автоматически по наличию input_urls в запросе, отдельного переключателя нет. Каждый вызов создаёт асинхронную операцию: сначала в ответе приходит id и стартовый статус, а готовая картинка забирается отдельным запросом по этому id.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус.{
"tool": "gpt-image-2",
"input": {
"...": "..."
}
}
tool - slug нейросети, всегда "gpt-image-2".input - параметры запуска. Все поля передаются напрямую внутри этого объекта, без дополнительного вложенного input.input зависит от сценария: с изображениями или без них.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
prompt | string | Да | Текстовое описание результата или инструкция к редактированию: кто или что в кадре, фон, стиль, что именно нужно изменить и что оставить. Максимум 20000 символов. |
input_urls | string[] (url) | Нет | Массив внешних URL изображений для редактирования или как референсы. Если передать хотя бы одно изображение, нейросеть работает в режиме редактирования; если поле пустое или не передано, работает в режиме генерации из текста. Максимум 16 файлов. Допустимые расширения: .jpg, .jpeg, .png, .webp. |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gpt-image-2",
"input": {
"prompt": "Уютная кофейня на углу европейской улочки, утренний свет, акварельный стиль, на окне читается вывеска Cafe Bratuha"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gpt-image-2',
input: {
prompt:
'Уютная кофейня на углу европейской улочки, утренний свет, акварельный стиль, на окне читается вывеска Cafe Bratuha',
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gpt-image-2',
'input': {
'prompt': 'Уютная кофейня на углу европейской улочки, утренний свет, акварельный стиль, на окне читается вывеска Cafe Bratuha',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gpt-image-2",
"input": {
"prompt": "Замени фон на вечернюю набережную с тёплым освещением, лицо и одежду не трогай",
"input_urls": [
"https://cdn.example.com/source-image-1.jpg"
]
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gpt-image-2',
input: {
prompt:
'Замени фон на вечернюю набережную с тёплым освещением, лицо и одежду не трогай',
input_urls: ['https://cdn.example.com/source-image-1.jpg'],
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gpt-image-2',
'input': {
'prompt': 'Замени фон на вечернюю набережную с тёплым освещением, лицо и одежду не трогай',
'input_urls': [
'https://cdn.example.com/source-image-1.jpg',
],
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "gpt-image-2",
"input": {
"prompt": "Совмести эти два кадра в один коллаж в стиле журнальной обложки, сверху крупный заголовок BRATUHA, снизу подпись осенний выпуск",
"input_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.jpg"
]
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'gpt-image-2',
input: {
prompt:
'Совмести эти два кадра в один коллаж в стиле журнальной обложки, сверху крупный заголовок BRATUHA, снизу подпись осенний выпуск',
input_urls: [
'https://cdn.example.com/source-image-1.jpg',
'https://cdn.example.com/source-image-2.jpg',
],
},
}),
})
const data = await response.json()
import requests
response = requests.post(
'https://bratuha.ru/api/v1/operations',
headers={
'Authorization': 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
json={
'tool': 'gpt-image-2',
'input': {
'prompt': 'Совмести эти два кадра в один коллаж в стиле журнальной обложки, сверху крупный заголовок BRATUHA, снизу подпись осенний выпуск',
'input_urls': [
'https://cdn.example.com/source-image-1.jpg',
'https://cdn.example.com/source-image-2.jpg',
],
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "gpt-image-2",
"cost": 4,
"balance_after": 490,
"created_at": "2026-04-21T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "gpt-image-2",
"cost": 4,
"created_at": "2026-04-21T12:00:00Z",
"completed_at": "2026-04-21T12:00:24Z",
"result": {
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/gpt-image-2/image-1.jpg"
]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "gpt-image-2",
"cost": 0,
"created_at": "2026-04-21T12:00:00Z",
"completed_at": "2026-04-21T12:00:09Z",
"result": null,
"error_message": "Описание ошибки от нейросети"
}
После создания операции сохраните id из ответа и проверяйте статус отдельным запросом:
GET /api/v1/operations/{id}
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/op_uuid-123
const status = await fetch(
'https://bratuha.ru/api/v1/operations/op_uuid-123',
{
headers: { Authorization: 'Bearer brth_ваш_ключ' },
},
)
const result = await status.json()
Polling одной операции ограничен одним запросом в секунду; на практике достаточно проверять статус с интервалом 3-5 секунд.
После завершения GPT Image 2 возвращает одно изображение:
{
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/gpt-image-2/image-1.jpg"
]
}
type - всегда "image".urls - массив с одной ссылкой на готовую картинку.result равен null, а текст ошибки приходит в error_message.4 ₽ за каждую успешно принятую операцию.POST /api/v1/operations не идемпотентен: повторный запрос с теми же параметрами создаёт новую операцию и новое списание.queued, затем проверяете статус по id.input_urls разрешены только внешние http/https URL. Локальные адреса, loopback и приватные IP-сети в Public API не принимаются.input_urls: .jpg, .jpeg, .png, .webp. Форматы HEIC/HEIF поддерживаются только при загрузке файлов через форму сайта и в Public API по URL не принимаются.