curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flux-2-pro",
"prompt": "A blue cat on the grass",
"resolution": "2MP",
"size": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-pro",
"prompt": "A blue cat on the grass",
"resolution": "2MP",
"size": "16:9"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "flux-2-pro",
prompt: "A blue cat on the grass",
resolution: "2MP",
size: "16:9"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2"
}
]
}
{
"error": {
"code": 401,
"message": "Не удалось выполнить аутентификацию. Проверьте API-ключ.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Недостаточно средств. Пополните баланс.",
"type": "payment_required"
}
}
Flux 2.0
Генерация изображений Flux 2.0
-
Асинхронная обработка: после отправки возвращается идентификатор задачи
-
Поддерживает генерацию по тексту, преобразование изображений и объединение нескольких референсов
-
Поддерживает модели Flex, Pro и Max с выходными изображениями до 4 МП
POST
/
v1
/
images
/
generations
curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flux-2-pro",
"prompt": "A blue cat on the grass",
"resolution": "2MP",
"size": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-pro",
"prompt": "A blue cat on the grass",
"resolution": "2MP",
"size": "16:9"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "flux-2-pro",
prompt: "A blue cat on the grass",
resolution: "2MP",
size: "16:9"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2"
}
]
}
{
"error": {
"code": 401,
"message": "Не удалось выполнить аутентификацию. Проверьте API-ключ.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Недостаточно средств. Пополните баланс.",
"type": "payment_required"
}
}
curl --request POST \
--url https://api.apimart.ai/v1/images/generations \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{
"model": "flux-2-pro",
"prompt": "A blue cat on the grass",
"resolution": "2MP",
"size": "16:9"
}'
import requests
url = "https://api.apimart.ai/v1/images/generations"
payload = {
"model": "flux-2-pro",
"prompt": "A blue cat on the grass",
"resolution": "2MP",
"size": "16:9"
}
headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json())
const url = "https://api.apimart.ai/v1/images/generations";
const payload = {
model: "flux-2-pro",
prompt: "A blue cat on the grass",
resolution: "2MP",
size: "16:9"
};
const headers = {
"Authorization": "Bearer <token>",
"Content-Type": "application/json"
};
fetch(url, {
method: "POST",
headers: headers,
body: JSON.stringify(payload)
})
.then(response => response.json())
.then(data => console.log(data))
.catch(error => console.error("Error:", error));
{
"code": 200,
"data": [
{
"status": "submitted",
"task_id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2"
}
]
}
{
"error": {
"code": 401,
"message": "Не удалось выполнить аутентификацию. Проверьте API-ключ.",
"type": "authentication_error"
}
}
{
"error": {
"code": 402,
"message": "Недостаточно средств. Пополните баланс.",
"type": "payment_required"
}
}
Поддерживаемые модели
| Модель | Описание |
|---|---|
flux-2-flex | Поддерживает точную настройку числа шагов семплирования и силы следования промпту |
flux-2-pro | Сочетает скорость и качество, подходит для большинства рабочих процессов |
flux-2-max | Версия с максимальным качеством для задач с повышенными требованиями к изображению |
Авторизация
string
обязательно
Для всех конечных точек требуется аутентификация с помощью Bearer Token.Получение API-ключа:Перейдите на страницу управления API-ключами, чтобы получить API-ключ.Добавьте его в заголовок запроса:
Authorization: Bearer YOUR_API_KEY
Тело запроса
string
обязательно
Название модели:
flux-2-flex— модель Flex с возможностью точной настройкиflux-2-pro— универсальная модель Proflux-2-max— модель Max с максимальным качеством
boolean
по умолчанию:"false"
Выполнять ли проверку содержимого перед отправкой задачи генерации изображения.
true: проверить промпты и входные изображения с помощьюomni-moderation-latestfalseили параметр не указан: не отправлять запрос на проверку, без дополнительных затрат и задержки (по умолчанию)
string
обязательно
Текстовое описание для генерации или редактирования изображения.
string
по умолчанию:"2MP"
Уровень разрешения выходного изображения:
1MP2MP— по умолчанию3MP4MP
1MP соответствует 1,048,576 пикселям.Для обратной совместимости поддерживаются псевдонимы: 512, 512P и 1M соответствуют 1MP; 1K и 1024 — 2MP; 2K и 2048 — 3MP; 4K — 4MP. Другие значения отклоняются.Фактические размеры также зависят от size. Если одновременно указаны width и height, используются точные размеры в пикселях.string
по умолчанию:"1:1"
Соотношение сторон или размеры выходного изображения в пикселях.
size также поддерживает auto: при передаче image_urls используется соотношение сторон референсного изображения, а текущий уровень resolution сохраняется; без референсного изображения применяется значение по умолчанию 1:1.Поддерживаются следующие варианты размера:1:1— квадрат (по умолчанию)4:3— горизонтальное3:4— вертикальное16:9— широкоформатное9:16— вертикальное широкоформатное3:2— классическое горизонтальное2:3— классическое вертикальное21:9— сверхширокоформатное9:21— сверхвертикальноеauto— использовать соотношение сторон референсного изображения
"ширинаxвысота", например "1024x1536".Приоритет параметров размера: пара width + height, затем строка пикселей в size, затем resolution + соотношение сторон в size. Если ничего не указано, используется 2MP + 1:1 (1440×1440).integer
Точная ширина выходного изображения в пикселях. Необходимо передавать вместе с
height; каждое значение должно быть не меньше 64. Если передан только один из параметров, задача завершится с ошибкой.width и height имеют наивысший приоритет и при совместной передаче переопределяют resolution и size.integer
Точная высота выходного изображения в пикселях. Необходимо передавать вместе с
width; каждое значение должно быть не меньше 64. Если передан только один из параметров, задача завершится с ошибкой.Общее число пикселей выходного изображения не должно превышать 4 МП: width × height ≤ 4 194 304.array
Список референсных изображений для преобразования изображения или объединения нескольких референсов.Ограничения:
- Не более 8 изображений
- Поддерживаются общедоступные URL
- Поддерживаются изображения в формате Base64
- Суммарное число пикселей выходного изображения и всех референсов не должно превышать 9 МП
string
по умолчанию:"jpeg"
Формат выходного изображения:
jpeg, png или webp. Значение по умолчанию — jpeg.integer
по умолчанию:"1"
Число генерируемых изображений. Поддерживается только значение
1.integer
Случайное начальное значение. Фиксированный seed при остальных неизменных параметрах позволяет воспроизвести тот же результат; если параметр не передан, значение выбирается случайно.
boolean
по умолчанию:"false"
Включает или отключает улучшение промпта:
true— включеноfalse— отключено (по умолчанию); помогает уменьшить отклонение улучшенного промпта от исходного
Явно укажите false, чтобы отключить переформулирование промпта.
integer
по умолчанию:"2"
Уровень допустимости при проверке контента в диапазоне от 0 до 5. Чем выше значение, тем менее строгая проверка применяется.
integer
по умолчанию:"50"
Число шагов семплирования; поддерживается только моделью
flux-2-flex. Диапазон: 1–50. Большие значения обычно повышают детализацию, но увеличивают время генерации.number
по умолчанию:"5.0"
Сила следования промпту; поддерживается только моделью
flux-2-flex. Диапазон: 1.5–10. При больших значениях результат обычно точнее следует промпту.Таблица разрешений
| Соотношение | 1MP | 2MP (по умолчанию) | 3MP | 4MP |
|---|---|---|---|---|
1:1 | 1024×1024 | 1440×1440 | 1536×1536 | 2048×2048 |
4:3 | 1152×864 | 1664×1248 | 1824×1360 | 2336×1760 |
3:4 | 864×1152 | 1248×1664 | 1360×1824 | 1760×2336 |
16:9 | 1344×752 | 1920×1072 | 2048×1152 | 2720×1536 |
9:16 | 752×1344 | 1072×1920 | 1152×2048 | 1536×2720 |
3:2 | 1248×832 | 1728×1152 | 1872×1248 | 2496×1664 |
2:3 | 832×1248 | 1152×1728 | 1248×1872 | 1664×2496 |
21:9 | 1504×640 | 2176×928 | 2304×992 | 3072×1312 |
9:21 | 640×1504 | 928×2176 | 992×2304 | 1312×3072 |
Примеры использования
Базовая генерация по тексту{
"model": "flux-2-pro",
"prompt": "Cyberpunk city at night, neon lights reflected on wet streets",
"resolution": "1MP",
"size": "16:9"
}
{
"model": "flux-2-max",
"prompt": "Snow-covered mountains and a lake in the morning mist, rich details, cinematic",
"resolution": "4MP",
"size": "3:2"
}
{
"model": "flux-2-pro",
"prompt": "A blue cat",
"width": 1024,
"height": 1536
}
{
"model": "flux-2-pro",
"prompt": "Place the person from image 1 into the scene from image 2 and harmonize lighting and colors",
"image_urls": [
"https://example.com/person.jpg",
"https://example.com/scene.jpg"
],
"resolution": "2MP",
"size": "16:9"
}
{
"model": "flux-2-flex",
"prompt": "Minimalist poster with the headline SUMMER SALE and the caption 50% OFF",
"resolution": "3MP",
"size": "3:4",
"steps": 50,
"guidance": 6.5
}
Ответ
После успешной отправкиdata представляет собой массив. Идентификатор задачи находится в data[0].task_id.
integer
Код состояния ответа.
array
Получение результата задачи
Задача обрабатывается асинхронно. Используйтеtask_id из ответа на отправку в следующем запросе, пока статус не изменится на completed или failed:
curl --request GET \
--url https://api.apimart.ai/v1/tasks/task_01KFG5BBFNK1YQDTJDZY0P0QT2 \
--header 'Authorization: Bearer <token>'
| Статус | Описание |
|---|---|
submitted / pending | Задача принята или находится в очереди; продолжайте опрос |
processing | Изображение генерируется; продолжайте опрос |
completed | Задача завершена; URL изображения находится в result.images[0].url[0] |
failed | Задача завершилась с ошибкой; причина находится в data.error.message, средства возвращаются полностью |
{
"code": 200,
"data": {
"id": "task_01KFG5BBFNK1YQDTJDZY0P0QT2",
"status": "completed",
"progress": 100,
"result": {
"images": [
{
"url": [
"https://upload.apimart.ai/f/image/xxxxxxxx-flux-2.jpeg"
],
"expires_at": 1785220083
}
]
}
}
}
result.images[].url — массив строк. Модели этой серии генерируют ровно одно изображение за запрос, поэтому используйте url[0]. Срок действия URL изображения определяется Unix-временем expires_at в том же объекте. Сохраните результат до указанного момента.
Пример ответа для задачи, завершившейся с ошибкой:
{
"code": 200,
"data": {
"status": "failed",
"error": {
"type": "task_failed",
"code": "task_failed",
"message": "`steps` must be between 1 and 50 (got 0)"
}
}
}
task_id, затем при опросе задача переходит в failed. Полная причина всегда находится в error.message; значение error.code — task_failed. За неуспешную задачу средства возвращаются полностью.
Примечания
- Ограничение размера: выходное изображение не должно превышать 4 МП; ширина и высота должны составлять не менее 64 пикселей.
- Общее ограничение по пикселям: суммарное число пикселей выходного изображения и всех референсов не должно превышать 9 МП.
- Требования к референсам: поддерживается не более 8 референсных изображений по общедоступным URL или в формате Base64.
- Фиксированное число изображений: параметр
nдолжен иметь значение1. - Улучшение промпта:
prompt_upsamplingотключён по умолчанию. - Параметры только для Flex:
stepsиguidanceприменимы только кflux-2-flex. - Асинхронная задача: после успешной отправки опрашивайте
/v1/tasks/{task_id}, чтобы получить окончательный результат. - Ссылка на результат: срок действия URL изображения определяется полем
expires_atв ответе.