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.
Comprendere il concetto di base
L’API MidJourney simula le interazioni dei pulsanti di Discord. A differenza delle tipiche API REST, funziona come una macchina a stati in cui ogni operazione restituisce nuovi pulsanti per il passaggio successivo.
Le 4 API principali
| API | Scopo | Quando usarla |
|---|
POST /mj/submit/imagine | Generazione di immagini da testo | Punto di partenza per tutti i workflow |
GET /mj/task/\{id\}/fetch | Interrogare lo stato del task e ottenere i pulsanti | Dopo ogni submit (interroga finché non è completato) |
POST /mj/submit/action | Fare clic su un pulsante (upscale, vary, zoom, ecc.) | Quando vuoi operare su un’immagine |
POST /mj/submit/modal | Inviare input aggiuntivo | Solo quando lo stato è MODAL |
Diagramma completo del 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 │
└──────────────────┘
Concetto chiave: pulsanti e customId
Ogni task completato con successo restituisce un array buttons. Ogni pulsante ha un customId che usi per attivare l’azione successiva.
Esempio di risposta da /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 non è un valore fisso. Cambia per ogni task. Ottienilo sempre dall’array buttons.
Riferimento dei pulsanti per fase
Dopo IMAGINE (immagine a griglia 4)
Questi pulsanti vengono restituiti quando la generazione iniziale dell’immagine è completata:
| Button | customId Pattern | Action | Result |
|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | Upscale di una singola immagine | Immagine singola ad alta risoluzione |
| V1-V4 | MJ::JOB::variation::1::xxx | Genera variazioni | Nuova griglia 4 |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | Rigenera tutto | Nuova griglia 4 |
Dopo UPSCALE (immagine singola)
Dopo l’upscaling, ottieni accesso agli strumenti di modifica:
| Label | Needs Modal? |
|---|
| Upscale (Subtle) / Upscale (2x) | ❌ No |
| Upscale (Creative) / Upscale (4x) | ❌ No |
| Vary (Subtle) 🪄 | ❌ No |
| Vary (Strong) 🪄 | ❌ No |
| Vary (Region) 🖌️ | ✅ Sì (mask) |
| Zoom Out 2x / 1.5x 🔍 | ❌ No |
| Custom Zoom 🔍 | ✅ Sì (prompt) |
| ⬅️➡️⬆️⬇️ Pan | ❌ No |
| Animate 🎞️ | ❌ No |
| 🔄 Reroll | ❌ No |
Nota: Le etichette dei pulsanti e i formati customId possono variare in base alla versione MJ specificata nel tuo prompt (ad esempio, --v 6.1 vs --v 5.2). Leggi sempre i pulsanti dalla risposta API.
Il pulsante Inpaint (Vary Region) appare solo dopo Upscale.
Esempio completo: genera e fai upscale
Passaggio 1: Invia una richiesta 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"] }
}'
Risposta:
{ "code": 1, "result": "1768464763141701" }
Passaggio 2: Interroga lo stato del task
curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
-H "Authorization: Bearer $COMETAPI_KEY"
Risposta (quando completa):
{
"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" },
...
]
}
Passaggio 3: Clicca U1 per fare upscale
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"
}'
Risposta:
{ "code": 1, "result": "1768464800000000" }
Passaggio 4: Interroga il nuovo task e ottieni il risultato
curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
-H "Authorization: Bearer $COMETAPI_KEY"
Quando è richiesto Modal?
Quando chiami /mj/submit/action e lo stato del task diventa MODAL invece di SUCCESS, devi chiamare /mj/submit/modal per fornire input aggiuntivo.
Operazioni Modal confermate
| Operation | Button | What to Submit |
|---|
| Inpaint | Vary (Region) | maskBase64 (mask PNG) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (ad esempio, “your prompt —zoom 2”) |
Esempio: flusso 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,..."
}'
Selezione della modalità di velocità
Aggiungi il prefisso di velocità al path:
| Modalità | Prefisso del path | Esempio |
|---|
| Fast | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Relax | (predefinita) | /mj/submit/imagine |
Altri punti di ingresso
Queste API sono punti di ingresso indipendenti che non seguono il flusso imagine → action:
| API | Scopo |
|---|
POST /mj/submit/blend | Unisce 2-5 immagini in una sola |
POST /mj/submit/describe | Genera un prompt a partire da un’immagine |
POST /mj/submit/video | Converte un’immagine in un video |
POST /mj/submit/edits | Modifica un’immagine con una maschera |
Suggerimenti per la risoluzione dei problemi
In base al design e al flusso di lavoro dell’API, ecco alcuni problemi comuni che potresti incontrare:
| Problema | Causa probabile | Soluzione |
|---|
| Non riesci a trovare il pulsante Vary (Region) | Stai guardando l’immagine 4-grid | Esegui prima l’upscale (clicca U1-U4), poi controlla i pulsanti |
Stato del task bloccato su MODAL | L’operazione richiede input aggiuntivi | Chiama /mj/submit/modal con i dati richiesti |
customId non funziona | Stai usando un valore obsoleto o hardcoded | Ottieni sempre un customId aggiornato dalla risposta di /mj/task/\{id\}/fetch |
Array buttons vuoto | Il task è ancora in corso | Attendi status: "SUCCESS" prima di accedere ai pulsanti |