MMS AI OPEN PLATFORM
OpenAI 兼容 API 设计预览
本页展示 MMS AI 开放平台的目标协议。当前已开放 /v1/models 与 /v1/chat/completions(Beta);图片、视频、数字人、音频与任务接口仍在开发。
https://mmsai.cn/v1注册、登录与创建密钥
浏览器本机授权(Browser Auth)
任意终端 / 桌面应用只要按本文参数打开入口,均可完成登录授权;密钥经本机 HTTP 回调回传,无需用户手工复制。安全边界是 loopback 回跳与登录态,不依赖固定客户端名单。
/connect/browser-auth固定入口:
https://mmsai.cn/connect/browser-auth?client=my-cli&response_type=api_key&redirect_uri=http%3A%2F%2F127.0.0.1%3A54321%2Fcallback&state=RANDOMclientstring是终端自定 ID,2~64 位字母数字,可含 . _ -(如 my-cli、uopenclaw)response_typestring是固定 api_keyredirect_uriurl是本机回调,仅 127.0.0.1/localhost + /callbackstatestring是随机串,防 CSRF;回跳须原样带回终端适配步骤
- 本机监听
http://127.0.0.1:<随机端口>/callback(仅 loopback)。 - 自定稳定的
client(如my-cli、uopenclaw),生成随机state,用系统浏览器打开入口 URL。 - 用户在官网登录并点击「同意并回传密钥」。
- 浏览器跳回本机:成功带
api_key+state;拒绝带error=access_denied。 - 校验
state后写入本地密钥(如MMS_API_KEY),再请求GET /v1/models验证。
官网同意后会先在品牌结果页展示「授权成功」,并静默向本机 /callback 投递密钥(密钥不进入官网地址栏)。若终端未收到,结果页提供「手动完成回传」整页跳转兜底。
成功回跳示例(本机监听收到的请求):
http://127.0.0.1:54321/callback?api_key=mms_sk_xxxx&state=RANDOM拒绝回跳示例:
http://127.0.0.1:54321/callback?error=access_denied&state=RANDOMredirect_uri 仅允许 http://127.0.0.1:<port>/callback 与 http://localhost:<port>/callback;须登录;须校验 state;每个 client 对应控制台密钥名 BA:<client>,再次授权会轮换使旧 Key 失效;密钥勿写入网页或安装包。兼容说明:旧路径 /connect/uopenclaw 会自动跳转到 /connect/browser-auth 并保留 query。
快速开始
统一基础地址:
https://mmsai.cn/v1交流接口可同步或流式返回;图片、视频、数字人、短剧和音频采用异步任务协议,提交成功后通过任务 ID 查询。
请求方式与公共格式
https://mmsai.cn/v1/{resource}AuthorizationBearer string是API Secret KeyContent-Typeapplication/json是JSON 请求格式Idempotency-Keystring媒体建议防止重复创建和扣费X-Client-Request-Idstring否调用方链路 ID请求体统一使用 UTF-8 JSON。上传文件时使用 multipart/form-data。每个响应都携带 x-request-id,报障时请提供该值。
curl https://mmsai.cn/v1/chat/completions -H "Authorization: Bearer $MMS_API_KEY" -H "Content-Type: application/json" -H "Idempotency-Key: order_20260713_001" -d '{"model":"mms-chat-pro","messages":[{"role":"user","content":"你好"}]}'身份认证
所有请求都应在服务端发起。不要把 API Key 暴露在浏览器、桌面包或移动端代码中。
curl https://mmsai.cn/v1/models \
-H "Authorization: Bearer $MMS_API_KEY"模型列表
/v1/models返回账户可用的平台模型,支持使用 type、capability 和 status 查询。稳定的 id 由 MMS 分配,不暴露服务商、内部模型和成本价格。
{"object":"list","data":[{"id":"mms-image-pro","object":"model","name":"MMS Image Pro","type":"image","logo":"https://mmsai.cn/models/mms-image-pro.png","description":"高质量商业图片生成模型","advantages":["中文理解","文字排版","风格稳定"],"scenarios":["商品海报","社交配图"],"status":"available","capabilities":["text_to_image","image_to_image"]}]}模型详情
/v1/models/{model_id}返回模型介绍、Logo、描述、优势、适用场景、能力、参数约束和当前可用状态。调用前应读取 capabilities 与 limits,不要硬编码不同模型的私有参数。
{"id":"mms-video-pro","object":"model","name":"MMS Video Pro","type":"video","logo":"https://mmsai.cn/models/mms-video-pro.png","description":"适合商业短片与运镜生成","advantages":["运动稳定","镜头语言丰富"],"scenarios":["广告短片","产品展示"],"status":"available","capabilities":["text_to_video","image_to_video"],"limits":{"durations":[5,10],"aspect_ratios":["16:9","9:16","1:1"],"max_prompt_length":2000}}模型价格
/v1/pricing/models只返回当前账户实际适用的平台出售价格。价格可能按 Token、次、张、秒或分钟计费;提交媒体任务前可使用返回规则进行预估,最终以用量账单为准。
billing_typeenum是token、per_call、durationpricedecimal string按次/时长每计费单位的平台售价input_pricedecimal stringToken输入 Token 售价output_pricedecimal stringToken输出 Token 售价unitstring是1K tokens、image、second 等effective_atdatetime是价格生效时间{"object":"list","currency":"CNY","data":[{"model":"mms-chat-pro","billing_type":"token","input_price":"0.010000","output_price":"0.030000","unit":"1K tokens"},{"model":"mms-image-pro","billing_type":"per_call","price":"0.080000","unit":"image"},{"model":"mms-video-pro","billing_type":"duration","price":"0.600000","unit":"second","minimum_charge":"3.000000"}],"effective_at":"2026-07-13T00:00:00+08:00"}余额查询
/v1/balance返回账户可消费余额、冻结中的预授权金额和套餐额度。金额字段均为字符串,避免浮点精度问题。
{"object":"balance","currency":"CNY","available_balance":"128.500000","frozen_balance":"6.000000","cash_balance":"98.500000","gift_balance":"30.000000","quotas":{"text":120000,"image":35,"video":120},"plan":{"name":"专业版","expires_at":"2026-08-13T23:59:59+08:00"}}交流 / Chat Completions
/v1/chat/completions兼容 OpenAI Chat Completions,包括非流式响应与 SSE 流式输出。
import OpenAI from "openai";
const client = new OpenAI({
apiKey: process.env.MMS_API_KEY,
baseURL: "https://mmsai.cn/v1"
});
const response = await client.chat.completions.create({
model: "mms-chat-pro",
messages: [{ role: "user", content: "写一个产品短片脚本" }]
});素材上传
/v1/filesfilebinary是图片、音频或视频文件purposestring是固定为 generationcurl https://mmsai.cn/v1/files -H "Authorization: Bearer $MMS_API_KEY" -F "purpose=generation" -F "file=@./reference.png"返回的 file_id 可用于生图、生视频、数字人、短剧和音频接口。禁止把本地文件路径直接写入 JSON。
图片生成
/v1/images/generationsmodelstring是平台模型 IDpromptstring是图片描述词sizestring否输出尺寸ninteger否生成数量{"model":"mms-image-pro","prompt":"极简科技产品海报","size":"1024x1024","n":1}视频生成
/v1/videos/generations视频生成采用异步任务。响应返回平台任务 ID,不直接暴露外部任务 ID。
{"model":"mms-video-pro","prompt":"电影感产品展示","duration":5,"aspect_ratio":"16:9","input_images":["https://example.com/ref.jpg"]}数字人 / 口播生成
/v1/avatars/generationsmodelstring是数字人模型 IDavatar_file_idstring是人物素材audio_file_idstring是驱动音频aspect_ratiostring否如 9:16、16:9{"model":"mms-avatar-pro","avatar_file_id":"file_avatar_01","audio_file_id":"file_audio_01","aspect_ratio":"9:16","callback_url":"https://example.com/mms/webhook"}短剧生成
/v1/dramas/generations支持剧本生成、角色分析、分镜和成片任务。较长任务必须配置 Webhook,并通过客户端业务 ID 保证幂等。
{"model":"mms-drama-pro","title":"重启人生","script":"第一集完整剧本……","characters":[{"name":"林夏","reference_file_id":"file_role_01"}],"episode":1,"aspect_ratio":"9:16"}音频生成
/v1/audio/speechmodelstring是语音模型 IDinputstring是待合成文本voicestring是平台音色 IDresponse_formatstring否mp3、wav、pcm{"model":"mms-tts-pro","input":"欢迎使用 MMS AI 开放平台","voice":"female_warm","response_format":"mp3","speed":1.0}任务查询
/v1/tasks/{task_id}{"id":"task_01J...","object":"generation.task","status":"succeeded","progress":100,"output":[{"type":"video","url":"https://..."}],"usage":{"total_units":5}}Webhook 回调
异步任务进入终态后,网关使用 HMAC-SHA256 签名向配置地址发送事件。消费方必须校验时间戳、签名并按事件 ID 幂等处理。
{"id":"evt_01J...","type":"task.succeeded","created":1783915200,"data":{"task_id":"task_01J...","status":"succeeded","output":[{"type":"video","url":"https://..."}]}}响应格式与状态码
同步接口直接返回业务对象;异步提交返回任务对象。HTTP 状态码表示请求结果,不能只根据响应正文中的字段判断成功。
200成功同步请求成功并返回结果202已接收异步任务已创建,继续查询400请求错误—检查字段与模型能力401未认证—检查 Bearer 密钥402余额不足—充值或更换套餐429限流—按 Retry-After 退避500/503服务异常—使用相同幂等键重试{"id":"task_01J...","object":"generation.task","status":"queued","created":1783915200,"request_id":"req_01J..."}错误处理
invalid_request_error400—请求参数错误authentication_error401—API Key 无效insufficient_quota402—账户余额不足rate_limit_error429—超过速率限制api_error500—网关内部错误{"error":{"message":"The requested model is unavailable.","type":"model_unavailable","param":"model","code":"model_unavailable"},"request_id":"req_01J..."}速率限制与幂等
响应头返回 x-ratelimit-limit、x-ratelimit-remaining 和 x-request-id。媒体提交建议携带 Idempotency-Key,相同账户和 Key 在有效期内只创建一个平台任务。
常见场景与故障排查
查询 updated_at;超时后携带 request_id 联系支持,客户端应采用退避轮询。
媒体提交使用稳定的 Idempotency-Key;网络超时后使用原 Key 重试。
优先使用上传接口返回的 file_id;外链必须是公网 HTTPS。
读取 /v1/models 的 capabilities,不传服务商私有字段。
在控制台检查现金与套餐额度;预授权失败会释放或退款。
按事件 id 幂等,比较 created 时间,并校验签名和时间戳。
