Создаёт изображения по текстовому заданию и редактирует готовые картинки, в том числе с несколькими исходниками и сложной вёрсткой с текстом. Цена: обычная версия - 4.5 ₽ и Pro - 9 ₽ за 1 изображение.
Общая документация Public API · API-ключ можно создать в настройках аккаунта
Qwen Image 3.0 создаёт изображения по текстовому заданию и редактирует уже готовые картинки, если добавить исходники. Модель хорошо держит текст в кадре: подходит для меню, вывесок, карточек товара, афиш и другой вёрстки с надписями.
Практические сценарии:
Каждый вызов создаёт асинхронную операцию. API сразу возвращает id и стартовый статус, а готовый результат нужно получать отдельной проверкой статуса.
POST /api/v1/operationsAuthorization: Bearer brth_...id и стартовый статус.У модели есть два переключателя режима:
qwen_model_tier выбирает версию - standard (быстрее и дешевле) или pro (точнее работает с текстом и сложной вёрсткой, дороже);image_urls определяет, будет это генерация с нуля или редактирование - если массив не передан или пустой, модель создаёт изображение только по prompt.{
"tool": "qwen-image-3-0",
"input": {
"...": "..."
}
}
tool - slug нейросети, всегда "qwen-image-3-0".input - параметры запуска. Все поля передаются напрямую внутри этого объекта, без вложенного input.input.image_urls, negative_prompt и prompt_extend_mode нужны не всегда - подробности в таблице параметров ниже.| Параметр | Тип | Обязательный | Описание |
|---|---|---|---|
qwen_model_tier | enum | Да | Версия модели. Варианты: standard (Обычная) - быстрее и дешевле, подходит для большинства задач; pro (Pro) - лучше держит плотный текст, меню, газеты, раскадровки и сложную вёрстку, но дороже. |
prompt | string | Да | Текстовое задание: что создать или как изменить изображение. Чем точнее описаны сцена, стиль, надписи и расположение объектов, тем ближе результат. От 2 до 18000 символов. |
image_urls | string[] (url) | Нет | Массив внешних URL изображений для редактирования, от 1 до 3 файлов. Если поле не передано или массив пустой, выполняется генерация с нуля. Разрешены только http/https ссылки. Допустимые расширения: .jpg, .jpeg, .png, .bmp, .tif, .tiff, .webp, .gif. Каждый файл до 10 МБ. |
resolution | enum | Да | Детализация результата. Варианты: 1K, 2K - 2K даёт более детальную картинку. |
size | enum | Да | Соотношение сторон итогового изображения. Варианты: 1:1, 4:3, 3:4, 16:9, 9:16, 3:2, 2:3. |
n | number | Да | Количество изображений за один запуск, от 1 до 6. Итоговая цена умножается на это число. |
use_negative_prompt | boolean | Нет | Включает учёт negative_prompt. Если false или не передано, negative_prompt игнорируется, даже если он заполнен. |
negative_prompt | string | Нет | Что не должно быть в результате: лишние люди, водяные знаки, текст, размытый фон. Учитывается только вместе с use_negative_prompt = true. Максимум 2000 символов. |
curl -X POST https://bratuha.ru/api/v1/operations \
-H "Authorization: Bearer brth_ваш_ключ" \
-H "Content-Type: application/json" \
-d '{
"tool": "qwen-image-3-0",
"input": {
"qwen_model_tier": "standard",
"prompt": "Меню кофейни в бежевых тонах: крупный заголовок «Меню», три позиции с ценами, аккуратный шрифт, мягкий студийный свет",
"resolution": "2K",
"size": "3:4",
"n": 1
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'qwen-image-3-0',
input: {
qwen_model_tier: 'standard',
prompt:
'Меню кофейни в бежевых тонах: крупный заголовок «Меню», три позиции с ценами, аккуратный шрифт, мягкий студийный свет',
resolution: '2K',
size: '3:4',
n: 1,
},
}),
})
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': 'qwen-image-3-0',
'input': {
'qwen_model_tier': 'standard',
'prompt': 'Меню кофейни в бежевых тонах: крупный заголовок «Меню», три позиции с ценами, аккуратный шрифт, мягкий студийный свет',
'resolution': '2K',
'size': '3:4',
'n': 1,
},
},
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": "qwen-image-3-0",
"input": {
"qwen_model_tier": "pro",
"prompt": "Возьми позу человека с первого изображения и надень на него куртку со второго изображения, сохрани освещение и фон первого кадра",
"image_urls": [
"https://cdn.example.com/source-image-1.jpg",
"https://cdn.example.com/source-image-2.png"
],
"resolution": "2K",
"size": "1:1",
"n": 2,
"use_negative_prompt": true,
"negative_prompt": "лишние люди, водяные знаки, размытый фон"
}
}'
const response = await fetch('https://bratuha.ru/api/v1/operations', {
method: 'POST',
headers: {
Authorization: 'Bearer brth_ваш_ключ',
'Content-Type': 'application/json',
},
body: JSON.stringify({
tool: 'qwen-image-3-0',
input: {
qwen_model_tier: 'pro',
prompt:
'Возьми позу человека с первого изображения и надень на него куртку со второго изображения, сохрани освещение и фон первого кадра',
image_urls: [
'https://cdn.example.com/source-image-1.jpg',
'https://cdn.example.com/source-image-2.png',
],
resolution: '2K',
size: '1:1',
n: 2,
use_negative_prompt: true,
negative_prompt: 'лишние люди, водяные знаки, размытый фон',
},
}),
})
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': 'qwen-image-3-0',
'input': {
'qwen_model_tier': 'pro',
'prompt': 'Возьми позу человека с первого изображения и надень на него куртку со второго изображения, сохрани освещение и фон первого кадра',
'image_urls': [
'https://cdn.example.com/source-image-1.jpg',
'https://cdn.example.com/source-image-2.png',
],
'resolution': '2K',
'size': '1:1',
'n': 2,
'use_negative_prompt': True,
'negative_prompt': 'лишние люди, водяные знаки, размытый фон',
},
},
timeout=30,
)
print(response.status_code)
print(response.json())
{
"id": "op_uuid-123",
"status": "queued",
"tool": "qwen-image-3-0",
"cost": 4.5,
"balance_after": 495,
"created_at": "2026-08-08T12:00:00Z"
}
{
"id": "op_uuid-123",
"status": "completed",
"tool": "qwen-image-3-0",
"cost": 4.5,
"created_at": "2026-08-08T12:00:00Z",
"completed_at": "2026-08-08T12:00:24Z",
"result": {
"type": "image",
"urls": ["https://storage.bratuha.ru/results/qwen-image-3-0/image-1.jpg"]
},
"error_message": null
}
{
"id": "op_uuid-123",
"status": "failed",
"tool": "qwen-image-3-0",
"cost": 4.5,
"created_at": "2026-08-08T12:00:00Z",
"completed_at": "2026-08-08T12:00:24Z",
"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 operationId = 'op_uuid-123'
const response = await fetch(
`https://bratuha.ru/api/v1/operations/${operationId}`,
{
headers: {
Authorization: 'Bearer brth_ваш_ключ',
},
},
)
const operation = await response.json()
console.log(operation.status, operation.result)
После успешного завершения result возвращается в таком формате:
{
"type": "image",
"urls": [
"https://storage.bratuha.ru/results/qwen-image-3-0/image-1.jpg",
"https://storage.bratuha.ru/results/qwen-image-3-0/image-2.jpg"
]
}
type - всегда "image".urls - массив ссылок на готовые изображения. Количество ссылок соответствует значению n из запроса: от 1 до 6.Базовая цена зависит от версии модели и количества изображений n:
qwen_model_tier = standard - от 4,5 ₽ за 1 изображение;qwen_model_tier = pro - от 9 ₽ за 1 изображение.Итоговая цена = ставка версии × n. Разрешение, соотношение сторон, негативный промпт и улучшение задания на цену не влияют.
| Версия | Количество изображений (n) | Цена |
|---|---|---|
standard | 1 | 4,5 ₽ |
standard | 2 | 9 ₽ |
standard | 3 | 13,5 ₽ |
standard | 4 | 18 ₽ |
standard | 5 | 22,5 ₽ |
standard | 6 | 27 ₽ |
pro | 1 | 9 ₽ |
pro | 2 | 18 ₽ |
pro | 3 | 27 ₽ |
pro | 4 | 36 ₽ |
pro | 5 | 45 ₽ |
pro | 6 | 54 ₽ |
Если на балансе недостаточно средств, операция не создаётся и API возвращает ошибку insufficient_funds.
POST /api/v1/operations не идемпотентен: каждый повторный запрос создаёт новую операцию и повторно списывает стоимость при успешном создании.queued, затем отдельно проверяете статус по id.image_urls подходят только внешние http/https ссылки без localhost, loopback и private IP.image_urls используйте только .jpg, .jpeg, .png, .bmp, .tif, .tiff, .webp, .gif. Форматы HEIC/HEIF, которые поддерживаются при загрузке файлов через интерфейс сайта, в Public API по URL не принимаются.image_urls, каждое до 10 МБ.negative_prompt попадает в запрос к модели только вместе с use_negative_prompt = true и непустым текстом.prompt_extend_mode = agent доступен только без image_urls. Если передать image_urls вместе с agent, сервер использует direct.prompt_extend = true) может добавить детали, которых вы не просили напрямую. Для точной работы по макету или тексту лучше писать конкретный prompt и оставить prompt_extend = false.prompt - с описанием сцены, стиля, надписей и расположения объектов, - тем стабильнее результат, особенно при мелком тексте и сложной вёрстке.prompt_extend | boolean | Нет | Включает автоматическое расширение и уточнение задания перед генерацией. Для предсказуемого результата держите выключенным. |
prompt_extend_mode | enum | Нет | Режим улучшения задания. Учитывается только при prompt_extend = true. Варианты: direct (Прямой) - предсказуемее, подходит и для генерации, и для редактирования; agent (Агентский) - сильнее меняет задание и работает только без загруженных image_urls. Если передать agent вместе с изображениями, сервер автоматически использует direct. |