LoopToken

接口说明

midjourney:异步任务协议,提交 imagine 与 16 种二次操作,用 GET /v1/midjourney/{task_id} 轮询,状态 SUCCESS / FAILURE

POST/v1/midjourney/generations
POST/v1/midjourney/generations/{action}
GET/v1/midjourney/{task_id}

Midjourney 是围绕"生成 → 查询 → 对结果做二次操作"的异步任务协议。鉴权方式与其他接口一致,见鉴权。本页是协议总览,各操作的字段与父任务要求见操作详解。

项值
模型midjourney
模式异步:提交返回 202 和 task_id → 轮询 GET /v1/midjourney/{task_id} → 终态 SUCCESS 或 FAILURE
中间态部分操作先进入 MODAL,需再提交一次才能继续
计费按操作与 speed 档位,失败全额退款(见计费),价格以定价页为准
媒体保留图片 90 天、视频 72 小时(见结果有效期)

模式选择

按目标选择操作:

imagine(生成)
  └─ SUCCESS → 四宫格 grid_image_url + buttons
       ├─ upscale / variation / high_variation / low_variation(引用 index 或 buttons 中的 custom_id)
       ├─ reroll / pan / zoom(引用 buttons 中的 custom_id)
       ├─ remix_strong / remix_subtle
       ├─ inpaint → MODAL → modal(局部重绘,两步流程)
       └─ video(把某一张结果做成视频)

只有**原始 imagine(或 blend/zoom/reroll 等同样产出新一组四宫格候选图的任务)**的查询响应才带 buttons 数组;upscale/variation 等选中单张图的结果不带 buttons。用 custom_id 引用二次操作时,必须从产出该四宫格的那个任务的响应里取,不能从 upscale 之类的下游结果里取。

全部 16 个操作端点的字段、父任务要求与示例见操作详解。

快速开始

POST/v1/midjourney/generations
POST/v1/midjourney/generations/imagine

两个路径等价。

curl https://api.vibelab.me/v1/midjourney/generations \
  -H "Authorization: Bearer $LOOPTOKEN_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"prompt": "a cat in a spacesuit --ar 16:9"}'

提交成功返回 202,data[0].task_id 即后续轮询用的任务 ID:

{"code": 200, "data": [{"task_id": "mj_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx", "status": "submitted"}]}

轮询:

curl https://api.vibelab.me/v1/midjourney/mj_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx \
  -H "Authorization: Bearer $LOOPTOKEN_API_KEY"

字段见响应。

请求参数

imagine 基础参数

参数类型必填默认说明
promptstring是-生成提示词;传统 Midjourney -- 参数(如 --ar 16:9)可以直接写在 prompt 文本里,已通过真实调用验证
speedstring否relaxrelax / fast / turbo;决定排队优先级与计费档位,见"计费"
image_urlsarray<string>否-参考图 URL(图生图/风格参考等),数量与效果取决于具体用法;单图 ≤ 12 MiB
nsfw_checkboolean否falsetrue 时在提交生成前先对提示词与输入图做内容审核,拦截更早,但增加一次审核开销与延迟
metadataobject否-自定义元数据,随任务保存并原样返回,便于业务侧串联自己的订单/会话 ID

结构化参数

作为 -- 前缀写法的等价 JSON 字段透传给上游。平台本身不校验取值范围,非法值由上游处理。仅在 prompt 文本内联写 --ar 经过真实调用验证;以下结构化字段建议优先用于替代对应的 -- 写法,与 prompt 内联写法冲突时以上游实际行为为准。

参数类型说明
sizestring画面比例(宽:高),如 "1:1"、"16:9"、"9:16"、"4:3"、"3:4"
versionstring模型版本,如 "6.1"、"7",见下方"版本与 Niji"
nijibooleantrue 时使用 Niji(动漫风格)模型而非标准模型
qualitystring渲染质量/细节程度档位
stylizeinteger风格化强度,范围 0-1000,默认 100
chaosinteger结果多样性/随机程度,范围 0-100,默认 0
weirdinteger怪异度,范围 0-3000,默认 0
tilebooleantrue 时生成可无缝平铺的图案
seedinteger随机种子,用于复现同一结果
negative_promptstring反向提示词,描述需要避免出现的内容
stylestring风格档位,如 "raw";与 raw 布尔字段是两个不同的 flag(--style raw 与 --raw)
iwnumber参考图权重(image weight),范围 0-3,影响 image_urls 相对文本提示词的影响力
crefstring角色参考图 URL,用于保持角色形象一致
cwinteger角色参考权重,范围 0-100
srefstring风格参考图 URL
swinteger风格参考权重,范围 0-1000
drefstring深度参考图 URL
dwinteger深度参考权重,范围 0-100
repeatinteger重复生成次数,范围 2-40;每一次重复都单独计费
rawboolean原始风格(--raw),减少 Midjourney 的后期加工;v5.1 起支持
draftboolean草图模式(--draft),更快、清晰度更低;v7 起支持
hdboolean高清模式(--hd),仅 v8.1/v8.2;未同时传 version 时上游会自动补 --v 8.1
stopinteger在指定进度提前停止,范围 10-100,仅 v5-v6.1 与 niji 5-6
extrastring逃生口:原样追加到 prompt 末尾,用于本表尚未覆盖的新 -- flag

版本与 Niji

  • version 传主版本号字符串。当前上游可用:"8.2"、"8.1"、"7"、"6.1"、"5.2"、"5.1"。
  • 用 Niji(动漫模型):传 niji: true 加 version: "7" 或 "6",上游会归一化为 Niji 7 / Niji 6。不要只传 niji: true 而不给版本。
  • 版本会影响哪些操作可用:pan 只在 v6/v6.1/v7/v8.1/v8.2/niji6 上有效,remix_strong/remix_subtle 只在 v8.1/v8.2 上有效。详见操作详解。
  • 版本不影响价格,各版本同档同价。

请求示例

Niji 竖图

{"prompt": "anime girl in a moonlit garden", "niji": true, "version": "7", "size": "9:16"}

响应

GET/v1/midjourney/{task_id}

task_id 为提交响应中的值(mj_ 前缀 + UUID)。任务不存在、或不属于当前 API Key 所在账户 → 404 task_not_found。查询响应直接是任务对象,不套 {"code", "data"} 外壳。

状态机

状态含义
SUBMITTED已提交,排队中
IN_PROGRESS生成中
MODAL需要客户端补充信息才能继续(目前仅 inpaint 会进入此态),调用 modal 提交后转回 IN_PROGRESS
SUCCESS已完成
FAILURE失败

响应示例(SUCCESS,四宫格):

{
  "id": "mj_xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
  "action": "IMAGINE",
  "status": "SUCCESS",
  "progress": "100%",
  "prompt": "a cat in a spacesuit --ar 16:9",
  "created_at": 1789041600,
  "completed_at": 1789041660,
  "credits_charged": 0.58552,
  "grid_image_url": "https://...",
  "image_urls": ["https://...", "https://...", "https://...", "https://..."],
  "buttons": [{"customId": "MJ::JOB::upsample::1::..."}]
}

任务对象字段

所有状态都包含:

字段类型说明
idstringmj_ 前缀 + UUID
actionstring大写下划线形式的操作名,如 IMAGINE、HIGH_VARIATION
statusstring见状态机
progressstring形如 "56%" 的进度
promptstring提交时使用的提示词
created_atinteger任务创建时间,Unix 秒

进入终态后追加:

字段类型说明
completed_atinteger任务结束时间,Unix 秒
credits_chargednumber本次实际扣费(积分)
buttonsarray可用于后续二次操作的按钮列表(customId 为 Midjourney 原生字符串,直接透传);仅原始 imagine 类(产出新一组四宫格候选图的)任务才有此字段

SUCCESS 时,按操作类型追加以下之一:

操作追加字段
describe仅 description(反推的提示词文本),不返回任何媒体字段
产出新一组四宫格的操作:imagine/blend/zoom/reroll/pan/variation 系列/remix 系列/inpaint→modal 的最终结果grid_image_url(四宫格预览图)+ image_urls(数组,四张单图)
产出单张图的操作(如 upscale)仅 image_urls(数组,一张)
video仅 video_urls(数组)

FAILURE 时追加:

字段类型说明
fail_reasonstring失败原因文案

结果有效期

生成结果会被平台转存到自有对象存储并签发可直接访问的 URL(grid_image_url/image_urls/video_urls),不依赖上游链接的时效:

类型有效期
图片任务完成后 90 天内可访问
视频任务完成后 72 小时内可访问

响应中不返回单独的过期时间字段,请在拿到 SUCCESS 结果后尽快下载并自行转存,不要长期依赖返回的链接。

计费

单位为积分(credits)。

操作relaxfastturbo
imagine0.585520.715521.3
其余全部操作(blend/describe/edits/upscale/variation/high_variation/low_variation/reroll/pan/zoom/remix_strong/remix_subtle)0.715520.715521.3
inpaint0(免费提交)00
modal1.431041.431042.6
video(480p 档)2.6(与 speed 无关)2.62.6
video(720p 档)5.2(与 speed 无关)5.25.2
  • inpaint 单独提交不计费,真正的局部重绘发生在随后的 modal 步骤,modal 档位已包含 inpaint+modal 两步的合计成本。
  • video 的最终扣费 = 表中单价 × batch_size(可选 1/2/4)。batch_size: 4 就是实扣 4 份:720p 批量 4 段一次要 20.8 积分,比 480p 单段的 2.6 贵 8 倍。只要一段就传 1。
  • video_type 含 720 时走 720p 档,其余走 480p 档。
  • repeat(2-40)同样按次数倍增扣费,与 batch_size 是两个独立的乘数。
  • 任务失败(FAILURE)自动全额退款,退款与终态判定同步完成,无需额外操作。
  • 以上价格以定价页和任务终态中的 credits_charged 为准。

注意事项

upscale 不是放大。 它是从四宫格里把第 N 张切出来,本地合成、毫秒返回、几乎不会失败,真正烧算力的是上一步 imagine。要真正的 2 倍高清图,走 HD upscale(60-120 秒的真实放大)。两者同价。

MODAL 不是失败。 它是 inpaint 之后等你补参数的正常中间态,轮询到它就去调 modal,不要重试 inpaint。约 30 分钟内不补参,任务会被自动取消并退款(平台本地兜底上限为任务创建后 35 分钟)。

  • variation 和 high_variation 不是"弱一点/强一点"的同一个操作 → variation 作用在四宫格上(等价 V1-V4),high_variation/low_variation 作用在 upscale 之后的单图上;父任务给错,上游会拒。
  • inpaint 免费不等于局部重绘免费 → inpaint 那步是 0,但上游对 inpaint 和 modal 分别计费两次,两步的钱一起算在 modal 档里(1.43104,正好是单步的两倍)。走完一轮局部重绘的成本和做两次普通操作一样。
  • video 的 batch_size 是实打实的乘数 → 传 4 就扣 4 份;出片只要一段就传 1,比稿才用 4。
  • speed 对 video 无效 → video 固定走 FAST 通道,传 relax 或 turbo 既不改价也不改排队;speed 只对生图类操作生效。
  • --raw 和 style: "raw" 是两个不同的 flag → 前者对应 raw: true,后者对应 style: "raw",想要哪个效果就传哪个,不要互相替代。
  • pan 挑版本 → 只在 v6/v6.1/v7/v8.1/v8.2/niji6 上有效,v5.2 及更早直接 FAILURE;它只吃 upscale 后的单图,连 HD upscale 的高清单图也被拒,这是 Midjourney 自身的限制。

错误

错误体与错误码相同:{"error": {"message", "type", "code", "request_id"}}(type 与 code 相同)。本接口常见错误:

HTTPcode触发场景处理
400invalid_request_error请求体不合法(缺少必填字段、speed/batch_size 不在允许枚举、pan 缺少合法 direction、需要父任务的操作缺少或传错 task_id、父任务状态不满足要求)按 message 修正;父任务要求见操作详解
402insufficient_credits账户余额不足以覆盖预扣费用充值后重试
404not_found_error操作端点后缀不存在核对操作详解的端点
404task_not_found提交时引用的父任务不存在或不属于当前账户;或查询时 task_id 不存在/不属于当前账户核对 task_id(mj_ 前缀 + UUID)
404model_not_foundmidjourney 没有可售价格联系支持
409invalid_request_error对同一 task_id 重复提交 modal(重复计费冲突),或父任务状态在校验后发生变化不要重复提交,改为轮询
422invalid_request_error内容审核拒绝(message 为 content moderation rejected)修改提示词或图片
429media_concurrency_exceeded用户或 API Key 的媒体并发超限(带 Retry-After)稍后重试
502upstream_error上游提交失败且重试耗尽指数退避重试,预扣费用会退回
503no_available_channel该模型当前没有可用渠道指数退避重试

上游返回的其它 4xx 会按原状态码返回,code 为 invalid_request_error、message 为 upstream request failed。

本页内容