🎨 302.AI Midjourney API

完整的 Midjourney 图像生成 API 调用指南,包含局部重绘工作流程

Полное руководство по API генерации изображений Midjourney, включая рабочий процесс частичной перерисовки

📋 系统概览 Обзор системы

302.AI Midjourney API 提供了完整的 Midjourney 图像生成能力,支持文生图、图片放大、变体生成、局部重绘等多种操作。所有操作采用异步模式,通过任务ID轮询获取结果。 302.AI Midjourney API предоставляет полные возможности генерации изображений Midjourney, поддерживая генерацию изображений из текста, увеличение изображений, создание вариантов, частичную перерисовку и другие операции. Все операции используют асинхронный режим, результаты получаются путем опроса по ID задачи.

🖼️ Imagine

POST

提交文生图任务,输入提示词生成四宫格图片

Отправка задачи генерации изображения, ввод подсказки для создания сетки 4 изображений

💰 0.05 PTC/запрос

🔍 Fetch

GET

查询任务状态和结果,轮询直到任务完成

Запрос статуса и результата задачи, опрос до завершения

💰 0 PTC/次 (免费)запрос (бесплатно)

⚡ Action

POST

执行后续操作:放大(U)、变体(V)、重绘等

Выполнение последующих операций: увеличение(U), вариант(V), перерисовка и др.

💰 0.05 PTC/запрос

🎭 Modal

POST

局部重绘确认,提交蒙版和新提示词

Подтверждение частичной перерисовки, отправка маски и новой подсказки

💰 0.05 PTC/запрос

🔄 完整调用流程图 Полная блок-схема вызовов

1️⃣ 提交 ImagineОтправить Imagine

POST /mj/submit/imagine

输入: prompt, botType Ввод: prompt, botType

获取任务IDПолучить ID задачи

返回: taskIdОтвет: taskId

Пример: 1768083783720647

2️⃣ 轮询 FetchОпрос Fetch

GET /mj/task/{id}/fetch

等待 status=SUCCESSЖдать status=SUCCESS

🖼️ 四宫格图片生成Сетка 4 изображений

imageUrl + imageUrls[4]

获取 buttons 列表Получить список buttons

3️⃣ 放大图片 ActionУвеличить Action

customId: MJ::JOB::upsample::1::

选择 U1-U4 放大单张Выбрать U1-U4 для увеличения

轮询新任务Опрос новой задачи

GET /mj/task/{newId}/fetch

等待放大完成Ждать завершения увеличения

🎯 高清单图HD изображение

新增更多操作按钮Новые кнопки операций

包含 Vary (Region) 等Включая Vary (Region) и др.
↓ 选择后续操作 ↓ ↓ Выбрать следующую операцию ↓

🔍 Upscale

进一步放大Доп. увеличение

🪄 Vary

微调/强变Вариации

🖌️ Region

局部重绘Частич. перерисовка

🔄 Zoom

缩放扩展Масштаб

🖌️ 局部重绘特殊流程 🖌️ Специальный процесс частичной перерисовки

4️⃣ 触发 Vary (Region)Запустить Vary (Region)

Action 提交 Inpaint customIdAction отправить Inpaint customId

MJ::Inpaint::1::uuid::SOLO

⚠️ 等待确认状态Ожидание подтверждения

code: 21

"Waiting for window confirm"

5️⃣ Modal 确认Подтверждение Modal

POST /mj/submit/modal

提交: taskId + maskBase64 + promptОтправить: taskId + maskBase64 + prompt

轮询最终结果Опрос финального результата

GET /mj/task/{finalId}/fetch

等待重绘完成Ждать завершения перерисовки

局部重绘完成Перерисовка завершена

获取重绘后的图片Получить перерисованное изображение

📚 API 详细文档 Подробная документация API

🖼️ Imagine - 文生图Текст в изображение

POST
https://api.302.ai/mj/submit/imagine
备用Альтернативный: https://api.302ai.cn/mj/submit/imagine
💰 0.05 PTC/запрос

请求头 HeadersЗаголовки Headers

参数Параметр 类型Тип 必填Обязат. 说明Описание
mj-api-secret string Да 302.AI 后台的 API KeyAPI Key из панели 302.AI

请求体 BodyТело запроса Body

参数Параметр 类型Тип 必填Обязат. 说明Описание
prompt string Да 提示词Подсказка
botType string Нет MID_JOURNEY (默认) 或 NIJI_JOURNEYMID_JOURNEY (по умолч.) или NIJI_JOURNEY
base64Array array Нет 垫图 base64 数组Массив base64 опорных изображений
notifyHook string Нет 回调地址URL обратного вызова
state string Нет 自定义参数Пользовательский параметр

请求示例Пример запроса

JSON
{
  "base64Array": [],
  "botType": "MID_JOURNEY",
  "notifyHook": "",
  "prompt": "Cat",
  "state": ""
}

响应示例Пример ответа

JSON
{
  "code": 1,
  "description": "提交成功Успешно отправлено",
  "result": "1768083783720647",
  "properties": {}
}

响应状态码Коды ответа

1 提交成功Успешно
22 排队中В очереди
其他Другие 错误Ошибка

🔍 Fetch - 获取任务Получить задачу

GET
https://api.302.ai/mj/task/{id}/fetch
💰 0 PTC/次 (免费)запрос (бесплатно)

路径参数Параметры пути

参数Параметр 类型Тип 必填Обязат. 说明Описание
id string Да 任务 IDID задачи

任务状态枚举Перечисление статусов

NOT_START 未开始Не начато
SUBMITTED 已提交Отправлено
IN_PROGRESS 进行中В процессе
SUCCESS 成功Успех
FAILURE 失败Ошибка
MODAL 模态状态Модальное состояние

响应示例(成功)Пример ответа (успех)

JSON
{
  "action": "IMAGINE",
  "status": "SUCCESS",
  "progress": "100%",
  "id": "1768083783720647",
  "prompt": "Cat",
  "imageUrl": "https://file.302.ai/.../xxx.png",
  "imageUrls": [
    {"url": "https://file.302.ai/.../1.jpg"},
    {"url": "https://file.302.ai/.../2.jpg"},
    {"url": "https://file.302.ai/.../3.jpg"},
    {"url": "https://file.302.ai/.../4.jpg"}
  ],
  "buttons": [
    {"customId": "MJ::JOB::upsample::1::", "label": "U1"},
    {"customId": "MJ::JOB::upsample::2::", "label": "U2"},
    ...
  ]
}

⚡ Action - 修改操作Операция изменения

POST
https://api.302.ai/mj/submit/action
💰 0.05 PTC/запрос

请求体 BodyТело запроса Body

参数Параметр 类型Тип 必填Обязат. 说明Описание
customId string Да 动作标识(从 buttons 获取)Идентификатор действия (из buttons)
taskId string Да 原任务 IDID исходной задачи

常用 customId 格式Часто используемые форматы customId

操作Операция customId 说明Описание
U1-U4 MJ::JOB::upsample::1:: 放大第 N 张图Увеличить изобр. N
V1-V4 MJ::JOB::variation::1:: 第 N 张变体Вариант изобр. N
🖌️ Inpaint MJ::Inpaint::1::uuid::SOLO 局部重绘Частичная перерисовка
⚠️ 特殊情况:当 customId 是局部重绘 (Inpaint) 时,响应会返回 code: 21"Waiting for window confirm",此时需要调用 Modal 接口进行确认。 ⚠️ Особый случай:Когда customId — это частичная перерисовка (Inpaint), ответ вернет code: 21 и "Waiting for window confirm". Необходимо вызвать интерфейс Modal для подтверждения.

💡 实战经验总结 Практический опыт

📋 完整局部重绘流程示例📋 Полный пример процесса частичной перерисовки

1
提交 Imagine 生成四宫格Отправить Imagine для создания сетки 4 изображений
POST /mj/submit/imagine
{ "prompt": "Cat", "botType": "MID_JOURNEY" }

→ 返回Ответ taskId: "1768083783720647"
2
轮询 Fetch 等待完成Опрос Fetch до завершения
GET /mj/task/1768083783720647/fetch

→ 等待Ждать status: "SUCCESS"
→ 获取 buttons 列表Получить список buttons
3
放大图片(必须先放大才能局部重绘)Увеличить изображение (необходимо перед перерисовкой)
POST /mj/submit/action
{ "customId": "MJ::JOB::upsample::1::", "taskId": "1768083783720647" }

→ 返回新Ответ новый taskId: "1768084203818772"
⚠️ 重要:只有放大后的单张图片才有 "Vary (Region)" 按钮,四宫格无法直接局部重绘! ⚠️ Важно:Только увеличенное одиночное изображение имеет кнопку "Vary (Region)", сетка 4 изображений не поддерживает прямую частичную перерисовку!
4
触发局部重绘Запустить частичную перерисовку
POST /mj/submit/action
{ "customId": "MJ::Inpaint::1::uuid::SOLO", "taskId": "1768084203818772" }

→ 返回Ответ code: 21, "Waiting for window confirm"
→ 返回新Новый taskId: "1768084861949138"
5
Modal 确认(提交蒙版和新提示词)Подтверждение Modal (отправка маски и новой подсказки)
POST /mj/submit/modal
{
  "taskId": "1768084861949138",
  "maskBase64": "base64...",
  "prompt": "a golden retriever dog"
}

→ 返回新Новый taskId: "1768084924743471"
6
最终轮询获取重绘结果Финальный опрос для получения результата
GET /mj/task/1768084924743471/fetch

→ status: "SUCCESS"
→ imageUrl: 重绘后的图片地址URL перерисованного изображения
🎯

关键点 1: 任务 ID 链条Ключевой момент 1: Цепочка ID задач

每次操作都会产生新的 taskId,必须使用最新的 taskId 进行后续操作。

Каждая операция генерирует новый taskId, необходимо использовать последний taskId для следующих операций.

Imagine → taskId1 → Upscale → taskId2 → Inpaint → taskId3 → Modal → taskId4

⏱️

关键点 2: 轮询策略Ключевой момент 2: Стратегия опроса

建议轮询间隔 2-5 秒,避免频繁请求。当 statusSUCCESSFAILURE 时停止轮询。

Рекомендуемый интервал опроса 2-5 секунд. Остановить опрос когда status равен SUCCESS или FAILURE.

🖌️

关键点 3: 蒙版图片格式Ключевой момент 3: Формат маски

maskBase64 应该是黑白蒙版图片:

maskBase64 должен быть черно-белой маской:

  • 白色区域:需要重绘的部分Белые области: части для перерисовки
  • 黑色区域:保持不变的部分Черные области: неизменяемые части
🔄

关键点 4: code 21 特殊处理Ключевой момент 4: Специальная обработка code 21

当 Action 返回 code: 21 时,表示需要额外确认,需调用 Modal 接口。

Когда Action возвращает code: 21, требуется дополнительное подтверждение через интерфейс Modal.

🎛️ 可用操作按钮 Доступные кнопки операций

📐 四宫格图片可用按钮 (Imagine 结果) 📐 Кнопки для сетки 4 изображений (результат Imagine)
1️⃣
U1
放大第1张Увеличить 1
2️⃣
U2
放大第2张Увеличить 2
3️⃣
U3
放大第3张Увеличить 3
4️⃣
U4
放大第4张Увеличить 4
🎨
V1-V4
变体Вариант
🔄
Reroll
重新生成Перегенерация
🔍 放大后单图可用按钮 (Upscale 结果) 🔍 Кнопки после увеличения (результат Upscale)
🔬
Upscale (Subtle)
细节放大Детальное увелич.
🎨
Upscale (Creative)
创意放大Креативное увелич.
🪄
Vary (Subtle)
微调变体Легкий вариант
🪄
Vary (Strong)
强变体Сильный вариант
🖌️
Vary (Region)
局部重绘Частич. перерисовка
🔍
Zoom Out
缩放扩展Уменьшение масштаба
⬅️➡️⬆️⬇️
Pan
方向扩展Панорамирование
🎞️
Animate
动画Анимация
📝 customId 格式参考 📝 Справочник форматов customId
// Upscale (放大Увеличение)
"MJ::JOB::upsample::1::"                    // U1
"MJ::JOB::upsample::2::"                    // U2

// Variation (变体Вариант)
"MJ::JOB::variation::1::"                   // V1

// Reroll (重新生成Перегенерация)
"MJ::JOB::reroll::0::::SOLO"

// 放大后操作(需要 uuid)Операции после увеличения (требуется uuid)
"MJ::JOB::upsample_v7_2x_subtle::1::uuid::SOLO"    // Upscale (Subtle)
"MJ::JOB::upsample_v7_2x_creative::1::uuid::SOLO"  // Upscale (Creative)
"MJ::JOB::low_variation::1::uuid::SOLO"            // Vary (Subtle)
"MJ::JOB::high_variation::1::uuid::SOLO"           // Vary (Strong)
"MJ::Inpaint::1::uuid::SOLO"                       // Vary (Region)
"MJ::Outpaint::50::1::uuid::SOLO"                  // Zoom Out 2x
"MJ::Outpaint::75::1::uuid::SOLO"                  // Zoom Out 1.5x
"MJ::JOB::pan_left::1::uuid::SOLO"                 // Pan Left
"MJ::JOB::pan_right::1::uuid::SOLO"                // Pan Right
"MJ::JOB::pan_up::1::uuid::SOLO"                   // Pan Up
"MJ::JOB::pan_down::1::uuid::SOLO"                 // Pan Down