开发文档
通过 FASTART 统一 API 调用图片、视频和图片编辑能力,同时保留 MiniMax 格式兼容接口。共用任务队列、素材和 Credit 账本。
统一图片、视频与编辑 API
创作台中的已发布模型共用这套接口。只选择模型、生成能力和模式,不选择 Provider。MiniMax 兼容接口保留在下方,两者使用同一企业 API Key 和 Credit 余额。
https://api.fastart.ai/enterprise/fastart/v1所有调用需要 Authorization: Bearer,无需客户端生成请求 ID。直接提交即可,每次请求创建一个新任务。Idempotency-Key 为可选扩展,仅在需要防重复提交时使用。HTTP 202 表示任务已创建,不代表生成完成。
| 请求字段 | 说明 |
|---|---|
model | 必填。GET /models 返回的 id,不是显示名称。 |
capability / mode | 使用目录中的原值;mode 默认 generate。图片编辑工具以 image_viewpoint_edit、image_relight_edit、image_inpaint_edit 标识。 |
parameters | 提示词、比例、尺寸、时长、seed 等。只允许当前模型能力公开的参数;不是所有模型都有相同参数。省略使用默认值,seed:null 表示随机。 |
inputs | 素材数组,每项 role 加 url 或 asset_id(二选一)。role 使用下方 asset.role;同一角色按数组顺序编号。asset_id 必须属于该 Key 用户及 Workspace。 |
callback_url | 可选 HTTPS 回调。建单前向该地址 POST challenge,需原样返回 JSON。收到状态通知返回 2xx;失败最多重试3次,间隔10、30、60秒。 |
price_token | 可选。传入报价返回的 price_token,可在价格发生变化时拒绝建单,避免按新价格意外扣费。 |
素材必须是公网 HTTP(S) 地址,不支持内网、本地路径或 Base64。服务端导入后验证实际类型;参考图片宽高至少240像素,其他数量、尺寸、格式、参考视频时长限制仍由模型配置校验。遮罩须与源图同尺寸;首尾帧角色不能用普通参考图片代替。
curl --fail-with-body "https://api.fastart.ai/enterprise/fastart/v1/models" \
-H "Authorization: Bearer $FASTART_KEY"import os, time
import requests
base = "https://api.fastart.ai/enterprise/fastart/v1"
headers = {"Authorization": "Bearer " + os.environ["FASTART_KEY"]}
# Choose model, capability, mode and parameter values from GET /models.
payload = {
"model": "qwen-image-2-1",
"capability": "text_to_image",
"parameters": {"prompt": "A golden retriever on green grass.", "aspect_ratio": "16:9"},
}
response = requests.post(base + "/generations", json=payload,
headers=headers, timeout=180)
response.raise_for_status()
task_id = response.json()["task"]["id"]
deadline = time.monotonic() + 3600
while time.monotonic() < deadline:
response = requests.get(base + "/generations/" + task_id, headers=headers, timeout=30)
if response.status_code == 429 or response.status_code >= 500:
time.sleep(15)
continue
response.raise_for_status()
task = response.json()["task"]
print(task["status"], task["progress"])
if task["status"] == "succeeded":
print(task["outputs"]) # Signed URLs can be downloaded without a browser cookie.
break
if task["status"] in ("failed", "cancelled"):
raise RuntimeError(task["error"] or task["status"])
time.sleep(5)
else:
raise TimeoutError("Keep task_id and query later; do not create another task.")可用模型与完整参数
以下直接读取当前部署的已发布配置,展开模型查看默认值、枚举、上下限、素材数量及请求示例。后台修改并发布后刷新即可更新;列出模型不表示当前一定有空闲算力或可用定价。
正在读取已发布模型和参数…
报价、状态和结果
报价使用与创建相同的请求体,但不创建任务、不扣费;包含 URL 时会下载并验证素材,随后清理临时副本。报价返回 expected_microcredits、maximum_microcredits 和 price_token。换算比例使用响应中的 microcredits_per_credit。
{
"task": {
"id": "00000000-0000-4000-8000-000000000001",
"model": "qwen-image-2-1",
"capability": "text_to_image",
"mode": "generate",
"status": "succeeded",
"progress": 100,
"outputs": [
{
"asset_id": "00000000-0000-4000-8000-000000000002",
"type": "image",
"url": "https://assets.example.com/signed/result.png",
"mime_type": "image/png",
"metadata": {
"width": 1328,
"height": 1328
}
}
],
"error": null,
"billing_status": "settled",
"usage": {
"reserved_microcredits": 1000,
"consumed_microcredits": 1000,
"released_microcredits": 0
}
}
}每3–5秒查询一次。status 为 queued、running、succeeded、failed、cancelled。无可靠百分比时 progress 为 null;完成为100。outputs 可包含多个图片或视频,URL 有时效,过期后重新查询取得新链接。失败返回统一 error 信息;usage 是 Credit 实际预留、消费和释放记录,关闭计费时可能为 null。
取消是申请,不保证可中断执行中的上游任务;不可取消返回409,不会强行标记失败。任务失败与取消沿用原有退款流程,成本仍保留。所有调用记入 API 账单。同一 Workspace 与 MiniMax API 共享120次/分钟的请求额度,轮询也计入;任务并发仍由会员权益限制。
400 参数或素材错误;401 Key/权限无效;402 余额不足;404 模型或任务不存在;409 价格、幂等或取消冲突;429 限流。未传幂等键时,网络超时或5xx后请先核实任务是否已创建,直接重发可能重复生成和扣费。若主动使用幂等键,重试须保留原键与原请求体。回调暂不带HMAC签名,不跟随重定向,需实现幂等接收;回调结果与查询结构相同,以主动查询为准。
MiniMax · 快速开始
生产 Base URL 如下;本地调试将域名替换为 http://localhost:8001,完整路径不变。URL 不包含语言前缀,也不是 /api/v1。
https://api.fastart.ai/enterprise/minimax/v1- 提交并保存 task_id
- 轮询状态或接收回调
- 下载成功结果
示例在服务器端执行:cURL、Python(先安装 requests)或支持 fetch 与 AbortSignal.timeout 的 Node.js。设置 FASTART_KEY;查询与删除还需将真实 task_id 设置为 FASTART_TASK_ID。
curl --fail-with-body -X POST "https://api.fastart.ai/enterprise/minimax/v1/video_generation" \
-H "Authorization: Bearer $FASTART_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"content": [
{
"type": "text",
"text": "A golden retriever running on green grass."
}
],
"resolution": "352P",
"duration": 3,
"ratio": "16:9"
}'鉴权与 API Key
登录并验证邮箱后提交申请。管理员通过后,用户可在账户中心自行创建多个 API Key,默认脱敏,支持显示完整密钥和复制。网站登录 Cookie 不能替代企业 Key。
Authorization: Bearer <FASTART_KEY>
Content-Type: application/json- 无需浏览器 Cookie、CSRF 或单独调用登录接口。Key 必须保存在服务端环境变量,不能放在前端代码、URL、日志或 Git 中。
- Key 关联用户必须已验证邮箱,且仍为 Workspace 的有效可写成员。停用、过期或撤销的 Key 无法调用。
- 同一 Workspace 内其他有效 Key 可查询任务;跨 Workspace 的查询和删除返回 invalid task_id。
创建视频任务
异步创建。HTTP 200 只表示已创建任务,不代表视频已生成。保存 task_id 后使用查询接口。所有场景都必须有且只有一个非空 text 项。
| 字段 | 类型 / 必填 | 说明 |
|---|---|---|
model | string · required | 当前实测 MiniMax-H3。校验器也识别 MiniMax-H3-Max,但未配置对应真实路由时不可用。 |
content | array · required | 1–16 项;恰好一个 text,1–7000 字符,不能全为空白。其余为带 role 的素材项。 |
duration | integer · required | 3–15 秒整数;具体工作流限制仍生效。不是 4/5 秒起步。 |
resolution | string · required | 352P / 480P / 768P / 1080P / 2K,须使用大写。MiniMax-H3 文生和全模态参考的 1080P / 2K 使用放大工作流;纯文本无需参考素材。首尾帧高分辨率暂未配置。不支持的档位会报错,不自动降级。 |
ratio | string · conditional | 21:9 / 16:9 / 4:3 / 1:1 / 3:4 / 9:16 / adaptive。文生视频必填且不能为 adaptive;参考生成建议明确传入具体比例,详见已知限制。 |
aigc_watermark | boolean · optional | 默认 false。true 需要已配置水印参数映射,否则拒绝。 |
callback_url | string · optional | 公网 HTTP(S) 回调地址;先通过 challenge 验证,详见回调章节。 |
{
"task_id": "00000000-0000-4000-8000-000000000001"
}查询任务与结果
task_id 使用创建返回的 UUID 字符串。只能查询当前 Workspace 最近 7 天内且未删除的企业任务。接口返回状态,不返回百分比进度;建议每 5 秒查询一次。
curl --fail-with-body -X GET "https://api.fastart.ai/enterprise/minimax/v1/query/video_generation/${FASTART_TASK_ID}" \
-H "Authorization: Bearer $FASTART_KEY"| status | 含义 |
|---|---|
queued | 尚未开始派发,可尝试取消。 |
running | 正在派发、执行、收集结果或恢复对账;不可取消,不代表一定在 GPU 上计算。 |
succeeded | 成功;读取 content.url 和 usage。 |
failed | 失败或超时;读取 error。 |
cancelled | 排队期间已取消。 |
{
"task": {
"id": "00000000-0000-4000-8000-000000000001",
"model": "MiniMax-H3",
"status": "succeeded",
"created_at": 1789120000,
"updated_at": 1789120030,
"resolution": "352P",
"duration": 3,
"ratio": "16:9",
"task_type": "generation",
"modality": "video",
"content": {
"url": "https://assets.example.com/output.mp4?signature=EXAMPLE"
},
"usage": {
"total_seconds": 3,
"input_seconds": 0,
"output_seconds": 3,
"input_image_count": 0
}
}
}| 返回字段 | 说明 |
|---|---|
created_at / updated_at | Unix 时间戳,单位秒。 |
content.url | 仅成功时返回签名下载链接;过期后可在 7 天查询窗口内重新查询。不是永久公开 URL。 |
usage | 成功时含 total_seconds = input_seconds + output_seconds、input_image_count;有音频参考时含 input_audio_seconds。秒数按实际素材时长四舍五入;不返回 token 数量。 |
resolution / duration / ratio | resolution 与 duration 表示请求值;最终尺寸和时长以生成文件为准。adaptive 成功时 ratio 为实际宽高的最简比。 |
task_type / modality | generation / video |
{
"task": {
"id": "00000000-0000-4000-8000-000000000001",
"model": "MiniMax-H3",
"status": "failed",
"created_at": 1789120000,
"updated_at": 1789120030,
"resolution": "352P",
"duration": 3,
"ratio": "16:9",
"task_type": "generation",
"modality": "video",
"error": {
"code": "1000",
"message": "video generation failed"
}
}
}import os
import time
from urllib.parse import quote
import requests
task_id = quote(os.environ["FASTART_TASK_ID"], safe="")
headers = {"Authorization": "Bearer " + os.environ["FASTART_KEY"]}
deadline = time.monotonic() + 1800 # Client wait limit, not a server timeout
while time.monotonic() < deadline:
response = requests.get(
f"https://api.fastart.ai/enterprise/minimax/v1/query/video_generation/{task_id}",
headers=headers, timeout=30,
)
if response.status_code == 429 or response.status_code >= 500:
time.sleep(15) # Retry this GET only; never resubmit POST
continue
response.raise_for_status()
task = response.json()["task"]
print(task["status"])
if task["status"] == "succeeded":
print(task["content"]["url"])
break
if task["status"] in ("failed", "cancelled"):
raise RuntimeError(task.get("error", task["status"]))
time.sleep(5)
else:
raise TimeoutError("Keep task_id and query later; do not resubmit.")取消或删除任务
不发送请求体。以服务端当前状态决定行为;查询到 queued 后仍可能已开始执行,此时取消会返回 400。
curl --fail-with-body -X DELETE "https://api.fastart.ai/enterprise/minimax/v1/video_generation/${FASTART_TASK_ID}" \
-H "Authorization: Bearer $FASTART_KEY"| status | action | 结果 |
|---|---|---|
queued | cancelled | 取消任务,释放预占额度。 |
succeeded / failed | deleted | 仅隐藏企业 API 记录;不删除资产或账本,不触发退款。 |
running / cancelled | — | HTTP 400 |
{
"task_id": "00000000-0000-4000-8000-000000000001",
"action": "cancelled",
"status": "cancelled"
}删除后查询或再次删除返回 invalid task_id。失败或结果不确定任务的 Credit 处理由统一账本和恢复机制完成,不能靠重复 DELETE 催退款。
参考图片、视频与音频
素材通过 content 数组传入,不是 multipart 上传。同类素材按数组出现顺序编号,提示词提及顺序不会重排素材。首尾帧与 reference_* 不能混用;图片省略 role 会被当作 first_frame,因此参考图必须明确填写 reference_image。
| type | role | 上限 |
|---|---|---|
image_url | reference_image | 9 张 |
video_url | reference_video | 3 段 |
audio_url | reference_audio | 3 段 |
image_url | first_frame / last_frame | 各 1 张;当前有兼容问题 |
多参考图示例
curl --fail-with-body -X POST "https://api.fastart.ai/enterprise/minimax/v1/video_generation" \
-H "Authorization: Bearer $FASTART_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"content": [
{
"type": "text",
"text": "A golden retriever running on grass. Use the two reference images for its appearance."
},
{
"type": "image_url",
"image_url": {
"url": "https://assets.example.com/reference-1.jpg"
},
"role": "reference_image"
},
{
"type": "image_url",
"image_url": {
"url": "https://assets.example.com/reference-2.jpg"
},
"role": "reference_image"
}
],
"resolution": "352P",
"duration": 3,
"ratio": "16:9"
}'图片+视频+音频示例
curl --fail-with-body -X POST "https://api.fastart.ai/enterprise/minimax/v1/video_generation" \
-H "Authorization: Bearer $FASTART_KEY" \
-H "Content-Type: application/json" \
-d '{
"model": "MiniMax-H3",
"content": [
{
"type": "text",
"text": "A golden retriever running on grass, guided by the reference motion and audio."
},
{
"type": "image_url",
"image_url": {
"url": "https://assets.example.com/reference.jpg"
},
"role": "reference_image"
},
{
"type": "video_url",
"video_url": {
"url": "https://assets.example.com/reference.mp4"
},
"role": "reference_video"
},
{
"type": "audio_url",
"audio_url": {
"url": "https://assets.example.com/reference.wav"
},
"role": "reference_audio"
}
],
"resolution": "352P",
"duration": 3,
"ratio": "16:9"
}'素材 URL 格式
https://assets.example.com/reference.jpg
data:image/png;base64,<BASE64_DATA>
data:video/mp4;base64,<BASE64_DATA>
data:audio/wav;base64,<BASE64_DATA>
mm_file://<FASTART_ASSET_UUID>mm_file:// 仅接受 Key 所属用户及 Workspace 已有的 FASTART 资产 UUID,不接受 MiniMax 的 file_id。本版没有企业 Files 上传接口。外链拒绝内网、回环及云元数据地址;本机文件路径不可直接提交。
| 素材 | 限制(真实文件检测) |
|---|---|
image | ≤30 MiB;JPG/JPEG、PNG、WEBP、HEIC/HEIF(依赖解码器);宽高各 256–5760 px,宽/高 0.4–2.5。 |
video | ≤50 MiB;MP4/MOV;H.264/H.265,音轨 AAC/MP3;23.976–60 fps;尺寸限制同图片;单段 2–15 秒,同类总计≤15秒。 |
audio | ≤15 MiB;WAV/MP3;单段 2–15 秒,同类总计≤15秒。 |
JSON | 请求体总计≤64 MiB,包含 Base64 膨胀和 JSON;大文件优先用 URL。用户存储配额和工作流约束也会生效。 |
状态回调
在创建请求中添加 callback_url,没有单独的回调注册接口。创建前同步 POST challenge,网络超时预算为 1 秒,请立即返回相同 JSON,否则拒绝创建且不扣费。验证计入创建延迟,DNS 解析可能额外耗时。
{
"challenge": "ECHO_THIS_VALUE"
}状态通知结构与 GET 响应相同。后台每 5 秒扫描状态;不是即时或严格顺序保证。首次投递失败后最多重试 3 次,分别等待 10、30、60 秒(从上次失败起算,总共最多投递 4 次);扫描和队列可能使实际投递略有延后。接收端按 task.id + status 去重。回调失败不会重新生成;可用 GET 补查。
错误处理与重试
若底层任务已完成但没有视频输出,查询返回 HTTP 200、status=failed、error.code=video_output_missing,回调保持一致。请联系管理员核查,勿据此自动重跑。cancelled 当前不含 error/content/usage,官方对取消态的字段要求仍待确认。
请求失败使用实际 HTTP 错误码和下面的 JSON 信封;任务执行失败则查询仍返回 HTTP 200,task.status=failed。网关拦截(如 413)可能不是此 JSON 格式。
{
"type": "error",
"error": {
"type": "bad_request_error",
"message": "media url is required (2013)",
"http_code": "400"
},
"request_id": "00000000000000000000000000000001"
}| HTTP / error.type | 处理方式 |
|---|---|
400 · bad_request_error | 检查参数、素材、路由配置或任务归属;修正后再提交,不原样循环重试。 |
401 · authorized_error | 检查 Key、到期时间、邮箱激活和成员权限。 |
402 · insufficient_balance_error | 计费启用时额度不足;充值或联系管理员。 |
429 · rate_limit_error | 降低查询/提交频率。当前每 Workspace 共享 120 次/分钟,不是 120 路并发;轮询也计入。 |
500 · server_error | GET 可退避后重查。POST 结果可能不确定,先核实任务记录,保留 request_id 供排查。 |
请求频率限制
| 范围 | 上限 | 计数方式 |
|---|---|---|
创建、查询、取消/删除任务 | 120 次/分钟 | 同一 Workspace 的所有 Key 和接口共享,轮询也计入。 |
浏览器申请与密钥管理 | 120 次/分钟 | 按用户共享,独立于生成 API 的限流额度。 |
管理写请求 | 额外 30 次/小时 | 申请、创建、显示完整 Key、撤销共享;同时受分钟限制。 |
请求频率不等于任务并发数。并发和排队上限仍按会员等级与队列规则执行;增加 Key 不会增加 Workspace 的请求额度。
生成 API 超限返回 HTTP 429 / rate_limit_error(1002),目前不返回 Retry-After。请降低调用频率,并错开多任务的轮询;管理接口采用浏览器 API 的错误格式。
当前上限固定在代码中,暂不能后台配置。缓存型限流在极端并发下可能略超限,不应视为严格的容量保证。