API 參考

影片

POST/v1/videos
GET/v1/videos/{task_id}
GET/v1/videos/{task_id}/content

非同步影片生成(Seedance、可靈、Veo、萬相、Grok Imagine 等)。/v1/videos 用同一種 OpenAI 格式的請求支援文生影片和圖生影片,回傳 task_id 供輪詢,也可以在提交時註冊 webhook。

#請求參數

  • modelstring必填

    影片模型 ID,見模型頁,例如 doubao-seedance-2.5。

  • promptstring必填

    場景描述;image2video 場景下用於控制運動。

  • imagestring選填

    僅 image2video:首影格圖片,URL 或 base64。

  • imagesarray選填

    適用於支援單一任務多張參考圖的供應商,用來傳入多張參考影格。

  • durationnumber選填

    片長(秒)——計費檔位維度之一;支援的取值見模型卡。

  • secondsnumber選填

    部分模型家族用它表示片長;建議優先使用 duration。

  • resolutionstring選填

    當模型支援時,用於指定 720p、1080p 等輸出解析度檔位。

  • sizestring選填

    適用於使用寬 x 高尺寸體系的模型家族,用於選擇畫幅或尺寸。

  • webhook_urlstring選填

    任務到達終態時回呼的 HTTPS 網址——回呼契約見影片指南。

  • webhook_secretstring選填

    設定後,回呼帶 X-Xiaoxiang-Signature: sha256=hex(HMAC-SHA256(body, secret))。

廠商參數原樣轉發

各模型家族接受額外的廠商參數(aspect_ratio、cfg_scale、negative_prompt……),閘道會原樣轉發——具體見模型卡;未知欄位由上游拒絕,而不是閘道。

失敗任務自動退款

影片任務提交時預扣費,任務以 failed 收尾則全額退回——帳本會記錄這筆退款並關聯原始扣費。

#取消進行中的任務

DELETE/v1/videos/:task_id

終止一個尚未進入終態的任務。成功後預扣額度會退回,任務被記為 failed、原因是 "cancelled by user",你註冊的 webhook 會以 task.failed 投遞。

多數供應商不支援取消

取消請求會轉發給上游供應商,而只有部分供應商開放了這個能力,其餘一律回傳 501 task_cancel_not_supported。介面上請把取消當作盡力而為:繼續輪詢,並且在這個呼叫回傳 200 之前不要向使用者承諾退款。
curl -X DELETE https://www.aisplice.store/v1/videos/task_xxx \
  -H "Authorization: Bearer sk-YOUR_KEY"
cancelled.json
{
  "id": "task_xxx",
  "task_id": "task_xxx",
  "status": "cancelled"
}

注意 "cancelled" 只出現在這一次回應裡。之後再輪詢,任務會顯示為 failed——因為它被置成了這個狀態。

  • 404 task_not_exist任務 ID 不存在,或屬於其他帳號。
  • 409 task_not_cancellable任務已經結束——沒有可終止的內容。
  • 501 task_cancel_not_supported該供應商沒有提供取消 API。

完整錯誤碼表 →

#基於已有影片重繪(remix)

POST/v1/videos/:video_id/remix

在支援的模型上,用新的提示詞重新生成一個已完成的影片。只需要傳 prompt:模型、時長、解析度和計費因子全部繼承自原任務,請求也會被鎖定到當初產出它的那個通道。

curl https://www.aisplice.store/v1/videos/task_xxx/remix \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: remix-of-task_xxx" \
  -d '{"prompt": "Same shot, at night"}'
remix.json
{
  "task_id": "task_yyy",
  "status": "queued",
  "remixed_from_video_id": "task_xxx"
}

remix 是一個全新的計費任務

它的花費與原任務相同,走同一套生命週期,並回傳自己的 task_id。請輪詢新 ID——原任務不受影響。
  • 400 invalid_requestremix 必須傳 prompt。
  • 400 task_not_exist來源影片 ID 不存在,或屬於其他帳號。
  • 400 task_channel_disable生成原影片的通道已被停用。

完整錯誤碼表 →

#相關錯誤碼

  • 404 not_found路徑不存在、模型名稱不存在,或 task_id 已過期 / 不屬於目前帳號。
  • 422 unprocessable_entity上游拒絕了閘道轉發的參數值(如不支援的尺寸或時長)。
  • 401Bearer 權杖無效或缺失。這條路徑不帶 error.code,請依狀態碼判斷。
  • 402 insufficient_user_quota錢包餘額不足以覆蓋預扣估算。
  • 429金鑰級限流。回應主體為空,按 Retry-After 等待。若 429 帶有 insufficient_user_quota,那是每日消費上限,不是限流。
  • 503 model_not_found模型名稱不存在,或目前沒有健康的通道可以提供服務。

完整錯誤碼表 →

#請求範例

# submit
curl https://www.aisplice.store/v1/videos \
  -H "Authorization: Bearer sk-YOUR_KEY" \
  -H "Content-Type: application/json" \
  -d '{"model": "doubao-seedance-2.5", "prompt": "A drone shot of a lighthouse at dawn"}'

# poll every 5s
curl https://www.aisplice.store/v1/videos/$TASK_ID -H "Authorization: Bearer sk-YOUR_KEY"

# download when completed
curl -L https://www.aisplice.store/v1/videos/$TASK_ID/content -o out.mp4 -H "Authorization: Bearer sk-YOUR_KEY"

#回應

response.json
// POST — submit accepted
{"task_id": "task_xxx", "status": "queued"}

// GET /v1/videos/{task_id}
{
  "task_id": "task_xxx",
  "status": "in_progress",      // queued | in_progress | completed | failed
  "progress": "45%"
}

// terminal state
{
  "task_id": "task_xxx",
  "status": "completed",
  "metadata": {"url": "https://…"}
}

還是沒解決?

把請求 ID 或錯誤訊息傳給我們,我們來查。