01 / FRAMEGATE API开始接入
通过统一 API 调用已授权的文本、视频和图片模型,并查询账户余额与用量。视频通常异步完成:提交任务后保存任务 ID,再轮询获取结果。
- 由服务方开通账户、分配模型并确认余额;登录控制台,在 API Key 页面创建密钥并妥善保存。
- 调用
GET /v1/models获取当前 Key 可用的模型 ID、售价与上限。 - 每个新生成业务创建一个幂等键,保存请求内容;同一业务重试必须复用该键和请求体。
- 提交生成请求;视频和异步图片按任务 ID 查询,成功后及时保存结果文件。
| 项目 | 配置 |
|---|---|
| 服务地址 | https://api.myanimforge.com |
| API Base URL | https://api.myanimforge.com/v1 |
| 客户后台 | https://47.111.229.99/user/ |
| 鉴权 | Authorization: Bearer YOUR_API_KEY |
| 请求格式 | POST 使用 Content-Type: application/json,UTF-8 |
| 计价币种 | CNY 人民币;模型是否可用及当前售价以您的账户配置为准 |
建议由客户自己的后端调用 API。当前未提供面向第三方网页的跨域直连能力,勿将 API Key 放入浏览器、前端源码或公开仓库。
02 / FRAMEGATE API鉴权与幂等
所有 /v1/ 接口均使用 Bearer API Key,无需携带控制台 Cookie。控制台登录密码不能代替 API Key。密钥必须同时具备有效账户、模型授权以及适用的 Key 模型范围。
Authorization: Bearer YOUR_API_KEY
Content-Type: application/json
Idempotency-Key: customer-order-20261027-000001Idempotency-Key 是所有生成 POST 请求的必填请求头,长度为 8–100 字符。推荐使用业务订单号或 UUID。一次生成对应一个键:网络超时、连接中断或重试时保持键和请求体一致;只有明确创建新的生成任务时才使用新键。
- 同一账户、同一生成类型下,复用相同键及内容会返回已有任务或可重放的响应,不重复派发。
- 同一键对应不同内容返回
409 idempotency_conflict。 - 非流式文本在响应仍保留时可重放;流式或无法重放的文本请求返回
409 request_already_exists,此时查询用量或联系服务方。 - 先保存幂等键和请求体,再发起 POST。视频返回的
id是后续查询使用的网关任务 ID。
API 的 X-Request-ID 响应头是单次 HTTP 请求追踪号,区别于生成任务 ID。联系客服时可一并提供。
03 / FRAMEGATE API接口一览
| 方法 | 路径 | 用途 |
|---|---|---|
| GET | /v1/models | 查询当前 Key 的模型、售价和限制 |
| POST | /v1/chat/completions | 文本生成;支持非流式和 SSE |
| POST | /v1/videos | 创建异步视频任务 |
| GET | /v1/videos/{id} | 查询视频任务、结果和计费状态 |
| POST | /v1/images/generations | 生成图片;同步或异步返回 |
| GET | /v1/images/{id} | 查询图片任务、结果和计费状态 |
| GET | /v1/balance | 查询账户余额和预占额度 |
| GET | /v1/usage | 按模型汇总账户用量与费用 |
下文 cURL 使用 Bash 语法,适用于 Linux、macOS 或 Git Bash。Windows PowerShell 建议运行文末 Python 示例,避免换行与引号差异。示例环境变量:
export FRAMEGATE_API_KEY='YOUR_API_KEY'
export FRAMEGATE_BASE_URL='https://api.myanimforge.com'04 / FRAMEGATE API查询模型与售价
curl --fail-with-body "$FRAMEGATE_BASE_URL/v1/models" \
-H "Authorization: Bearer $FRAMEGATE_API_KEY"{
"object": "list",
"data": [
{
"id": "YOUR_VIDEO_MODEL_ID",
"kind": "video",
"billing_unit": "seconds",
"pricing_rules": [],
"input_price": "0.00000000",
"output_price": "0.15000000",
"max_input": 32768,
"max_output": 4096,
"max_seconds": 30
}
]
}上例仅演示结构。model 必须填写查询结果里的 id,不要使用显示名称或自行推测上游模型名。空数组表示当前 Key 没有可见模型,请联系服务方确认授权、开放状态和定价。
| 字段 | 含义 |
|---|---|
| kind | text 文本、video 视频、image 图片 |
| billing_unit | tokens:元/百万输入、输出 Token;total_tokens:元/百万总 Token;seconds:元/秒;videos:元/条视频;images:元/张。model 表示按类型默认单位(文本 Token、视频秒、图片张)。 |
| input_price / output_price | 单一价格模型使用这两个字段;多档模型显示首档单价,实际计费请读取 pricing_rules。 |
| pricing_rules / pricing_defaults | pricing_rules 列出规格 when、名称 label、输入价 input_rate 和输出价 output_rate。按分辨率、参考视频、音频、错峰、时长或实际输入 Token 档位匹配。when.input_min 和 input_max 均含边界;缺少 input_max 表示无上界。pricing_defaults.options 为省略参数时实际发送给上游的默认值;fixed_resolution 为模型固定分辨率。未报价规格返回 unpriced_variant,不发起生成。 |
| video_token_budget | 仅 Token 计费视频使用的预占预算,结算仍使用上游实际总 Token;实际费用可能高于或低于预占金额。 |
| max_input | 文本安全输入预算;当前同时用请求 JSON 的 UTF-8 字节数做保守校验,不是上游上下文长度承诺。 |
| max_output | 文本允许的 max_tokens 上限。 |
| max_seconds | 视频允许的请求时长上限;仍受具体模型自身时长规则限制。 |
金额使用十进制字符串返回,请用 Decimal 等十进制定点方式处理,不要用二进制浮点做账。模型价格可能调整;已受理请求按受理时保存的价格快照结算。
05 / FRAMEGATE API视频生成与轮询
创建视频
POST /v1/videos 成功受理返回 HTTP 202;202 表示已接收任务,不代表生成已成功。
| 参数 | 必填 | 规则 |
|---|---|---|
| model | 是 | 当前 Key 可用的 video 模型 ID,最长 80 字符 |
| prompt | 是 | 1–12000 字符;Vidu 最多 5000,海螺最多 2000 |
| duration_seconds | 是 | 整数,1–3600,且不得超过模型 max_seconds;具体可选时长由模型决定。Seedance 2.5 最短 5 秒;不足 5 秒返回 invalid_duration,不预占、不提交上游 |
| media | 否 | 素材数组,网关通用上限 50 项;每项含 type、url、可选 role;模型可能要求素材并有更低上限 |
| options | 否 | 模型专属参数对象,默认 {};只允许支持的字段,不能在此覆盖 model、duration 或回调地址 |
以下为 Vidu Q3 Turbo 主体参考视频示例:将模型 ID 替换为您获授权的对应模型,将图片替换为公开可读取的 HTTPS 图片链接。该模型需要 1–7 张参考图。
{
"model": "REPLACE_WITH_AUTHORIZED_VIDU_Q3_TURBO_ID",
"prompt": "参考主体 [@image1],固定镜头,柔和自然光,光影缓慢移动,无文字。",
"duration_seconds": 5,
"media": [
{
"type": "image",
"url": "https://your-public-assets.example/reference.jpg",
"role": "reference_image"
}
],
"options": {
"resolution": "540p",
"aspect_ratio": "16:9",
"audio": false,
"bgm": false,
"off_peak": false
}
}将上面的 JSON 保存为 video-request.json,同一业务使用固定幂等键提交:
curl --fail-with-body "$FRAMEGATE_BASE_URL/v1/videos" \
-H "Authorization: Bearer $FRAMEGATE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: customer-video-order-000001' \
--data-binary @video-request.json{
"id": "11111111-1111-4111-8111-111111111111",
"model": "YOUR_VIDEO_MODEL_ID",
"status": "queued",
"usage": {
"video_seconds": null,
"video_count": null,
"total_tokens": null,
"input_tokens": null,
"output_tokens": null
},
"billing": {
"currency": "CNY",
"amount": "0.00000000",
"status": "reserved",
"reserved_amount": "0.75000000"
},
"result": {
"url": null,
"urls": []
},
"error_code": null
}查询任务
保存返回的 id,建议每 10 秒查询一次。查询接口只返回您账户自己的任务。
curl --fail-with-body "$FRAMEGATE_BASE_URL/v1/videos/11111111-1111-4111-8111-111111111111" \
-H "Authorization: Bearer $FRAMEGATE_API_KEY"{
"id": "11111111-1111-4111-8111-111111111111",
"model": "YOUR_VIDEO_MODEL_ID",
"status": "succeeded",
"usage": {
"video_seconds": "5.0000",
"video_count": 1,
"total_tokens": 0,
"input_tokens": 0,
"output_tokens": 0
},
"billing": {
"currency": "CNY",
"amount": "0.75000000",
"status": "settled",
"reserved_amount": "0.75000000"
},
"result": {
"url": "https://media.example/result.mp4",
"urls": [
"https://media.example/result.mp4"
]
},
"error_code": null
}result.url 为第一个视频链接,result.urls 为全部结果链接。优先按 status 判断生成结果,再按 billing.status 判断费用是否已结算;二者互相独立。
视频未提供 Token 计量时,未结算响应可能为 null,已结算记录或汇总也可能显示 0;不要据此推断模型消耗为零。视频按模型 billing_unit 和 pricing_rules 计费:按秒使用实际时长、按条使用成功视频数量、按总 Token 使用实际 total_tokens。缺少对应实际用量时进入待对账;不能用请求时长推算 Token。
06 / FRAMEGATE API视频模型参数说明
下表列出网关支持传递的参数名。模型授权不等于所有参数组合都可用;分辨率、时长、音频及素材组合仍受具体模型限制。首次接入建议从最少参数开始,再逐项增加。未列出的字段会被拒绝。
| 模型系列 | options 可传字段 | 关键规则 |
|---|---|---|
| Vidu Q3 系列 | aspect_ratio、resolution、audio、bgm、movement_amplitude、seed、off_peak | resolution 为 540p/720p/1080p;aspect_ratio 为 16:9/9:16/1:1/3:4/4:3;movement_amplitude 为 auto/small/medium/large。Q3 和 Q3 Turbo 必须传 1–7 张主体参考图片(role 省略或 reference_image),按顺序可用 [@image1] 等引用。 |
| Kling v3 系列 | size、aspect_ratio、audio_generation、negative_prompt、cfg_scale | size 为 720P/1080P;aspect_ratio 为 16:9/9:16/1:1;cfg_scale 为 0–1 数字。当前只支持图片素材。 |
| Hailuo 系列 | resolution、prompt_optimizer、fast_pretreatment、aigc_watermark | 时长 6 或 10 秒;resolution 为 768P/1080P;1080P 仅允许 6 秒。当前只支持图片素材。 |
| MiniMax H3 | ratio、resolution | 可传图片或视频素材,素材不要填写 role。 |
| Seedance 与 Seedance Lite | ratio、resolution、watermark、generate_audio、seed、camera_fixed、return_last_frame | Lite i2v 需要图片;Lite t2v 不接受素材。Seedance face 当前仅支持 ratio,分辨率由模型决定。 |
| Wan 视频系列 | ratio、resolution、watermark、prompt_extend、shot_type、seed | Wan 2.6 i2v 使用图片素材;其他素材组合以具体模型支持为准。 |
布尔参数使用 JSON 的 true/false,不要写成字符串。Vidu 与 Kling 等协议的 seed 使用 0–4294967295 的整数。参数大小写需保持一致。
素材格式
{
"type": "image",
"url": "https://your-public-assets.example/reference.jpg",
"role": "reference_image"
}type 可取 image、video、audio,但并非每个模型都支持全部类型。url 必须为可公开访问的 HTTPS 文件地址,不能使用本地路径、内网链接或需要额外 Cookie 的地址;须在任务完成前保持有效。当前 API 不提供文件上传接口。
通用 role 枚举为 first_frame、last_frame、reference_image、reference_video、reference_audio、video、driving_audio。仅填写对应模型支持的用途:Kling/Hailuo 的图片角色支持 first_frame 或 reference_image;Vidu Q3 / Q3 Turbo 仅支持主体参考用途,不支持 first_frame / last_frame;Vidu Q3 Mix 首尾帧需各一张且不混用其他图片。不要把完整枚举理解为所有模型均支持。
07 / FRAMEGATE API文本生成
POST /v1/chat/completions 提供 Chat Completions 风格接口。当前消息 content 接受字符串或 null,不接受图片/音频内容数组。消息角色可为 system、developer、user、assistant、tool。
curl --fail-with-body "$FRAMEGATE_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer $FRAMEGATE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: customer-text-order-000001' \
-d '{
"model": "YOUR_TEXT_MODEL_ID",
"messages": [{"role": "user", "content": "写一个五秒短视频的镜头脚本"}],
"max_tokens": 512,
"stream": false
}'| 参数 | 说明 |
|---|---|
| model / messages | 必填;messages 为 1–256 条消息。消息仅支持 role、content、name、tool_calls、tool_call_id、refusal 字段。 |
| service_tier | 可选 standard / priority。只有模型报价包含对应服务档位时可用;默认 standard。 |
| max_tokens | 默认 1024,范围 1–65536,且不超过模型 max_output。 |
| stream | 默认 false;true 使用 SSE。 |
| temperature / top_p | 可选,分别为 0–2 和 0–1。 |
| tools / tool_choice / response_format / stop | 可选,是否可用由具体模型决定;tools 最多 64 项。其他未声明的顶层字段会被拒绝。 |
非流式 HTTP 200 响应通常含 choices、usage,并增加以下网关信息。即使生成返回 200,仍须查看账务状态;缺失实际用量时会进入 pending。
{
"gateway": {
"request_id": "11111111-1111-4111-8111-111111111111",
"billing": {
"currency": "CNY",
"amount": "0.00200000",
"status": "settled",
"reserved_amount": "0.02000000"
}
}
}流式输出
将 stream 改为 true,cURL 添加 -N。响应类型为 text/event-stream,逐条解析 data:,遇到 [DONE] 结束。使用响应头 X-Gateway-Request-ID 保存网关请求 ID;SSE 不附加上述非流式 gateway 对象。流式结束后的费用通过用量或控制台查询。
无需传 stream_options,网关会请求上游返回用量。连接中断不代表服务端任务被撤销,也不保证免收费;不要更换幂等键自动重新生成。
08 / FRAMEGATE API图片生成
POST /v1/images/generations 的基础参数为 model、prompt、n、media、options。model 和 prompt 必填;prompt 为 1–12000 字符;n 默认 1,范围 1–10,当前 Seedream 每次仅支持 1 张。
curl --fail-with-body "$FRAMEGATE_BASE_URL/v1/images/generations" \
-H "Authorization: Bearer $FRAMEGATE_API_KEY" \
-H 'Content-Type: application/json' \
-H 'Idempotency-Key: customer-image-order-000001' \
-d '{"model":"YOUR_IMAGE_MODEL_ID","prompt":"白色桌面上的蓝色陶瓷杯,柔和自然光","n":1}'可选 media 最多 10 项,当前只接受 image 类型。options 允许 size、watermark、seed、prompt_extend、negative_prompt;合法值与支持组合由所选模型决定。
{
"id": "22222222-2222-4222-8222-222222222222",
"model": "YOUR_IMAGE_MODEL_ID",
"status": "succeeded",
"data": [
{
"url": "https://media.example/result.png"
}
],
"usage": {
"image_count": 1
},
"billing": {
"currency": "CNY",
"amount": "0.10000000",
"status": "settled",
"reserved_amount": "0.10000000"
},
"error_code": null
}同步生成通常返回 HTTP 200;异步受理返回 202,data 可能为空,此时使用 GET /v1/images/{id} 每 10 秒查询,响应结构相同。HTTP 200 也可能是待对账记录,最终以 status 与 billing.status 为准。成功图片在 data 数组中,每项含 url,建议及时保存。
09 / FRAMEGATE API余额与用量统计
curl --fail-with-body "$FRAMEGATE_BASE_URL/v1/balance" \
-H "Authorization: Bearer $FRAMEGATE_API_KEY"{
"balance": "100.00000000",
"reserved": "2.00000000",
"available": "98.00000000",
"currency": "CNY"
}balance 为账面余额,reserved 为当前账户冻结的预占额度,available = balance - reserved 为可用余额。生成前先预占、确认实际用量后结算;余额不足以预占时返回 402。
| 类型 | 预占 | 实际结算 |
|---|---|---|
| 文本 | (max_input × 输入单价 + 请求 max_tokens × 输出单价) ÷ 1,000,000 | (实际输入 Token × 输入单价 + 实际输出 Token × 输出单价) ÷ 1,000,000 |
| 视频 | 请求 duration_seconds × 视频秒价 | 实际返回总视频秒数 × 视频秒价 |
| 图片 | 请求 n × 图片单价 | 成功图片数量 × 图片单价 |
实际用量缺失时保留预占并进入待对账,不使用估算用量自动结算。若实际消费超出预占,按实际消费记账,可能形成欠费;余额不足后续调用会被拒绝。任务响应中的 billing.reserved_amount 是该任务最初的预占金额,结算后仍保留作记录,不代表当前仍在冻结;实时冻结金额看 /v1/balance。
按模型统计
curl --fail-with-body --get "$FRAMEGATE_BASE_URL/v1/usage" \
-H "Authorization: Bearer $FRAMEGATE_API_KEY" \
--data-urlencode 'start=2026-10-01T00:00:00+08:00' \
--data-urlencode 'end=2026-11-01T00:00:00+08:00'{
"data": [
{
"model_id": "YOUR_VIDEO_MODEL_ID",
"kind": "video",
"calls": 2,
"settled_calls": 1,
"input_tokens": "0",
"output_tokens": "0",
"video_seconds": "5.0000",
"image_count": 0,
"amount": "0.75000000"
}
],
"currency": "CNY"
}- 不传时间默认最近 30 天;start、end 必须含时区,区间为
[start, end),最多 366 天。 - 按请求创建时间筛选,范围为整个账户的历史请求,不局限于当前 Key 的模型范围。
- calls 为调用记录数,包含失败或待对账记录;settled_calls 为已结算数。
- amount 为累计记录的消费额,退款不会冲减此统计;净余额及退款请以控制台流水为准。
- 统计可能随异步结算更新。Token 汇总值可为字符串;视频或图片显示 0 不代表上游声明零 Token 消耗。
10 / FRAMEGATE API任务状态与重试策略
| status | 含义与处理 |
|---|---|
| created / dispatching | 任务已记录或正在提交;继续查询,勿重复创建。 |
| queued / running | 排队或处理中;通常每 10 秒查询。 |
| succeeded | 生成已成功;读取结果,再检查 billing.status。 |
| failed | 生成失败;检查 error_code 与账务状态。失败不一定等于预占已释放。 |
| unknown | 结果暂无法确认;联系服务方对账,不要以新幂等键重发。 |
| billing.status | 含义与处理 |
|---|---|
| reserved | 已预占,尚未完成结算。 |
| settled | 已按实际用量结算,amount 为本次消费额。 |
| released | 本次预占已释放,不扣该次消费。 |
| pending | 待对账,额度可能仍被冻结。即使 status=succeeded,也可能尚未结算;保存结果并联系服务方。 |
处理顺序:成功则保存结果;failed、unknown 或 pending 则停止自动重发并记录任务 ID;仅在 queued/running 等处理中状态继续轮询。遇 429 遵从 Retry-After,其他查询网络故障可退避重试 GET。
提交超时或 5xx 时,先保留原幂等键与请求体;若已有任务 ID 则查询任务,否则使用原键和原内容恢复查询式提交,或联系服务方。不要因为客户端等候结束就重新创建任务。当前不提供取消或回调接口。
限流按账户计算,多个 Key 共用账户额度,查询也计入请求频率;具体 RPM 由服务方设置。每账户最多 20 个执行中或待对账请求。通常视频服务端跟踪最长 24 小时,配置低峰策略的 Vidu 渠道可能为 72 小时;超时后可能转待对账,并不代表自动退款。
11 / FRAMEGATE API错误码与排查
{
"error": {
"code": "insufficient_balance",
"message": "可用余额不足以预占本次调用额度",
"request_id": "HTTP_TRACE_ID"
}
}| HTTP | 常见 error.code | 处理方式 |
|---|---|---|
| 400 | idempotency_key_required / invalid_request 类参数错误 | 检查必填头、字段类型、模型参数;具体格式错误通常返回 422。 |
| 400 | invalid_model / model_not_ready / limit_exceeded / input_limit | 查询可用模型,确认类型、价格配置及输入输出限制。 |
| 400 | unsupported_options / invalid_options / image_required / invalid_duration / unsupported_media | 按模型规则修正参数和素材,查看 message。 |
| 400 | unpriced_variant | 模型没有匹配此参数组合的报价;查看 /v1/models 的 pricing_rules,调整规格或联系服务方。 |
| 400 | upstream_rejected | 上游拒绝本次参数,该拒绝分支会释放预占;修正参数后作为新业务提交。 |
| 401 | invalid_api_key | 检查 Bearer 前缀、密钥、有效期、账户状态及是否已撤销。 |
| 402 | insufficient_balance | 查询 available,联系服务方处理充值或预占对账。 |
| 403 | model_not_allowed / key_scope_denied / account_disabled / origin_denied | 检查账户及 Key 授权;从服务端接入,勿从其他网站跨域直调。 |
| 404 | not_found | 检查任务 ID,确认任务属于当前账户及正确的接口类型。 |
| 409 | idempotency_conflict / request_already_exists | 保留原业务键;内容冲突需检查业务映射,已存在请求应查询记录。 |
| 413 | body_too_large | 请求体上限 256 KiB;素材用 URL 引用,不内嵌大文件。 |
| 422 | invalid_request | 按 error.fields 定位字段,额外字段也会被拒绝。 |
| 429 | rate_limit_exceeded / concurrency_limit | 等待 Retry-After,降低频率或先处理未完成任务。 |
| 502 | submit_outcome_unknown / upstream_outcome_unknown / task_id_missing | 结果不确定,可能已保留预占;不要换新键自动生成。 |
| 503 | no_available_channel | 暂时无可用渠道;稍后用原键重试或联系服务方确认配置。 |
| 500 | internal_error | 保留追踪号、幂等键和业务记录,联系服务方;避免盲目创建新任务。 |
并非所有错误 JSON 都含 request_id,优先保存响应头 X-Request-ID。中间代理也可能返回非 JSON 错误,客户端应同时检查 HTTP 状态、Content-Type 和响应文本。提交排障信息时提供时间、接口、模型、HTTP 状态、错误码、任务 ID、追踪号和幂等键,不要发送完整 API Key。
12 / FRAMEGATE API下载与 Python 示例
离线接入包包含本页面、客户接口 OpenAPI 文件、Python 视频提交与轮询示例,以及可修改的请求 JSON。OpenAPI 可导入 Postman、Apifox 等工具;它只包含客户接口,不包含管理接口。
下载完整接入包下载 OpenAPI JSON下载 Python 示例
- 安装 Python 3.10 或更新版本,然后安装 requests。
- 复制
video-request.example.json为video-request.json,替换模型 ID 和素材地址。 - 设置自己的 API Key。首次运行会保存幂等键与任务 ID;恢复执行时使用相同的 state 文件。
python -m pip install requests
# Linux / macOS / Git Bash
export FRAMEGATE_API_KEY='YOUR_API_KEY'
python video_client.py --payload video-request.json --state order-000001.json# Windows PowerShell
$env:FRAMEGATE_API_KEY = 'YOUR_API_KEY'
python video_client.py --payload video-request.json --state order-000001.json默认本地等待 1800 秒,可用 --wait-seconds 调整。达到等待时间只停止客户端查询,不会取消服务端任务;重新运行同一命令即可继续查询。请勿同时运行多个使用同一 state 文件的进程,也不要修改已有 state 文件对应的请求内容。state 中保存请求内容和结果链接,应按业务数据妥善保存。
上线前核对
- 模型 ID 来自当前 Key 的查询结果,售价与业务预算已确认。
- 幂等键在发起请求前持久化,任务 ID 和错误追踪号可追溯。
- 能区分生成状态和账务状态,pending 不被当作免费或可自动重试。
- 轮询遵守账户限流,结果文件及时转存,密钥只保存在服务端。