正在准备页面…
▥ Seedance 2.5 现已上线! ›
定价文档更新日志账号
指南概览图像 API视频 API
本页目录快速开始身份验证端点路由模式计费任务与轮询文件上传Webhooks错误代码
资源模型目录定价API KeyWebhook 端点OpenAPI 规范服务状态产品动态
概览图像 API视频 API
文档

MLMux API

仅需一个 API 密钥和统一的请求格式,即可调用各类图像与视频生成模型。图像会直接在响应中返回;视频则作为任务运行,支持轮询或通过 webhook 接收。

快速开始

  1. 01

    创建 API 密钥

    在控制台 → API 密钥中创建密钥。完整密钥仅显示一次,请务必立即妥善保存,例如保存为 MLMUX_API_KEY。

  2. 02

    发送请求

    使用模型 ID 和提示词调用图像或视频端点。用量将记入拥有该密钥的账号。

  3. 03

    获取结果

    图像请求会在响应中返回 URL。视频请求会返回一个任务:轮询其 poll_url 或订阅 webhook。

身份验证

在发往 https://api.mlmux.com 的每个请求中,通过 Authorization: Bearer 标头传递密钥。密钥以 sk- 开头。API 不接受通过其他标头或查询参数传递密钥。

要检查密钥是否有效,请列出其可调用的模型:

GEThttps://api.mlmux.com/v1/models
curl https://api.mlmux.com/v1/models \
  -H "Authorization: Bearer $MLMUX_API_KEY"
响应
{
  "object": "list",
  "data": [
    { "id": "nano-banana-2", "object": "model", "owned_by": "platform" },
    { "id": "model/seedance-2.5-max", "object": "model", "owned_by": "platform" }
  ]
}

端点

所有端点均位于 https://api.mlmux.com 下。除非特别说明,请求体和响应体均为 JSON。

方法路径描述
GET/v1/models列出可调用的模型 ID。
POST/v1/images/generations根据提示词生成图像。
POST/v1/images/edits编辑或组合输入图像。支持 JSON 或 multipart。
GET/v1/images/generations/{task_id}获取异步图像任务。图像编辑使用 /v1/images/edits/{task_id}。
POST/v1/videos/generations创建视频任务。
GET/v1/videos/generations/{task_id}获取视频任务。
GET/v1/tasks/{task_id}通过 ID 获取任意任务。
POST/v1/tasks/{task_id}/cancel取消未完成的任务。
POST/v1/uploads上传参考文件并获取 URL。
GET/v1/account/balance获取积分余额。

路由模式

在请求体中设置 route_mode 以选择上游层级。请求将保留在其所在层级,绝不会静默切换到其他层级;如果该层级针对该模型已停用,请求将失败并返回 route_mode_disabled。如果省略该字段,MLMux 将优先使用 API key 上设置的路由模式,未设置时则使用模型默认值(即 official-cheap)。

值描述
official服务商官方路由,按服务商公开价格计费。
official-cheap成本更低的官方路由。新请求和 API 密钥的默认模式。

计费

用量以积分结算,1 积分等于 1 美元。视频模型按输出 token 计费;图像模型根据具体模型按上游 token 或按张计费。有关各路由的费率,请参阅价格页面。

任务响应在创建任务时显示 estimated_charge_credits,在成功后显示 actual_charge_credits,两者均以积分为单位。Webhook 载荷中以整数显示 actual_charge_nano_credits,其中 1,000,000,000 nano-credits 等于 1 积分。

使用 GET /v1/account/balance 查看剩余余额。

任务与轮询

视频请求以及带有 "async": true 的图像请求会返回带有任务信息的 HTTP 202。每隔几秒轮询任务的 poll_url,直到其状态变为 succeeded、failed、expired 或 canceled。

状态描述
queued已接收,等待开始。
submitted已提交至上游服务商。
running生成中。progress 取值范围为 0 到 100。
succeeded已完成。响应现已包含输出 URL。
failed失败。message 会说明失败原因。
expired未在任务时限内完成。
canceled已通过取消端点取消。

取消任务

POSThttps://api.mlmux.com/v1/tasks/{task_id}/cancel

处于 queued、submitted 或 running 状态的任务可以取消,其预扣积分将被释放。响应为 {"id": "task_…", "status": "canceled"}。处于任何其他状态的任务将返回 409 task_not_cancelable。

安全重试

异步视频和图像生成请求支持最长 160 个字符的 Idempotency-Key 请求头。使用相同的请求体再次发送相同的 Key 将返回原任务,而不是创建新任务。使用不同的请求体发送相同的 Key 将返回 409 idempotency_key_reused。同步请求和图像编辑不支持此请求头。

文件上传

如需使用本地文件作为参考,请将其作为 multipart 字段 file 上传。支持不超过 50 MB 的图像、视频和音频文件,保留 3 天。将返回的 url 传入生成请求的任意 URL 字段即可。

POSThttps://api.mlmux.com/v1/uploads
请求
curl https://api.mlmux.com/v1/uploads \
  -H "Authorization: Bearer $MLMUX_API_KEY" \
  -F "file=@start-frame.jpg"
响应
{
  "url": "https://.../uploads/3f8a....jpg",
  "asset_id": 1024,
  "mime_type": "image/jpeg",
  "size_bytes": 482113,
  "asset_type": "image"
}

Webhooks

在控制台 → Webhooks中创建端点并选择要接收的事件。当请求或任务完成时,MLMux 会向您的 URL 发送包含 JSON 请求体的 POST 请求。

事件描述
request.succeeded请求或任务成功。
request.failed请求或任务失败。data.error_code 和 data.error_message 说明了具体原因。
webhook.test在控制台中测试端点时发送。
推送内容
{
  "event_id": "evt_5b0d...",
  "event_type": "request.succeeded",
  "created_at": "2026-10-26T08:00:00Z",
  "data": {
    "request_id": "task_task_01a9...",
    "task_id": "task_01a9...",
    "public_model_id": "model/seedance-2.5-max",
    "api_method": "videos.generations.create",
    "image_count": 0,
    "image_resolution": "",
    "video_seconds": 8,
    "video_resolution": "720p",
    "actual_charge_nano_credits": 1790000000,
    "latency_ms": 94210
  }
}

验证签名

每次推送都会使用端点的签名密钥(whsec_…)进行签名,该密钥仅在创建或轮换时显示一次。X-MLMux-Signature 请求头包含 Unix 时间戳 t 和签名 v1:由时间戳、英文句号和原始请求体计算得出的 HMAC-SHA256 十六进制值。计算相同的值并进行比对,同时拒绝过时的时间戳。

Node.js
import crypto from "node:crypto";

// header: X-MLMux-Signature: t=1767225600,v1=5f8c...
export function verifyMLMuxSignature(rawBody, header, secret) {
  const parts = Object.fromEntries(header.split(",").map((part) => part.split("=")));
  const expected = crypto.createHmac("sha256", secret).update(`${parts.t}.${rawBody}`).digest("hex");
  const fresh = Math.abs(Date.now() / 1000 - Number(parts.t)) < 300;
  return fresh && crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1 ?? ""));
}

请在 10 秒内返回任意 2xx 状态码。MLMux 会在约 11 小时内最多尝试推送 6 次。使用 X-MLMux-Event-ID 可忽略重复推送。

错误代码

所有错误均采用相同的 JSON 格式。建议根据 code 而非 message 进行逻辑分支判断。联系技术支持时,请提供 request_id(也会在 X-Request-ID 响应头中返回)。

错误响应
{
  "error": {
    "message": "Invalid API key",
    "type": "invalid_request_error",
    "code": "invalid_api_key",
    "request_id": "req_9f2c..."
  }
}
HTTP代码含义
400invalid_request请求体不是有效的 JSON,或某个字段类型错误,例如图像生成中指定了未知的 route_mode。
400invalid_value模型不支持传入的某个值,例如 resolution、size、aspect_ratio 或 n。
400model_not_found模型 ID 不存在或不可用。
400invalid_video_request视频模式、参考数量、宽高比、分辨率或时长无效。
400content_policy_violation提示词或输入内容被内容安全审核拦截。
401invalid_api_keyAPI Key 缺失、无效、已过期或已被禁用。
402insufficient_credits余额不足以支付预计扣费。请充值后重试。
402spend_limit_exceeded该请求将超出在控制台中设置的消费限额。
402api_key_monthly_limit_exceeded该请求将超出此 API Key 的月度预算。
403email_verification_required在使用 API 之前,请先验证账号邮箱地址。
403model_not_allowed此 API Key 仅限用于其他模型。
403forbidden_asset_reference某个 asset:// 引用不属于当前账号。
404task_not_found任务不存在或属于其他账号。
409idempotency_key_reusedIdempotency-Key 已被其他请求体使用。
409task_not_cancelable任务已完成,无法取消。
429rate_limit_exceeded此 Key 或账号的每分钟请求数过多。
429capacity_exhausted所选路由上的所有上游服务均繁忙。
502model_unavailable所选路由上没有该模型可用的上游服务。
502generation_failed上游供应商生成输出失败。
503generation_unavailable上游供应商暂时不可用。
503route_mode_disabled所选路由模式针对该模型已停用。请传入其他 route_mode。
504generation_timeout上游供应商响应超时。

429 响应会包含 Retry-After 请求头。请等待指定的秒数后再重试,并使用指数退避策略重试 5xx 错误。

下一页图像 API