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.
Memahami konsep inti
MidJourney API mensimulasikan interaksi tombol Discord. Tidak seperti REST API pada umumnya, API ini bekerja sebagai state machine di mana setiap operasi mengembalikan tombol baru untuk langkah berikutnya.
4 API inti
| API | Tujuan | Kapan digunakan |
|---|
POST /mj/submit/imagine | Pembuatan gambar dari teks | Titik awal untuk semua workflow |
GET /mj/task/\{id\}/fetch | Memeriksa status task & mendapatkan tombol | Setelah setiap submit (polling sampai selesai) |
POST /mj/submit/action | Klik tombol (upscale, vary, zoom, dll.) | Saat Anda ingin mengoperasikan gambar |
POST /mj/submit/modal | Kirim input tambahan | Hanya ketika status adalah MODAL |
Diagram workflow lengkap
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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 │
└──────────────────┘
Setiap task yang berhasil mengembalikan array buttons. Setiap tombol memiliki customId yang Anda gunakan untuk memicu aksi berikutnya.
Contoh respons dari /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 bukan nilai tetap. Nilainya berubah untuk setiap task. Selalu ambil nilainya dari array buttons.
Referensi tombol berdasarkan tahap
Setelah IMAGINE (gambar 4-grid)
Tombol-tombol ini dikembalikan saat pembuatan gambar awal Anda selesai:
| Button | customId Pattern | Action | Result |
|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | Upscale gambar tunggal | Gambar tunggal resolusi tinggi |
| V1-V4 | MJ::JOB::variation::1::xxx | Buat variasi | 4-grid baru |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | Hasilkan ulang semua | 4-grid baru |
Setelah UPSCALE (gambar tunggal)
Setelah upscale, Anda mendapatkan akses ke alat pengeditan:
| Label | Needs Modal? |
|---|
| Upscale (Subtle) / Upscale (2x) | ❌ Tidak |
| Upscale (Creative) / Upscale (4x) | ❌ Tidak |
| Vary (Subtle) 🪄 | ❌ Tidak |
| Vary (Strong) 🪄 | ❌ Tidak |
| Vary (Region) 🖌️ | ✅ Ya (mask) |
| Zoom Out 2x / 1.5x 🔍 | ❌ Tidak |
| Custom Zoom 🔍 | ✅ Ya (prompt) |
| ⬅️➡️⬆️⬇️ Pan | ❌ Tidak |
| Animate 🎞️ | ❌ Tidak |
| 🔄 Reroll | ❌ Tidak |
Catatan: Label tombol dan format customId dapat berbeda tergantung pada versi MJ yang ditentukan dalam prompt Anda (misalnya, --v 6.1 vs --v 5.2). Selalu baca tombol dari respons API.
Tombol Inpaint (Vary Region) hanya muncul setelah Upscale.
Contoh lengkap: Generate dan upscale
Langkah 1: Kirim permintaan 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"] }
}'
Respons:
{ "code": 1, "result": "1768464763141701" }
Langkah 2: Poll status task
curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Respons (saat selesai):
{
"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" },
...
]
}
Langkah 3: Klik U1 untuk 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"
}'
Respons:
{ "code": 1, "result": "1768464800000000" }
Langkah 4: Poll task baru dan dapatkan hasil
curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Kapan Modal diperlukan?
Saat Anda memanggil /mj/submit/action dan status task menjadi MODAL alih-alih SUCCESS, Anda harus memanggil /mj/submit/modal untuk memberikan input tambahan.
Operasi Modal yang terkonfirmasi
| Operation | Button | What to Submit |
|---|
| Inpaint | Vary (Region) | maskBase64 (mask PNG) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (misalnya, “your prompt —zoom 2”) |
Contoh: Alur 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,..."
}'
Pemilihan mode kecepatan
Tambahkan prefiks kecepatan ke path:
| Mode | Prefiks Path | Contoh |
|---|
| Cepat | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Relax | (default) | /mj/submit/imagine |
Titik masuk lainnya
API ini adalah titik masuk independen yang tidak mengikuti alur imagine → action:
| API | Tujuan |
|---|
POST /mj/submit/blend | Menggabungkan 2-5 gambar menjadi satu |
POST /mj/submit/describe | Menghasilkan prompt dari gambar |
POST /mj/submit/video | Mengonversi gambar menjadi video |
POST /mj/submit/edits | Mengedit gambar dengan mask |
Tips pemecahan masalah
Berdasarkan desain dan alur kerja API, berikut beberapa masalah umum yang mungkin Anda temui:
| Masalah | Kemungkinan penyebab | Solusi |
|---|
| Tidak dapat menemukan tombol Vary (Region) | Melihat gambar 4-grid | Lakukan upscale terlebih dahulu (klik U1-U4), lalu periksa tombol |
Status task macet di MODAL | Operasi memerlukan input tambahan | Panggil /mj/submit/modal dengan data yang diperlukan |
customId tidak berfungsi | Menggunakan nilai yang sudah usang atau di-hardcode | Selalu ambil customId terbaru dari respons /mj/task/\{id\}/fetch |
Array buttons kosong | Task masih sedang berjalan | Tunggu status: "SUCCESS" sebelum mengakses tombol |