Перейти к основному содержанию

Documentation Index

Fetch the complete documentation index at: https://apidoc.cometapi.com/llms.txt

Use this file to discover all available pages before exploring further.

Понимание основной концепции

MidJourney API имитирует взаимодействия с кнопками Discord. В отличие от типичных REST API, он работает как машина состояний, где каждая операция возвращает новые кнопки для следующего шага.

4 основных API

APIНазначениеКогда использовать
POST /mj/submit/imagineГенерация изображения по текстуОтправная точка для всех сценариев
GET /mj/task/\{id\}/fetchЗапросить статус задачи и получить кнопкиПосле каждого submit (опрашивайте до завершения)
POST /mj/submit/actionНажать кнопку (upscale, vary, zoom и т. д.)Когда нужно выполнить действие над изображением
POST /mj/submit/modalОтправить дополнительный вводТолько когда статус — MODAL

Полная схема workflow

┌─────────────────────────────────────────────────────────────────────────────┐
│                         MIDJOURNEY API WORKFLOW                             │
└─────────────────────────────────────────────────────────────────────────────┘

  ┌──────────────────┐
  │  POST /submit/   │  ← Шаг 1: Отправьте prompt, получите task_id
  │     imagine      │
  └────────┬─────────┘
           │ Returns: { "result": "task_id_1" }

  ┌──────────────────┐
  │ GET /task/{id}/  │  ← Шаг 2: Опрашивайте, пока status = "SUCCESS"
  │      fetch       │
  └────────┬─────────┘
           │ Returns: imageUrl + buttons[] (U1,U2,U3,U4,V1,V2,V3,V4,🔄)

  ┌──────────────────┐
  │  POST /submit/   │  ← Шаг 3: Нажмите кнопку, используя customId
  │     action       │
  └────────┬─────────┘
           │ Returns: { "result": "task_id_2" }

  ┌──────────────────┐
  │ GET /task/{id}/  │  ← Шаг 4: Опрашивайте новую задачу
  │      fetch       │
  └────────┬─────────┘

           ├─── status = "SUCCESS" → Готово! Получите imageUrl

           └─── status = "MODAL" → Нужен дополнительный ввод (см. Шаг 5)


           ┌──────────────────┐
           │  POST /submit/   │  ← Шаг 5: Отправьте mask/prompt для специальных операций
           │      modal       │
           └────────┬─────────┘
                    │ Returns: { "result": "task_id_3" }

           ┌──────────────────┐
           │ GET /task/{id}/  │  ← Шаг 6: Опрашивайте до SUCCESS
           │      fetch       │
           └──────────────────┘

Ключевая концепция: Buttons и customId

Каждая успешно завершённая задача возвращает массив buttons. У каждой кнопки есть customId, который используется для запуска следующего действия. Пример ответа от /mj/task/\{id\}/fetch:
{
  "status": "SUCCESS",
  "imageUrl": "https://api.cometapi.com/mj/image/xxx",
  "buttons": [
    { "customId": "MJ::JOB::upsample::1::abc123", "label": "U1" },
    { "customId": "MJ::JOB::upsample::2::abc123", "label": "U2" },
    { "customId": "MJ::JOB::variation::1::abc123", "label": "V1" },
    { "customId": "MJ::JOB::reroll::0::abc123", "emoji": "🔄" }
  ]
}
customId не является фиксированным значением. Он меняется для каждой задачи. Всегда берите его из массива buttons.

Справочник кнопок по этапам

После IMAGINE (изображение 4-grid)

Эти кнопки возвращаются, когда завершается начальная генерация изображения:
ButtoncustomId PatternActionResult
U1-U4MJ::JOB::upsample::1::xxxУвеличить одно изображениеОдно изображение в высоком разрешении
V1-V4MJ::JOB::variation::1::xxxСгенерировать вариацииНовый 4-grid
🔄MJ::JOB::reroll::0::xxx::SOLOПерегенерировать всёНовый 4-grid

После UPSCALE (одно изображение)

После upscaling становятся доступны инструменты редактирования:
LabelNeeds Modal?
Upscale (Subtle) / Upscale (2x)❌ Нет
Upscale (Creative) / Upscale (4x)❌ Нет
Vary (Subtle) 🪄❌ Нет
Vary (Strong) 🪄❌ Нет
Vary (Region) 🖌️✅ Да (mask)
Zoom Out 2x / 1.5x 🔍❌ Нет
Custom Zoom 🔍✅ Да (prompt)
⬅️➡️⬆️⬇️ Pan❌ Нет
Animate 🎞️❌ Нет
🔄 Reroll❌ Нет
Примечание: Метки кнопок и форматы customId могут различаться в зависимости от версии MJ, указанной в вашем prompt (например, --v 6.1 или --v 5.2). Всегда считывайте buttons из ответа API.
Кнопка Inpaint (Vary Region) появляется только после Upscale.

Полный пример: генерация и upscale

Шаг 1: Отправьте запрос imagine

curl -X POST 'https://api.cometapi.com/mj/submit/imagine' \
  -H 'Authorization: Bearer <YOUR_COMETAPI_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "botType": "MID_JOURNEY",
    "prompt": "a cute cat --v 6.1",
    "accountFilter": { "modes": ["FAST"] }
  }'
Ответ:
{ "code": 1, "result": "1768464763141701" }

Шаг 2: Опрашивайте статус задачи

curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
  -H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Ответ (после завершения):
{
  "status": "SUCCESS",
  "imageUrl": "https://api.cometapi.com/mj/image/1768464763141701",
  "buttons": [
    { "customId": "MJ::JOB::upsample::1::5f20922e-xxx", "label": "U1" },
    { "customId": "MJ::JOB::upsample::2::5f20922e-xxx", "label": "U2" },
    ...
  ]
}

Шаг 3: Нажмите U1 для upscale

curl -X POST 'https://api.cometapi.com/mj/submit/action' \
  -H 'Authorization: Bearer <YOUR_COMETAPI_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "taskId": "1768464763141701",
    "customId": "MJ::JOB::upsample::1::5f20922e-xxx"
  }'
Ответ:
{ "code": 1, "result": "1768464800000000" }

Шаг 4: Опрашивайте новую задачу и получите результат

curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
  -H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'

Когда требуется Modal?

Когда вы вызываете /mj/submit/action и статус задачи становится MODAL вместо SUCCESS, необходимо вызвать /mj/submit/modal, чтобы передать дополнительный ввод.

Подтверждённые операции Modal

OperationButtonWhat to Submit
InpaintVary (Region)maskBase64 (PNG mask) + prompt
Custom Zoom🔍 Custom Zoomprompt (например, “your prompt —zoom 2”)
Пример: поток Inpaint
# 1. Click Vary (Region) button via Action API
curl -X POST 'https://api.cometapi.com/mj/submit/action' \
  -H 'Authorization: Bearer <YOUR_COMETAPI_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{"taskId": "xxx", "customId": "MJ::Inpaint::xxx", "enableRemix": true}'

# 2. Poll and see status = "MODAL"
curl -X GET 'https://api.cometapi.com/mj/task/new_task_id/fetch'
# Response: { "status": "MODAL" }

# 3. Submit mask and prompt via Modal API
curl -X POST 'https://api.cometapi.com/mj/submit/modal' \
  -H 'Authorization: Bearer <YOUR_COMETAPI_KEY>' \
  -H 'Content-Type: application/json' \
  -d '{
    "taskId": "new_task_id",
    "prompt": "replace with golden crown",
    "maskBase64": "data:image/png;base64,..."
  }'

Выбор скоростного режима

Добавьте префикс режима скорости в путь:
ModePath PrefixExample
Fast/mj-fast/mj-fast/mj/submit/imagine
Turbo/mj-turbo/mj-turbo/mj/submit/imagine
Relax(по умолчанию)/mj/submit/imagine

Другие точки входа

Эти API — независимые точки входа, которые не следуют потоку imagine → action:
APIPurpose
POST /mj/submit/blendОбъединить 2–5 изображений в одно
POST /mj/submit/describeСгенерировать prompt по изображению
POST /mj/submit/videoПреобразовать изображение в видео
POST /mj/submit/editsРедактировать изображение с помощью mask

Советы по устранению неполадок

С учётом дизайна API и workflow, вот распространённые проблемы, с которыми вы можете столкнуться:
ProblemLikely CauseSolution
Не удаётся найти кнопку Vary (Region)Вы смотрите на изображение 4-gridСначала выполните Upscale (нажмите U1-U4), затем проверьте кнопки
Статус задачи завис на MODALОперация требует дополнительного вводаВызовите /mj/submit/modal с необходимыми данными
customId не работаетИспользуется устаревшее или захардкоженное значениеВсегда получайте актуальный customId из ответа /mj/task/\{id\}/fetch
Массив buttons пустЗадача всё ещё выполняетсяДождитесь status: "SUCCESS" перед обращением к buttons