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.
Das Kernkonzept verstehen
Die MidJourney API simuliert Discord-Schaltflächeninteraktionen. Anders als typische REST-APIs arbeitet sie als Zustandsmaschine, bei der jeder Vorgang neue Schaltflächen für den nächsten Schritt zurückgibt.
Die 4 Kern-APIs
| API | Zweck | Wann verwenden |
|---|
POST /mj/submit/imagine | Text-zu-Bild-Generierung | Ausgangspunkt für alle Workflows |
GET /mj/task/\{id\}/fetch | Task-Status abfragen und Schaltflächen abrufen | Nach jedem Submit (abfragen, bis abgeschlossen) |
POST /mj/submit/action | Auf eine Schaltfläche klicken (upscale, vary, zoom usw.) | Wenn Sie ein Bild bearbeiten möchten |
POST /mj/submit/modal | Zusätzliche Eingaben senden | Nur wenn der Status MODAL ist |
Vollständiges Workflow-Diagramm
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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 │
└──────────────────┘
Schlüsselkonzept: Schaltflächen und customId
Jeder erfolgreiche Task gibt ein buttons-Array zurück. Jede Schaltfläche hat eine customId, mit der Sie die nächste Aktion auslösen.
Beispielantwort von /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 ist kein fester Wert. Er ändert sich bei jedem Task. Holen Sie ihn immer aus dem buttons-Array.
Nach IMAGINE (4er-Bildraster)
Diese Buttons werden zurückgegeben, wenn deine anfängliche Bildgenerierung abgeschlossen ist:
| Button | customId-Muster | Aktion | Ergebnis |
|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | Einzelnes Bild hochskalieren | Einzelnes Bild in hoher Auflösung |
| V1-V4 | MJ::JOB::variation::1::xxx | Variationen generieren | Neues 4er-Raster |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | Alle neu generieren | Neues 4er-Raster |
Nach UPSCALE (einzelnes Bild)
Nach dem Hochskalieren erhältst du Zugriff auf Bearbeitungswerkzeuge:
| Bezeichnung | Modal erforderlich? |
|---|
| Upscale (Subtle) / Upscale (2x) | ❌ Nein |
| Upscale (Creative) / Upscale (4x) | ❌ Nein |
| Vary (Subtle) 🪄 | ❌ Nein |
| Vary (Strong) 🪄 | ❌ Nein |
| Vary (Region) 🖌️ | ✅ Ja (Maske) |
| Zoom Out 2x / 1.5x 🔍 | ❌ Nein |
| Custom Zoom 🔍 | ✅ Ja (Prompt) |
| ⬅️➡️⬆️⬇️ Pan | ❌ Nein |
| Animate 🎞️ | ❌ Nein |
| 🔄 Reroll | ❌ Nein |
Hinweis: Button-Bezeichnungen und customId-Formate können je nach der in deinem Prompt angegebenen MJ-Version variieren (z. B. --v 6.1 vs --v 5.2). Lies die Buttons immer aus der API-Antwort aus.
Der Inpaint-Button (Vary Region) erscheint erst nach Upscale.
Vollständiges Beispiel: Generieren und hochskalieren
Schritt 1: Imagine-Request senden
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"] }
}'
Antwort:
{ "code": 1, "result": "1768464763141701" }
Schritt 2: Task-Status abfragen
curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
-H "Authorization: Bearer $COMETAPI_KEY"
Antwort (wenn abgeschlossen):
{
"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" },
...
]
}
Schritt 3: Auf U1 klicken, um hochzuskalieren
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"
}'
Antwort:
{ "code": 1, "result": "1768464800000000" }
Schritt 4: Neuen Task abfragen und Ergebnis abrufen
curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
-H "Authorization: Bearer $COMETAPI_KEY"
Wann ist Modal erforderlich?
Wenn du /mj/submit/action aufrufst und der Task-Status zu MODAL statt zu SUCCESS wird, musst du /mj/submit/modal aufrufen, um zusätzliche Eingaben bereitzustellen.
Bestätigte Modal-Operationen
| Operation | Button | Was zu senden ist |
|---|
| Inpaint | Vary (Region) | maskBase64 (PNG-Maske) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (z. B. “your prompt —zoom 2”) |
Beispiel: Inpaint-Ablauf
# 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,..."
}'
Auswahl des Geschwindigkeitsmodus
Fügen Sie dem Pfad ein Geschwindigkeitspräfix hinzu:
| Modus | Pfadpräfix | Beispiel |
|---|
| Fast | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Relax | (Standard) | /mj/submit/imagine |
Andere Einstiegspunkte
Diese APIs sind unabhängige Einstiegspunkte, die nicht dem imagine → action-Ablauf folgen:
| API | Zweck |
|---|
POST /mj/submit/blend | 2–5 Bilder zu einem zusammenführen |
POST /mj/submit/describe | Prompt aus einem Bild generieren |
POST /mj/submit/video | Bild in Video umwandeln |
POST /mj/submit/edits | Bild mit Maske bearbeiten |
Tipps zur Fehlerbehebung
Basierend auf dem API-Design und dem Workflow sind hier häufige Probleme, auf die Sie stoßen können:
| Problem | Wahrscheinliche Ursache | Lösung |
|---|
| Vary (Region)-Button nicht auffindbar | Anzeige des 4er-Bildrasters | Zuerst Upscale ausführen (auf U1–U4 klicken), dann die Buttons prüfen |
Task-Status bleibt bei MODAL hängen | Vorgang erfordert zusätzliche Eingaben | Rufen Sie /mj/submit/modal mit den erforderlichen Daten auf |
customId funktioniert nicht | Veralteten oder fest codierten Wert verwendet | Holen Sie immer eine aktuelle customId aus der Antwort von /mj/task/\{id\}/fetch |
Leeres buttons-Array | Task noch in Bearbeitung | Warten Sie auf status: "SUCCESS", bevor Sie auf die Buttons zugreifen |