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.
Comprende el concepto central
La API de MidJourney simula interacciones de botones de Discord. A diferencia de las API REST típicas, funciona como una máquina de estados donde cada operación devuelve nuevos botones para el siguiente paso.
Las 4 API principales
| API | Propósito | Cuándo usarla |
|---|
POST /mj/submit/imagine | Generación de texto a imagen | Punto de partida para todos los flujos de trabajo |
GET /mj/task/\{id\}/fetch | Consultar el estado de la tarea y obtener botones | Después de cada envío (consulta hasta que termine) |
POST /mj/submit/action | Hacer clic en un botón (upscale, vary, zoom, etc.) | Cuando quieras operar sobre una imagen |
POST /mj/submit/modal | Enviar entrada adicional | Solo cuando el estado es MODAL |
Diagrama completo del flujo de trabajo
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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 │
└──────────────────┘
Concepto clave: botones y customId
Cada tarea exitosa devuelve un arreglo buttons. Cada botón tiene un customId que usas para activar la siguiente acción.
Ejemplo de respuesta de /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 no es un valor fijo. Cambia en cada tarea. Obtenlo siempre del arreglo buttons.
Referencia de botones por etapa
Después de IMAGINE (imagen en cuadrícula 4-grid)
Estos botones se devuelven cuando se completa tu generación inicial de imagen:
| Button | Patrón de customId | Acción | Resultado |
|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | Mejorar una sola imagen | Imagen única en alta resolución |
| V1-V4 | MJ::JOB::variation::1::xxx | Generar variaciones | Nueva cuadrícula 4-grid |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | Regenerar todo | Nueva cuadrícula 4-grid |
Después de UPSCALE (imagen única)
Después de mejorar la imagen, obtienes acceso a herramientas de edición:
| Label | ¿Requiere Modal? |
|---|
| Upscale (Subtle) / Upscale (2x) | ❌ No |
| Upscale (Creative) / Upscale (4x) | ❌ No |
| Vary (Subtle) 🪄 | ❌ No |
| Vary (Strong) 🪄 | ❌ No |
| Vary (Region) 🖌️ | ✅ Sí (máscara) |
| Zoom Out 2x / 1.5x 🔍 | ❌ No |
| Custom Zoom 🔍 | ✅ Sí (prompt) |
| ⬅️➡️⬆️⬇️ Pan | ❌ No |
| Animate 🎞️ | ❌ No |
| 🔄 Reroll | ❌ No |
Nota: Las etiquetas de los botones y los formatos de customId pueden variar según la versión de MJ especificada en tu prompt (por ejemplo, --v 6.1 frente a --v 5.2). Lee siempre los botones desde la respuesta de la API.
El botón Inpaint (Vary Region) solo aparece después de Upscale.
Ejemplo completo: Generar y mejorar
Paso 1: Enviar solicitud 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"] }
}'
Respuesta:
{ "code": 1, "result": "1768464763141701" }
Paso 2: Consultar el estado de la tarea
curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Respuesta (cuando se 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" },
...
]
}
Paso 3: Hacer clic en U1 para mejorar
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"
}'
Respuesta:
{ "code": 1, "result": "1768464800000000" }
Paso 4: Consultar la nueva tarea y obtener el resultado
curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
¿Cuándo se requiere Modal?
Cuando llamas a /mj/submit/action y el estado de la tarea pasa a ser MODAL en lugar de SUCCESS, debes llamar a /mj/submit/modal para proporcionar entrada adicional.
Operaciones de Modal confirmadas
| Operation | Button | Qué enviar |
|---|
| Inpaint | Vary (Region) | maskBase64 (máscara PNG) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (p. ej., “your prompt —zoom 2”) |
Ejemplo: Flujo de 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,..."
}'
Selección del modo de velocidad
Agrega el prefijo de velocidad a la ruta:
| Modo | Prefijo de ruta | Ejemplo |
|---|
| Rápido | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Relax | (predeterminado) | /mj/submit/imagine |
Otros puntos de entrada
Estas APIs son puntos de entrada independientes que no siguen el flujo imagine → action:
| API | Propósito |
|---|
POST /mj/submit/blend | Combinar de 2 a 5 imágenes en una |
POST /mj/submit/describe | Generar un prompt a partir de una imagen |
POST /mj/submit/video | Convertir imagen en video |
POST /mj/submit/edits | Editar imagen con máscara |
Consejos para la resolución de problemas
Según el diseño y el flujo de trabajo de la API, estos son problemas comunes que puedes encontrar:
| Problema | Causa probable | Solución |
|---|
| No se puede encontrar el botón Vary (Region) | Mirando la imagen de cuadrícula 4 | Primero haz Upscale (haz clic en U1-U4), luego revisa los botones |
El estado de la tarea se queda en MODAL | La operación requiere entrada adicional | Llama a /mj/submit/modal con los datos requeridos |
customId no funciona | Usando un valor desactualizado o codificado de forma fija | Obtén siempre un customId reciente de la respuesta de /mj/task/\{id\}/fetch |
Arreglo buttons vacío | La tarea sigue en progreso | Espera a status: "SUCCESS" antes de acceder a los botones |