跳至主要內容
LocoPal AiLocoPal Ai
API 接入模型與生成介面影片生成介面

使用指南

查詢影片任務

查詢任務進度與結果、狀態處理、參考素材讀取失敗與計費說明

檢視 Markdown

查詢影片任務

建立任務後使用建立回應中的 id 查詢進度與結果;建立方法請見建立影片任務。

查詢狀態:GET /v1/video/generations/{task_id}

下載成品:GET /v1/videos/{task_id}/content

查詢介面會在任務完成後於 metadata.url 傳回影片位址。平台優先傳回上游的原始影片位址;只有上游沒有可用位址時,才會退回帶有 access 能力的平台成品位址。上游原始位址可能帶有簽名與到期時間,可以直接在瀏覽器或播放器中開啟;平台成品位址同樣可用。也可以攜帶 API Key 呼叫 /v1/videos/{task_id}/content 下載影片檔案。

驗證方式

Authorization: Bearer <API_KEY>。

請求參數 · path

參數類型必填說明
task_idstring是建立回應中的 id

請求範例

curl "$LOCOPAL_API_ORIGIN/v1/video/generations/$LOCOPAL_TASK_ID" \
  -H "Authorization: Bearer $LOCOPAL_API_KEY"

下載影片

任務狀態變為 completed 後,直接使用查詢回應中的 metadata.url:

curl -L "$LOCOPAL_API_ORIGIN/v1/videos/$LOCOPAL_TASK_ID/content" \
  -H "Authorization: Bearer $LOCOPAL_API_KEY" \
  -o "$LOCOPAL_TASK_ID.mp4"

回應參數

參數類型說明
idstring公開任務 ID
task_idstring與 id 相同的相容欄位
objectstring固定為 video
modelstring影片模型 ID
statusstringqueued、in_progress、completed、failed 或 unknown
progressinteger目前進度,範圍 0 至 100
created_atinteger建立時間(Unix 秒)
completed_atinteger完成時間,未完成時不傳回
metadata.urlstring影片位址,成功時傳回;優先為上游原始位址,必要時為平台成品位址
metadata.upstream_createdboolean是否已在上游建立任務
duration_secsinteger影片時長(秒),上游傳回時提供
expires_atinteger上游 URL 到期時間(Unix 秒),僅在上游明確傳回時提供
framespersecondinteger影片影格率,上游傳回時提供
generate_audioboolean是否生成同步音效,上游傳回時提供
ratiostring輸出比例,上游傳回時提供
resolutionstring輸出解析度,上游傳回時提供
seedinteger隨機種子,上游傳回時提供
output_formatstring輸出格式,例如 mp4,上游傳回時提供
execution_expires_afterinteger任務結果保留時長,上游傳回時提供
usageobject任務結算後的實際用量與費用;任務尚未結算(排隊中、生成中或剛受理建立)時不傳回
usage.prompt_tokensinteger本次計費的影片 token 數(與帳單「Tokens」欄左側數字一致)
usage.completion_tokensinteger影片/圖片任務不單獨回報輸出 token,固定為 0
usage.total_tokensinteger總用量,等於 usage.prompt_tokens
usage.quotainteger本次任務實際消耗的點數
usage.amountnumber本次任務金額(元),由 usage.quota 依平台結算換算基準換算,保留 6 位小數;主控台帳單對同一筆費用會以 4 位小數顯示
usage.currencystring金額幣別,固定為 CNY
error.codestring失敗錯誤碼,僅失敗時傳回。平台影片任務終態失敗通常為 video_generation_failed;無法正規化的上游錯誤可能保留上游錯誤碼
error.messagestring失敗原因,僅失敗時傳回。平台會先剝離多層 JSON 與閘道 HTML 包裝,傳回可直接顯示的可讀文字;用戶端不要再對這段文字執行 JSON 解析

回應內容

執行中:

{
  "id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "task_id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "object": "video",
  "model": "doubao-seedance-2.0-A",
  "status": "in_progress",
  "progress": 50,
  "created_at": 1787299277
}

生成成功:

{
  "id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "task_id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "object": "video",
  "model": "doubao-seedance-2.0-A",
  "status": "completed",
  "progress": 100,
  "created_at": 1787299277,
  "completed_at": 1787299581,
  "duration_secs": 5,
  "expires_at": 1790578352,
  "framespersecond": 24,
  "generate_audio": true,
  "ratio": "9:16",
  "resolution": "480p",
  "seed": 20260409,
  "output_format": "mp4",
  "execution_expires_after": 172800,
  "metadata": {
    "url": "https://upstream.example.com/task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO.mp4?signature=...",
    "upstream_created": true
  },
  "usage": {
    "prompt_tokens": 141034,
    "completion_tokens": 0,
    "total_tokens": 141034,
    "quota": 2789652,
    "amount": 5.579304,
    "currency": "CNY"
  }
}

usage 只在任務完成結算後傳回,數值與帳單中這筆任務的扣費完全一致:usage.quota 是本次消耗的點數,usage.amount 是同一筆點數依目前站點匯率折算的人民幣金額,usage.total_tokens 是本次計費的影片 token 數。任務仍在排隊或生成中時不會傳回 usage,此時不要依查詢回應判斷費用;需要核對扣費時,請以同一個 id 在主控台帳單中比對 usage.quota 與 usage.amount。

metadata.url 可能是帶有簽名的上游位址,也可能由平台成品介面提供備援。請視同憑證處理,不要公開分享。成品生成後,建議在 expires_at 之前下載或轉存到你自己的物件儲存空間。

影片成品與預覽

除了直接讀取 metadata.url 外,也可以查詢平台成品清單:

curl "$LOCOPAL_API_ORIGIN/v1/tasks/$LOCOPAL_TASK_ID/artifacts" \
  -H "Authorization: Bearer $LOCOPAL_API_KEY"

任務完成後會傳回:

{
  "task_id": "task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO",
  "artifacts": [
    {
      "key": "video",
      "type": "video",
      "content_url": "https://locopalai.com/v1/tasks/task_XVCPphL5ZWOr2iMpGhNkV32qRTj7MSUO/artifacts/video/content?access=..."
    }
  ]
}

成品內容位址支援 Range 請求;播放器、瀏覽器預覽與續傳下載都可以直接使用。若用戶端只讀取 metadata.url,則繼續使用原有邏輯,不需要改為成品介面。

生成失敗:

{
  "id": "task_NlersigX6rIqiOjCwTFlgNmGMTwqt39K",
  "object": "video",
  "model": "doubao-seedance-2.0-D",
  "status": "failed",
  "progress": 100,
  "created_at": 1789971935,
  "error": {
    "code": "video_generation_failed",
    "message": "音频素材缓冲失败: 音频地址必须是 http(s)"
  },
  "metadata": {
    "submission_stage": "submitting",
    "upstream_created": false
  }
}

error.message 是平台整理後的最終失敗文案。歷史任務即使最初儲存的是巢狀 JSON,查詢時也會傳回正規化後的文字;呼叫方直接向使用者顯示該欄位即可,不要在用戶端再拼接或解析原始的上游 JSON。

錯誤回應

查詢不存在的任務 ID(或不屬於目前帳號的任務)會傳回 HTTP 400:

{ "code": "task_not_exist", "message": "task_not_exist", "data": null }
HTTP回應處理
400{"code":"task_not_exist","message":"task_not_exist","data":null}核對任務 ID 與建立任務時的帳號
401Invalid tokenAPI Key 缺少、錯誤或已失效
500任務查詢失敗儲存請求 ID,稍後繼續查詢原任務

狀態處理

狀態用戶端處理
queued任務已進入佇列,請繼續查詢同一個任務 ID
in_progress正在生成,請更新進度與等待時間,不要建立新任務
completed讀取 metadata.url,或呼叫 /v1/videos/{task_id}/content 下載成品;建議盡快轉存
failed顯示一次 error.code 與 error.message,由使用者決定是否重新提交
unknown暫時無法判斷狀態,請保留任務 ID 後稍後查詢

用戶端不要以固定的等待秒數判斷是否完成,也不要因為一次網路逾時就重複建立任務;建議每 5~15 秒查詢一次。

參考素材讀取失敗

當錯誤指向 content[n].image_url、video_url,或包含 resource download failed 時,請先依陣列索引定位具體元素,再檢查:

  1. URL 是否能從公開網路直接 GET 並傳回 200;
  2. 是否會跳轉到登入頁面,或依賴 Cookie、Referer、IP 白名單;
  3. Content-Type 是否與檔案的真實格式一致;
  4. 臨時簽名 URL 在下載與處理期間是否仍然有效;
  5. asset:// 素材是否屬於目前帳戶且狀態為 Active;
  6. 目前模型是否支援該素材類型與數量。

修正素材後請重新建立任務。錯誤訊息只需向使用者顯示一次可讀的原因,不要將多層轉義 JSON 重複拼接顯示。

並行、重試與計費

  • 不同的影片任務可以並行建立;
  • 同一個建立回應必須使用同一個任務 ID 查詢;
  • 只有在任務明確失敗且使用者主動重試時,才發起新的建立請求;
  • 計費依模型、解析度、時長與參考影片輸入細分,以模型廣場與最終帳單為準;參數驗證失敗(400)表示請求未被受理,通常不會產生生成任務費用。

相關文件

想了解什麼前往哪一頁
多圖、參考影片、深度影片的能力邊界與常見問題多圖與參考影片說明
從素材入庫到影片提交的完整流程人像素材與參考影片接入流程
素材分組、素材狀態、真人授權素材庫介面
錯誤碼速查錯誤碼與排查
這一頁有幫助嗎?

本頁目錄