FreeRap 模板 API
用参考图片生成模板视频:先创建任务,再查询状态并获取生成结果。
根地址https://freerapvideo.com
快速开始
通过四步完成首次调用。请在终端或服务端运行以下命令。
创建 API 密钥
打开「设置 → API」,创建密钥,将完整的 sk_ 密钥保存到环境变量。密钥仅应存放在服务端。
创建 API 密钥Shellexport FREERAP_API_KEY='YOUR_API_KEY'选择模板和参数
获取公开模板目录,选择 slug 和 rows 中列出的 model/resolution 组合,并核对 name、imageSlots 和 defaultDurationSec。此目录接口无需 API 密钥。
GET /api/template-pricescurl https://freerapvideo.com/api/template-prices创建视频任务
示例使用 bulin、一张参考图及 pro / 720p。确认此组合已定价,将示例图片替换成你的公网 HTTPS 图片,再保存响应中的 data.taskId。
POST · cURLcurl --request POST \ 'https://freerapvideo.com/api/v1/templates/bulin/generations' \ --header "Authorization: Bearer $FREERAP_API_KEY" \ --header 'Content-Type: application/json' \ --data '{ "reference_image_urls": ["https://cdn.example.com/face.jpg"], "model": "pro", "resolution": "720p" }'查询生成结果
将 TASK_ID 替换为 data.taskId,约每 30 秒查询一次,直到 success、failed 或 canceled。成功后从 data.videos 读取视频地址。
GET · cURLcurl 'https://freerapvideo.com/api/v1/generations/TASK_ID' \ --header "Authorization: Bearer $FREERAP_API_KEY"
认证
创建和查询任务都必须携带 Authorization 请求头。使用「设置 → API」中的完整 sk_ 密钥。密钥缺失或无效时返回 HTTP 401。不要在浏览器代码中暴露密钥。
Authorization: Bearer <API_KEY>接口约定
模板提供提示词、参考视频和配乐;调用方提供参考图片和生成参数。不支持回调地址,请查询任务获取结果。
请求成功时返回 HTTP 200、code 0、message ok 及 data 对象。请求失败时返回 code -1 和 message。查询成功时,data.status 仍可能表示生成失败。
创建任务
/api/v1/templates/{campaign}/generations为启用的模板创建异步视频生成任务。HTTP 200 表示任务已创建,视频仍在生成中。
必需请求头:Authorization: Bearer <API_KEY> 和 Content-Type: application/json。
路径参数
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
campaign | string | 是 | 已启用模板的 slug,例如 bulin。可通过 GET /api/template-prices 查询。 |
请求体
新接入统一使用 reference_image_urls、model 和 resolution。下表为所有模板通用的请求字段。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
reference_image_urls | string[] | 是 | 必须恰好包含模板 imageSlots 指定数量的非空公开 HTTPS 图片 URL。数组第 1 项对应 @Image1,第 2 项对应 @Image2,以此类推。所有项均必填,顺序保持不变。 |
model | string | 否 | basic | pro | ultra,默认为 pro。必须为此模板和分辨率配置价格。 |
resolution | string | 否 | 480p | 720p | 1080p,默认为 720p。basic 支持 480p 和 720p;pro 与 ultra 还支持 1080p。必须为所选模型已定价。 |
参考图片要求
reference_image_urls 必须包含恰好 N 个可公开访问的 HTTPS 图片 URL;N 为 GET /api/template-prices 返回的模板 imageSlots(1–5)。每张图片须为 JPEG、PNG 或 WebP,默认不超过 10 MB,并使用 443 端口。空字符串、null、缺项或多项均返回 HTTP 400。服务器会按顺序下载并存储图片后再生成。不支持本地文件、内网地址或需要鉴权的 URL。
模板参数规则
模型:basic 支持 480p 和 720p;pro 和 ultra 还支持 1080p。只有所选模板已定价的组合可用。GET /api/template-prices 返回当前可用组合及模板元数据。时长和比例由模板控制,不要传 duration 或 aspect_ratio。image_url、effect、slots、prompt、reference_video_urls、callBackUrl 以及未知字段均会返回 HTTP 400。
输出比例由模板配置为 9:16、16:9 或 adaptive。adaptive 跟随模板参考视频的比例。不要传 aspect_ratio(否则返回 HTTP 400)。后台保存的提示词、参考素材、时长和图片数量共同定义模板的固定效果。
GET /api/template-prices成功响应
以下数值仅为示例。30 积分不是固定价格,请以请求实际返回的报价为准。
{
"code": 0,
"message": "ok",
"data": {
"taskId": "550e8400-e29b-41d4-a716-446655440000",
"status": "processing",
"credits_estimate": 30,
"credits_charged": 30
}
}| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
data.taskId | string (uuid) | 是 | 创建接口返回的任务 UUID。 |
data.status | string | 是 | 创建成功时固定为 processing。 |
data.credits_estimate | integer | 是 | 任务报价,单位为积分,创建时预留。 |
data.credits_charged | integer | 是 | 任务进行中为预留积分;进入终态后为退款处理后的最终扣费。 |
多张参考图片
当模板配置 imageSlots = 3 时,按提示词引用顺序提交恰好三个 URL,并将 YOUR_TEMPLATE_SLUG 替换为该模板的 slug。此例不代表 Bulin 或 Dame Hombro 必须收三张图。无需传人物位置、effect 或 slots 参数。
curl --request POST \
'https://freerapvideo.com/api/v1/templates/YOUR_TEMPLATE_SLUG/generations' \
--header "Authorization: Bearer $FREERAP_API_KEY" \
--header 'Content-Type: application/json' \
--data '{
"reference_image_urls": ["https://cdn.example.com/image-1.jpg", "https://cdn.example.com/image-2.jpg", "https://cdn.example.com/image-3.jpg"],
"model": "pro",
"resolution": "720p"
}'查询任务
/api/v1/generations/{taskId}查询当前 API 密钥所属用户通过 API 创建的任务。无需请求体。可使用创建时的密钥,或同一用户的其他有效密钥。
| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
taskId | string (uuid) | 是 | 创建接口返回的任务 UUID。 |
成功响应
{
"code": 0,
"message": "ok",
"data": {
"taskId": "550e8400-e29b-41d4-a716-446655440000",
"status": "success",
"campaign": "bulin",
"costCredits": 30,
"credits_estimate": 30,
"credits_charged": 30,
"createdAt": "2026-10-31T00:00:00.000Z",
"videos": [
"https://media.example.com/generated/video.mp4"
]
}
}| 字段 | 类型 | 必填 | 说明 |
|---|---|---|---|
data.taskId | string (uuid) | 是 | 创建接口返回的任务 UUID。 |
data.status | string | 是 | pending | processing | success | failed | canceled,见下方状态表。 |
data.campaign | string | 否 | 公开模板 slug。部分历史任务可能不返回。 |
data.credits_estimate | integer | 是 | 任务报价,单位为积分,创建时预留。 |
data.credits_charged | integer | 是 | 任务进行中为预留积分;进入终态后为退款处理后的最终扣费。 |
data.costCredits | integer | 是 | 兼容字段,与 credits_charged 数值相同。 |
data.createdAt | string (date-time) | 是 | 任务创建时间,ISO 8601 格式,UTC。 |
data.videos | string[] | 是 | 成功时为 FreeRap 存储托管的视频 URL;其他状态为空数组。 |
data.error | string | 否 | 有错误说明时返回。pending 或 processing 时不返回,不是稳定的错误码。 |
任务状态
| 状态 | 是否终态 | 说明 |
|---|---|---|
pending | 否 | 等待处理,继续查询。 |
processing | 否 | 正在生成,继续查询。 |
success | 是 | 生成成功,读取 videos 并停止查询。 |
failed | 是 | 生成失败,读取 error(如有)并停止查询。 |
canceled | 是 | 任务已取消,停止查询。 |
建议约每 30 秒查询一次,进入终态后停止。查询超时不代表生成失败,请继续查询原任务。
生成失败的响应
HTTP 200 和 code 0 只表示查询成功。生成任务可能失败,必须检查 data.status。失败任务的 videos 为空数组,并可能包含 error。
{
"code": 0,
"message": "ok",
"data": {
"taskId": "550e8400-e29b-41d4-a716-446655440000",
"status": "failed",
"campaign": "bulin",
"costCredits": 0,
"credits_estimate": 30,
"credits_charged": 0,
"createdAt": "2026-10-31T00:00:00.000Z",
"videos": [],
"error": "Video generation failed."
}
}错误响应
请求错误使用非 2xx HTTP 状态码及以下响应体,code 均为 -1。通过 HTTP 状态码区分错误类别。message 是说明文本,不是稳定的机器可读错误标识。
{
"code": -1,
"message": "Insufficient credits."
}| HTTP 状态码 | 适用接口 | 原因 | 处理方式 |
|---|---|---|---|
400 | POST | JSON、字段、图片、模型、分辨率或时长不符合要求。 | 修正请求后重试。 |
401 | POST / GET | 缺少 API 密钥或密钥无效。 | 检查 Authorization 请求头和密钥。 |
402 | POST | FreeRap 余额不足,未启动任务。 | 补充积分后重新创建。 |
403 | POST | 模板未为此模型与分辨率组合配置价格。 | 从 /api/template-prices 选择已定价组合。 |
404 | POST / GET | 模板不可用,或任务不存在、已删除、无权访问或并非通过 API 创建。 | 检查 slug、任务 ID 和账户。任务不可访问时停止查询。 |
429 | POST / GET | 超过请求频率或 30 个进行中任务的限制。 | 遵循 Retry-After(如有),或等待进行中的任务结束。 |
500 | POST / GET | 服务端内部错误。 | 查询可延迟重试;创建任务可能已启动,避免重复提交。 |
503 | POST | 积分定价、存储或生成服务不可用。 | 稍后重试,持续出现时联系支持。 |
积分与限流
创建任务时预留积分。pending 或 processing 期间,credits_charged 等于 credits_estimate。成功后保留扣费;失败或取消后退还预留积分,扣除已配置的失败费用(默认为 0)。终态响应中的 credits_charged 为最终扣费。
每个 API 密钥最多同时有 30 个 pending 或 processing 任务。在单个服务实例上,每个密钥最多每秒创建一次、每秒查询五次。HTTP 429 可能带有以秒为单位的 Retry-After;未提供时,请等待后重试。
