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.
Entenda o conceito central
A API MidJourney simula interações de botões do Discord. Diferente de APIs REST típicas, ela funciona como uma máquina de estados, em que cada operação retorna novos botões para a próxima etapa.
As 4 APIs principais
| API | Finalidade | Quando usar |
|---|
POST /mj/submit/imagine | Geração de texto para imagem | Ponto de partida para todos os fluxos |
GET /mj/task/\{id\}/fetch | Consultar status da tarefa e obter botões | Após cada envio (consulte até concluir) |
POST /mj/submit/action | Clicar em um botão (upscale, vary, zoom etc.) | Quando você quiser operar em uma imagem |
POST /mj/submit/modal | Enviar entrada adicional | Somente quando o status for MODAL |
Diagrama completo do fluxo
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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 │
└──────────────────┘
Conceito-chave: botões e customId
Cada tarefa concluída com sucesso retorna um array buttons. Cada botão tem um customId que você usa para acionar a próxima ação.
Exemplo de resposta 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 não é um valor fixo. Ele muda a cada tarefa. Sempre obtenha esse valor do array buttons.
Referência de botões por etapa
Após IMAGINE (imagem em grade 4x)
Esses botões são retornados quando a geração inicial de imagem é concluída:
| Button | customId Pattern | Action | Result |
|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | Fazer upscale de uma única imagem | Imagem única em alta resolução |
| V1-V4 | MJ::JOB::variation::1::xxx | Gerar variações | Nova grade 4x |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | Regenerar tudo | Nova grade 4x |
Após UPSCALE (imagem única)
Após o upscale, você passa a ter acesso às ferramentas de edição:
| Label | Needs Modal? |
|---|
| Upscale (Subtle) / Upscale (2x) | ❌ Não |
| Upscale (Creative) / Upscale (4x) | ❌ Não |
| Vary (Subtle) 🪄 | ❌ Não |
| Vary (Strong) 🪄 | ❌ Não |
| Vary (Region) 🖌️ | ✅ Sim (máscara) |
| Zoom Out 2x / 1.5x 🔍 | ❌ Não |
| Custom Zoom 🔍 | ✅ Sim (prompt) |
| ⬅️➡️⬆️⬇️ Pan | ❌ Não |
| Animate 🎞️ | ❌ Não |
| 🔄 Reroll | ❌ Não |
Nota: Os rótulos dos botões e os formatos de customId podem variar dependendo da versão do MJ especificada no seu prompt (por exemplo, --v 6.1 vs --v 5.2). Sempre leia os botões a partir da resposta da API.
O botão Inpaint (Vary Region) só aparece após Upscale.
Exemplo completo: gerar e fazer upscale
Etapa 1: Enviar requisição 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"] }
}'
Resposta:
{ "code": 1, "result": "1768464763141701" }
Etapa 2: Consultar o status da tarefa
curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Resposta (quando concluída):
{
"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" },
...
]
}
Etapa 3: Clicar em U1 para fazer 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"
}'
Resposta:
{ "code": 1, "result": "1768464800000000" }
Etapa 4: Consultar a nova tarefa e obter o resultado
curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Quando Modal é necessário?
Quando você chama /mj/submit/action e o status da tarefa se torna MODAL em vez de SUCCESS, você deve chamar /mj/submit/modal para fornecer uma entrada adicional.
Operações confirmadas de Modal
| Operation | Button | What to Submit |
|---|
| Inpaint | Vary (Region) | maskBase64 (máscara PNG) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (por exemplo, “your prompt —zoom 2”) |
Exemplo: fluxo 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,..."
}'
Seleção do modo de velocidade
Adicione o prefixo de velocidade ao caminho:
| Mode | Path Prefix | Example |
|---|
| Fast | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Relax | (padrão) | /mj/submit/imagine |
Outros pontos de entrada
Estas APIs são pontos de entrada independentes que não seguem o fluxo imagine → action:
| API | Finalidade |
|---|
POST /mj/submit/blend | Mesclar 2 a 5 imagens em uma |
POST /mj/submit/describe | Gerar prompt a partir de imagem |
POST /mj/submit/video | Converter imagem em vídeo |
POST /mj/submit/edits | Editar imagem com máscara |
Dicas de troubleshooting
Com base no design da API e no fluxo de trabalho, aqui estão alguns problemas comuns que você pode encontrar:
| Problem | Likely Cause | Solution |
|---|
| Não encontra o botão Vary (Region) | Está olhando para a imagem em grade 4x | Faça upscale primeiro (clique em U1-U4) e depois verifique os botões |
Status da tarefa travado em MODAL | A operação exige entrada adicional | Chame /mj/submit/modal com os dados necessários |
customId não funciona | Está usando um valor desatualizado ou fixo no código | Sempre obtenha um customId atualizado da resposta de /mj/task/\{id\}/fetch |
Array buttons vazio | A tarefa ainda está em andamento | Aguarde status: "SUCCESS" antes de acessar buttons |