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.
Hiểu khái niệm cốt lõi
MidJourney API mô phỏng các tương tác nút trên Discord. Không giống các REST API điển hình, nó hoạt động như một state machine nơi mỗi thao tác sẽ trả về các nút mới cho bước tiếp theo.
4 API cốt lõi
| API | Mục đích | Khi nào sử dụng |
|---|
POST /mj/submit/imagine | Tạo ảnh từ văn bản | Điểm bắt đầu cho mọi quy trình |
GET /mj/task/\{id\}/fetch | Truy vấn trạng thái task và lấy các nút | Sau mỗi lần submit (thăm dò cho đến khi xong) |
POST /mj/submit/action | Nhấn một nút (upscale, vary, zoom, v.v.) | Khi bạn muốn thao tác trên một ảnh |
POST /mj/submit/modal | Gửi thêm đầu vào | Chỉ khi status là MODAL |
Sơ đồ quy trình hoàn chỉnh
┌─────────────────────────────────────────────────────────────────────────────┐
│ 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 │
└──────────────────┘
Mỗi task thành công sẽ trả về một mảng buttons. Mỗi button có một customId mà bạn dùng để kích hoạt hành động tiếp theo.
Ví dụ phản hồi từ /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 không phải là giá trị cố định. Nó thay đổi theo từng task. Luôn lấy nó từ mảng buttons.
Sau IMAGINE (ảnh lưới 4 ô)
Các button này được trả về khi quá trình tạo ảnh ban đầu của bạn hoàn tất:
| Button | customId Pattern | Action | Result |
|---|
| U1-U4 | MJ::JOB::upsample::1::xxx | Upscale một ảnh đơn | Ảnh đơn độ phân giải cao |
| V1-V4 | MJ::JOB::variation::1::xxx | Tạo các biến thể | Lưới 4 ô mới |
| 🔄 | MJ::JOB::reroll::0::xxx::SOLO | Tạo lại tất cả | Lưới 4 ô mới |
Sau UPSCALE (ảnh đơn)
Sau khi upscale, bạn sẽ có quyền truy cập vào các công cụ chỉnh sửa:
| Label | Needs Modal? |
|---|
| Upscale (Subtle) / Upscale (2x) | ❌ Không |
| Upscale (Creative) / Upscale (4x) | ❌ Không |
| Vary (Subtle) 🪄 | ❌ Không |
| Vary (Strong) 🪄 | ❌ Không |
| Vary (Region) 🖌️ | ✅ Có (mask) |
| Zoom Out 2x / 1.5x 🔍 | ❌ Không |
| Custom Zoom 🔍 | ✅ Có (prompt) |
| ⬅️➡️⬆️⬇️ Pan | ❌ Không |
| Animate 🎞️ | ❌ Không |
| 🔄 Reroll | ❌ Không |
Lưu ý: Nhãn button và định dạng customId có thể khác nhau tùy vào phiên bản MJ được chỉ định trong prompt của bạn (ví dụ: --v 6.1 so với --v 5.2). Luôn đọc các button từ phản hồi API.
Button Inpaint (Vary Region) chỉ xuất hiện sau Upscale.
Ví dụ đầy đủ: Tạo và upscale
Bước 1: Gửi yêu cầu 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"] }
}'
Phản hồi:
{ "code": 1, "result": "1768464763141701" }
Bước 2: Poll trạng thái task
curl -X GET 'https://api.cometapi.com/mj/task/1768464763141701/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Phản hồi (khi hoàn tất):
{
"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" },
...
]
}
Bước 3: Nhấp U1 để 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"
}'
Phản hồi:
{ "code": 1, "result": "1768464800000000" }
Bước 4: Poll task mới và lấy kết quả
curl -X GET 'https://api.cometapi.com/mj/task/1768464800000000/fetch' \
-H 'Authorization: Bearer <YOUR_COMETAPI_KEY>'
Khi nào cần Modal?
Khi bạn gọi /mj/submit/action và trạng thái task trở thành MODAL thay vì SUCCESS, bạn phải gọi /mj/submit/modal để cung cấp thêm đầu vào.
Các thao tác Modal đã được xác nhận
| Operation | Button | What to Submit |
|---|
| Inpaint | Vary (Region) | maskBase64 (mask PNG) + prompt |
| Custom Zoom | 🔍 Custom Zoom | prompt (ví dụ: “your prompt —zoom 2”) |
Ví dụ: Luồng 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,..."
}'
Chọn chế độ tốc độ
Thêm tiền tố tốc độ vào đường dẫn:
| Chế độ | Tiền tố đường dẫn | Ví dụ |
|---|
| Nhanh | /mj-fast | /mj-fast/mj/submit/imagine |
| Turbo | /mj-turbo | /mj-turbo/mj/submit/imagine |
| Thư giãn | (mặc định) | /mj/submit/imagine |
Các điểm vào khác
Các API này là các điểm vào độc lập không đi theo luồng imagine → action:
| API | Mục đích |
|---|
POST /mj/submit/blend | Trộn 2-5 hình ảnh thành một |
POST /mj/submit/describe | Tạo prompt từ hình ảnh |
POST /mj/submit/video | Chuyển đổi hình ảnh thành video |
POST /mj/submit/edits | Chỉnh sửa hình ảnh bằng mask |
Mẹo khắc phục sự cố
Dựa trên thiết kế API và quy trình làm việc, dưới đây là những vấn đề phổ biến bạn có thể gặp phải:
| Vấn đề | Nguyên nhân có thể | Giải pháp |
|---|
| Không thể tìm thấy nút Vary (Region) | Đang xem hình ảnh lưới 4 ô | Upscale trước (nhấn U1-U4), sau đó kiểm tra các nút |
Trạng thái task bị kẹt ở MODAL | Thao tác yêu cầu thêm dữ liệu đầu vào | Gọi /mj/submit/modal với dữ liệu cần thiết |
customId không hoạt động | Đang dùng giá trị lỗi thời hoặc hardcoded | Luôn lấy customId mới từ phản hồi của /mj/task/\{id\}/fetch |
Mảng buttons trống | Task vẫn đang được xử lý | Chờ status: "SUCCESS" trước khi truy cập các nút |