FreeRap 模板 API

用参考图片生成模板视频:先创建任务,再查询状态并获取生成结果。

根地址https://freerapvideo.com

快速开始

通过四步完成首次调用。请在终端或服务端运行以下命令。

  1. 创建 API 密钥

    打开「设置 → API」,创建密钥,将完整的 sk_ 密钥保存到环境变量。密钥仅应存放在服务端。

    创建 API 密钥
    Shell
    export FREERAP_API_KEY='YOUR_API_KEY'

  2. 选择模板和参数

    获取公开模板目录,选择 slug 和 rows 中列出的 model/resolution 组合,并核对 name、imageSlots 和 defaultDurationSec。此目录接口无需 API 密钥。

    GET /api/template-prices
    curl https://freerapvideo.com/api/template-prices

  3. 创建视频任务

    示例使用 bulin、一张参考图及 pro / 720p。确认此组合已定价,将示例图片替换成你的公网 HTTPS 图片,再保存响应中的 data.taskId。

    POST · cURL
    curl --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"
      }'

  4. 查询生成结果

    将 TASK_ID 替换为 data.taskId,约每 30 秒查询一次,直到 success、failed 或 canceled。成功后从 data.videos 读取视频地址。

    GET · cURL
    curl 'https://freerapvideo.com/api/v1/generations/TASK_ID' \
      --header "Authorization: Bearer $FREERAP_API_KEY"

认证

创建和查询任务都必须携带 Authorization 请求头。使用「设置 → API」中的完整 sk_ 密钥。密钥缺失或无效时返回 HTTP 401。不要在浏览器代码中暴露密钥。

HTTP
Authorization: Bearer <API_KEY>

接口约定

模板提供提示词、参考视频和配乐;调用方提供参考图片和生成参数。不支持回调地址,请查询任务获取结果。

请求成功时返回 HTTP 200、code 0、message ok 及 data 对象。请求失败时返回 code -1 和 message。查询成功时,data.status 仍可能表示生成失败。

创建任务

POST/api/v1/templates/{campaign}/generations

为启用的模板创建异步视频生成任务。HTTP 200 表示任务已创建,视频仍在生成中。

必需请求头:Authorization: Bearer <API_KEY> 和 Content-Type: application/json。

路径参数

创建任务: 路径参数
字段类型必填说明
campaignstring是已启用模板的 slug,例如 bulin。可通过 GET /api/template-prices 查询。

请求体

新接入统一使用 reference_image_urls、model 和 resolution。下表为所有模板通用的请求字段。

创建任务: 请求体
字段类型必填说明
reference_image_urlsstring[]是必须恰好包含模板 imageSlots 指定数量的非空公开 HTTPS 图片 URL。数组第 1 项对应 @Image1,第 2 项对应 @Image2,以此类推。所有项均必填,顺序保持不变。
modelstring否basic | pro | ultra,默认为 pro。必须为此模板和分辨率配置价格。
resolutionstring否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 积分不是固定价格,请以请求实际返回的报价为准。

HTTP 200 · JSON
{
  "code": 0,
  "message": "ok",
  "data": {
    "taskId": "550e8400-e29b-41d4-a716-446655440000",
    "status": "processing",
    "credits_estimate": 30,
    "credits_charged": 30
  }
}

创建任务: 响应字段
字段类型必填说明
data.taskIdstring (uuid)是创建接口返回的任务 UUID。
data.statusstring是创建成功时固定为 processing。
data.credits_estimateinteger是任务报价,单位为积分,创建时预留。
data.credits_chargedinteger是任务进行中为预留积分;进入终态后为退款处理后的最终扣费。
多张参考图片

当模板配置 imageSlots = 3 时,按提示词引用顺序提交恰好三个 URL,并将 YOUR_TEMPLATE_SLUG 替换为该模板的 slug。此例不代表 Bulin 或 Dame Hombro 必须收三张图。无需传人物位置、effect 或 slots 参数。

POST · cURL
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"
  }'

错误响应 · HTTP 400 / 401 / 402 / 403 / 404 / 429 / 500 / 503

查询任务

GET/api/v1/generations/{taskId}

查询当前 API 密钥所属用户通过 API 创建的任务。无需请求体。可使用创建时的密钥,或同一用户的其他有效密钥。

查询任务: 路径参数
字段类型必填说明
taskIdstring (uuid)是创建接口返回的任务 UUID。

成功响应

HTTP 200 · JSON
{
  "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.taskIdstring (uuid)是创建接口返回的任务 UUID。
data.statusstring是pending | processing | success | failed | canceled,见下方状态表。
data.campaignstring否公开模板 slug。部分历史任务可能不返回。
data.credits_estimateinteger是任务报价,单位为积分,创建时预留。
data.credits_chargedinteger是任务进行中为预留积分;进入终态后为退款处理后的最终扣费。
data.costCreditsinteger是兼容字段,与 credits_charged 数值相同。
data.createdAtstring (date-time)是任务创建时间,ISO 8601 格式,UTC。
data.videosstring[]是成功时为 FreeRap 存储托管的视频 URL;其他状态为空数组。
data.errorstring否有错误说明时返回。pending 或 processing 时不返回,不是稳定的错误码。

任务状态

任务状态
状态是否终态说明
pending否等待处理,继续查询。
processing否正在生成,继续查询。
success是生成成功,读取 videos 并停止查询。
failed是生成失败,读取 error(如有)并停止查询。
canceled是任务已取消,停止查询。

建议约每 30 秒查询一次,进入终态后停止。查询超时不代表生成失败,请继续查询原任务。

生成失败的响应

HTTP 200 和 code 0 只表示查询成功。生成任务可能失败,必须检查 data.status。失败任务的 videos 为空数组,并可能包含 error。

HTTP 200 · JSON
{
  "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."
  }
}

错误响应 · HTTP 401 / 404 / 429 / 500

错误响应

请求错误使用非 2xx HTTP 状态码及以下响应体,code 均为 -1。通过 HTTP 状态码区分错误类别。message 是说明文本,不是稳定的机器可读错误标识。

HTTP 402 · JSON
{
  "code": -1,
  "message": "Insufficient credits."
}

错误响应
HTTP 状态码适用接口原因处理方式
400POSTJSON、字段、图片、模型、分辨率或时长不符合要求。修正请求后重试。
401POST / GET缺少 API 密钥或密钥无效。检查 Authorization 请求头和密钥。
402POSTFreeRap 余额不足,未启动任务。补充积分后重新创建。
403POST模板未为此模型与分辨率组合配置价格。从 /api/template-prices 选择已定价组合。
404POST / GET模板不可用,或任务不存在、已删除、无权访问或并非通过 API 创建。检查 slug、任务 ID 和账户。任务不可访问时停止查询。
429POST / GET超过请求频率或 30 个进行中任务的限制。遵循 Retry-After(如有),或等待进行中的任务结束。
500POST / GET服务端内部错误。查询可延迟重试;创建任务可能已启动,避免重复提交。
503POST积分定价、存储或生成服务不可用。稍后重试,持续出现时联系支持。

积分与限流

创建任务时预留积分。pending 或 processing 期间,credits_charged 等于 credits_estimate。成功后保留扣费;失败或取消后退还预留积分,扣除已配置的失败费用(默认为 0)。终态响应中的 credits_charged 为最终扣费。

每个 API 密钥最多同时有 30 个 pending 或 processing 任务。在单个服务实例上,每个密钥最多每秒创建一次、每秒查询五次。HTTP 429 可能带有以秒为单位的 Retry-After;未提供时,请等待后重试。

创建接口尚不支持幂等键。POST 超时或返回服务端错误时,任务可能已经创建。请勿直接自动重发,以免产生重复任务和扣费。