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 | Генерація зображення з тексту | Початкова точка для всіх workflow |
GET /mj/task/\{id\}/fetch | Перевірка статусу task і отримання кнопок | Після кожного submit (опитуйте, доки не завершиться) |
POST /mj/submit/action | Натискання кнопки (upscale, vary, zoom тощо) | Коли потрібно виконати дію над зображенням |
POST /mj/submit/modal | Надсилання додаткового вводу | Лише коли статус MODAL |
Повна схема workflow
┌─────────────────────────────────────────────────────────────────────────────┐
│ MIDJOURNEY API WORKFLOW │
└─────────────────────────────────────────────────────────────────────────────┘
┌──────────────────┐
│ POST /submit/ │ ← Step 1: Submit prompt, get task_id
│ imagine │
└────────┬─────────┘
│ Returns: { "result": "task_id_1" }
▼
┌──────────────────┐
│ GET /task/{id}/ │ ← Step 2: Poll until status = "SUCCESS"
│ fetch │
└────────┬─────────┘
│ Returns: imageUrl + buttons[] (U1,U2,U3,U4,V1,V2,V3,V4,🔄)
▼
┌──────────────────┐
│ POST /submit/ │ ← Step 3: Click a button using customId
│ action │
└────────┬─────────┘
│ Returns: { "result": "task_id_2" }
▼
┌──────────────────┐
│ GET /task/{id}/ │ ← Step 4: Poll the new task
│ fetch │
└────────┬─────────┘
│
├─── status = "SUCCESS" → Done! Get imageUrl
│
└─── status = "MODAL" → Need additional input (see Step 5)
│
▼
┌──────────────────┐
│ POST /submit/ │ ← Step 5: Submit mask/prompt for special operations
│ modal │
└────────┬─────────┘
│ Returns: { "result": "task_id_3" }
▼
┌──────────────────┐
│ GET /task/{id}/ │ ← Step 6: Poll until SUCCESS
│ fetch │
└──────────────────┘
Кожен успішно завершений task повертає масив 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 не є фіксованим значенням. Він змінюється для кожного task. Завжди отримуйте його з масиву buttons.
Довідник по кнопках за етапами
Після IMAGINE (зображення 4-grid)
Ці кнопки повертаються, коли початкова генерація зображення завершена:
| Button | customId Pattern | Action | Result |
|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | Збільшити окреме зображення | Одне зображення у високій роздільній здатності |
| V1-V4 | MJ::JOB::variation::1::xxx | Згенерувати варіації | Новий 4-grid |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | Згенерувати все повторно | Новий 4-grid |
Після UPSCALE (одне зображення)
Після збільшення ви отримуєте доступ до інструментів редагування:
| Label | Needs 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). Завжди зчитуйте кнопки з відповіді API.
Кнопка Inpaint (Vary Region) з’являється лише після Upscale.
Повний приклад: Згенерувати та збільшити
Крок 1: Надішліть imagine-запит
curl -X POST 'https://api.cometapi.com/mj/submit/imagine' \
-H "Authorization: Bearer $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 $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 для збільшення
curl -X POST 'https://api.cometapi.com/mj/submit/action' \
-H "Authorization: Bearer $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 $COMETAPI_KEY"
Коли потрібен Modal?
Коли ви викликаєте /mj/submit/action і статус завдання стає MODAL замість SUCCESS, ви повинні викликати /mj/submit/modal, щоб надати додаткові вхідні дані.
Підтверджені операції Modal
| Operation | Button | What to Submit |
|---|
| Inpaint | Vary (Region) | maskBase64 (PNG mask) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (наприклад, “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 $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 $COMETAPI_KEY" \
-H 'Content-Type: application/json' \
-d '{
"taskId": "new_task_id",
"prompt": "replace with golden crown",
"maskBase64": "data:image/png;base64,..."
}'
Вибір режиму швидкості
Додайте префікс швидкості до шляху:
| Режим | Префікс шляху | Приклад |
|---|
| Fast | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Relax | (за замовчуванням) | /mj/submit/imagine |
Інші точки входу
Ці API — незалежні точки входу, які не дотримуються потоку imagine → action:
| API | Призначення |
|---|
POST /mj/submit/blend | Змішати 2–5 зображень в одне |
POST /mj/submit/describe | Згенерувати prompt із зображення |
POST /mj/submit/video | Перетворити зображення на відео |
POST /mj/submit/edits | Редагувати зображення за допомогою mask |
Поради з усунення проблем
На основі дизайну API та робочого процесу, ось поширені проблеми, з якими ви можете зіткнутися:
| Проблема | Ймовірна причина | Рішення |
|---|
| Не вдається знайти кнопку Vary (Region) | Переглядаєте зображення 4-grid | Спочатку виконайте upscale (натисніть U1-U4), потім перевірте кнопки |
Статус завдання завис на MODAL | Операція потребує додаткового вводу | Викличте /mj/submit/modal з потрібними даними |
customId не працює | Використовується застаріле або жорстко закодоване значення | Завжди отримуйте свіжий customId із відповіді /mj/task/\{id\}/fetch |
Порожній масив buttons | Завдання все ще виконується | Дочекайтеся status: "SUCCESS" перед доступом до кнопок |