Skip to content

API Key 视频生成完整教程 ​

先完成快速开始,并在模型广场确认所选模型的接口、参数和价格。这里重点说明如何稳妥处理异步任务,不固定某一个模型的名称或配置。

接口与任务 ID ​

用途接口
查询当前密钥可用模型GET /v1/models
创建视频POST /v1/videos
查询状态GET /v1/videos/{task_id}
下载视频GET /v1/videos/{task_id}/content

创建响应中的 task_id 或 id 是之后查询与下载的依据。收到成功响应后立即保存它。任务长时间未完成时,可以停止本地等待,之后继续查询同一个任务;不要自动重新提交。

cURL 轮询 ​

以下示例要求 ROUTERBEE_API_KEY 和 TASK_ID 已按快速开始设置,并安装 jq:

bash
while :; do
  RESPONSE=$(curl --silent --show-error --fail-with-body \
    "https://routerbee.com/v1/videos/$TASK_ID" \
    --header "Authorization: Bearer $ROUTERBEE_API_KEY") || exit 1

  STATUS=$(printf '%s' "$RESPONSE" | jq -r '.status // empty')
  case "$STATUS" in
    completed) break ;;
    failed)
      printf '%s\n' "$RESPONSE" >&2
      exit 1
      ;;
    queued|in_progress) sleep 5 ;;
    *)
      printf '未知任务状态:%s\n' "$STATUS" >&2
      exit 1
      ;;
  esac
done

curl --fail --show-error --location \
  "https://routerbee.com/v1/videos/$TASK_ID/content" \
  --header "Authorization: Bearer $ROUTERBEE_API_KEY" \
  --output routerbee-video.mp4

生产客户端应增加总等待上限、退避和请求日志。超过本地等待上限时保留 TASK_ID,稍后继续查询。

Python 查询与下载 ​

以下示例使用 Python 标准库读取已保存的任务 ID。创建请求体应按照所选模型详情页构造:

python
import json
import os
import time
import urllib.request

base = "https://routerbee.com/v1"
task_id = os.environ["TASK_ID"]
api_key = os.environ["ROUTERBEE_API_KEY"]
headers = {"Authorization": f"Bearer {api_key}"}

for _ in range(120):
    request = urllib.request.Request(f"{base}/videos/{task_id}", headers=headers)
    with urllib.request.urlopen(request, timeout=30) as response:
        task = json.load(response)

    status = task.get("status")
    if status == "completed":
        break
    if status == "failed":
        raise RuntimeError(task.get("error", "Video generation failed"))
    if status not in ("queued", "in_progress"):
        raise RuntimeError(f"Unexpected task status: {status}")
    time.sleep(5)
else:
    raise TimeoutError(f"Task {task_id} is still running; query it later")

request = urllib.request.Request(f"{base}/videos/{task_id}/content", headers=headers)
with urllib.request.urlopen(request, timeout=120) as response:
    if not response.headers.get("Content-Type", "").startswith("video/"):
        raise RuntimeError("Content endpoint did not return a video")
    with open("routerbee-video.mp4", "wb") as output:
        while chunk := response.read(1024 * 1024):
            output.write(chunk)

不要依赖状态响应中的 video_url。下载接口仍需携带 API Key,并应流式保存大文件。创建请求超时时,先查看任务日志和使用日志,避免重复创建及重复计费。

让 AI 视频 API 接入更简单。