Создаёт изображения по текстовому описанию, редактирует загруженные картинки по инструкции и собирает новую сцену из нескольких референсов. Цена зависит от модели: Обычная — 1K 6 ₽, 2K 10 ₽; Flash — 1K 3 ₽, 2K 6 ₽.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
MAI Image 2.6 рисует изображения по текстовому заданию, правит готовую картинку по инструкции и собирает новую сцену из нескольких референсов. Через API её удобно запускать для:
Режим определяется составом запроса: без image_urls - генерация по тексту, с одной ссылкой - правка, с несколькими - композиция. Каждый вызов создаёт асинхронную операцию: в ответ сразу приходят id и стартовый статус, а ссылку на готовую картинку вы забираете запросом проверки статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id, стартовый статус и стоимость.Доступны две модели:
standard - обычная модель с лучшим качеством;flash - быстрее и дешевле, качество немного ниже. Параметры и возможности те же.Сценарии:
prompt, size, resolution;prompt и одна ссылка в image_urls;prompt и 2-5 ссылок в image_urls.Базовая форма запроса:
{
"tool": "mai-image-2-6",
"input": {
"...": "..."
}
}
tool - slug нейросети, для этой модели всегда "mai-image-2-6".input - параметры запуска. Поля передаются прямо внутри input, без дополнительной вложенности.image_urls параметры size и resolution можно не передавать - размер результата модель выбирает сама.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
mai_model_tier | enum | Нет | Модель: standard или flash. Если не передать, используется standard. |
prompt | string | Да | Описание картинки или инструкция, что изменить. От 3 до 10000 символов. С несколькими изображениями лучше прямо написать, что взять с каждого: «товар с первого изображения, интерьер со второго». |
image_urls | string[] (url) | Нет | Ссылки на изображения для правки или композиции, до 5 штук. Только внешние http/https URL. Расширения: .jpg, .jpeg, .png, .webp, .gif. Без этого поля запускается генерация по тексту. |
size | enum | Нет | Соотношение сторон для генерации по тексту: auto, 1:1, 16:9, 9:16, 3:2, 2:3, 4:3, 3:4, 21:9, 9:21, 4:1, 1:4. auto - модель подберёт пропорции по заданию. Если не передать, используется 1:1. С image_urls не действует. |
resolution | enum | Нет | Разрешение для генерации по тексту: 1K (около 1 Мп, 1024×1024 для 1:1) или 2K (около 2,3 Мп, 1536×1536 для 1:1). Если не передать, используется 1K. С image_urls не действует и на цену не влияет. |
web_grounding | boolean | Нет | true - перед генерацией модель ищет свежие сведения в интернете. Полезно для недавних событий, новых товаров и реальных мест. По умолчанию выключено. |
Размеры при генерации по тексту для популярных пропорций:
| Пропорции | 1K | 2K |
|---|---|---|
| 1:1 | 1024×1024 | 1536×1536 |
| 16:9 / 9:16 | 1344×768 / 768×1344 | 2048×1152 / 1152×2048 |
| 3:2 / 2:3 | 1248×832 / 832×1248 | 1856×1248 / 1248×1856 |
| 4:3 / 3:4 | 1152×864 / 864×1152 | 1760×1312 / 1312×1760 |
| 21:9 / 9:21 | 1792×768 / 768×1792 | 2336×992 / 992×2336 |
| 4:1 / 1:4 | 3072×768 / 768×3072 | 3072×768 / 768×3072 |
Нужна только текстовая подсказка, пропорции и разрешение.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "mai-image-2-6",
"input": {
"mai_model_tier": "standard",
"prompt": "Постер летнего фестиваля уличной еды: фудтраки на набережной на закате, гирлянды, крупная надпись «ВКУСНЫЙ ВЕЧЕР» сверху",
"size": "2:3",
"resolution": "2K"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'mai-image-2-6',
input: {
mai_model_tier: 'standard',
prompt:
'Постер летнего фестиваля уличной еды: фудтраки на набережной на закате, гирлянды, крупная надпись «ВКУСНЫЙ ВЕЧЕР» сверху',
size: '2:3',
resolution: '2K',
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "mai-image-2-6",
"input": {
"mai_model_tier": "standard",
"prompt": "Постер летнего фестиваля уличной еды: фудтраки на набережной на закате, гирлянды, крупная надпись «ВКУСНЫЙ ВЕЧЕР» сверху",
"size": "2:3",
"resolution": "2K",
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Передайте одну ссылку в image_urls и опишите, что изменить и что оставить как есть.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "mai-image-2-6",
"input": {
"mai_model_tier": "flash",
"prompt": "Замени серый фон на светлую кухню с утренним светом из окна, сам товар, его форму и надписи на упаковке не меняй",
"image_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: 'mai-image-2-6',
input: {
mai_model_tier: 'flash',
prompt:
'Замени серый фон на светлую кухню с утренним светом из окна, сам товар, его форму и надписи на упаковке не меняй',
image_urls: ['https://cdn.example.com/source-image-1.jpg'],
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "mai-image-2-6",
"input": {
"mai_model_tier": "flash",
"prompt": "Замени серый фон на светлую кухню с утренним светом из окна, сам товар, его форму и надписи на упаковке не меняй",
"image_urls": ["https://cdn.example.com/source-image-1.jpg"],
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
Передайте от 2 до 5 ссылок. Главный исходник ставьте первым и в prompt объясните, что взять с каждой картинки.
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "mai-image-2-6",
"input": {
"mai_model_tier": "standard",
"prompt": "Поставь кресло с первого изображения в гостиную со второго изображения, у окна слева, сохрани цвет и фактуру обивки кресла",
"image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.png"
]
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'mai-image-2-6',
input: {
mai_model_tier: 'standard',
prompt:
'Поставь кресло с первого изображения в гостиную со второго изображения, у окна слева, сохрани цвет и фактуру обивки кресла',
image_urls: [
'https://cdn.example.com/source-image-1.jpg',
'https://cdn.example.com/source-image-2.png',
],
},
}),
})
const data = await response.json()
console.log(data)
import requests
response = requests.post(
"https://bratuha.ru/api/v1/operations",
headers={
"Authorization": "Bearer brth_ваш_ключ",
"Content-Type": "application/json",
},
json={
"tool": "mai-image-2-6",
"input": {
"mai_model_tier": "standard",
"prompt": "Поставь кресло с первого изображения в гостиную со второго изображения, у окна слева, сохрани цвет и фактуру обивки кресла",
"image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.png",
],
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "3b8f2a51-6c0e-4d7a-9f41-2e5d8c7b9a03",
"status": "queued",
"tool": "mai-image-2-6",
"cost": 10,
"balance_after": 490,
"created_at": "2026-10-09T08:00:00.000Z"
}
{
"id": "3b8f2a51-6c0e-4d7a-9f41-2e5d8c7b9a03",
"status": "completed",
"tool": "mai-image-2-6",
"cost": 10,
"created_at": "2026-10-09T08:00:00.000Z",
"completed_at": "2026-10-09T08:00:41.000Z",
"result": {
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/mai-image-2-6/image-1.png"
]
},
"error_message": null
}
{
"id": "3b8f2a51-6c0e-4d7a-9f41-2e5d8c7b9a03",
"status": "failed",
"tool": "mai-image-2-6",
"cost": 10,
"created_at": "2026-10-09T08:00:00.000Z",
"completed_at": "2026-10-09T08:00:15.000Z",
"result": null,
"error_message": "Не удалось выполнить операцию"
}
Статус проверяется по id, который пришёл в ответ на создание операции. Сохраните его - без id результат конкретного запуска не получить. Опрашивать удобно раз в 3-5 секунд, пока статус не станет completed или failed.
curl -H "Authorization: Bearer brth_ваш_ключ" \
https://bratuha.ru/api/v1/operations/3b8f2a51-6c0e-4d7a-9f41-2e5d8c7b9a03
const operationId = '3b8f2a51-6c0e-4d7a-9f41-2e5d8c7b9a03'
const response = await fetch(
`https://bratuha.ru/api/v1/operations/${operationId}`,
{
headers: {
Authorization: 'Bearer brth_ваш_ключ',
},
},
)
const operation = await response.json()
console.log(operation)
После успешного выполнения в result приходит объект изображения:
{
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/mai-image-2-6/image-1.png"
]
}
urls - массив ссылок. Один запуск создаёт одно изображение, поэтому ссылка в массиве одна. Файл всегда в формате PNG.
Цена зависит от модели и, для генерации по тексту, от разрешения. Пропорции и web_grounding цену не меняют.
| Модель | Генерация 1K | Генерация 2K | Правка или композиция |
|---|---|---|---|
standard | 6 ₽ | 10 ₽ | 6 ₽ |
flash | 3 ₽ | 6 ₽ | 3 ₽ |
С image_urls модель сама выбирает размер около 1 Мп, поэтому правка и композиция всегда стоят как 1K, даже если в запросе передан resolution = 2K. Количество загруженных изображений на цену не влияет.
Примеры:
standard, без изображений, resolution = 2K - 10 ₽;flash, без изображений, resolution = 1K - 3 ₽;standard, три ссылки в image_urls - 6 ₽.POST /api/v1/operations не идемпотентен: повторный запрос создаёт новую операцию и снова списывает стоимость.POST нет, используйте GET /api/v1/operations/{id}.image_urls нужны внешние http/https URL, доступные из интернета. Локальные пути, localhost, blob: и data: не подходят.image_urls. Подходят .jpg, .jpeg, .png, .webp и .gif; GIF обрабатывается как статичная картинка.size и resolution работают только при генерации по тексту. В правке и композиции пропорции результата близки к исходному изображению.