跳轉到主要內容

路徑參數

id
string
必填
從建立影片請求回傳的任務 ID。將 idtask_id 視為相同的非同步識別碼。
如果 create 回應回傳 poll_url,請呼叫該 URL。本當它指向 /v1/tasks/{id} 時,視為固定的標準狀態端點。如果該任務不再存在或無法透過公開的非同步任務協定解析,LemonData 會回傳 async_task_not_found 並附上訊息 Task not found or no longer available.

回應

id
string
正規的非同步任務識別符。
task_id
string
非同步任務識別符的別名。
poll_url
string
當建立回應提供時,建議用來輪詢的 URL。
status
string
任務狀態:pendingprocessingcompletedfailed
progress
number
進度百分比(0-100)。
video_url
string
產生影片的 URL(完成時)。
video
object
單一影片資料,當可用時包含 urldurationwidthheight
videos
array
當上游回傳多個輸出時的多重影片資料。
error
string
錯誤訊息(若失敗)。
created
integer
建立時間戳記。
updated
integer
最後更新時間戳記。
model
string
任務使用的模型。
curl "https://api.lemondata.cc/v1/tasks/ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa" \
  -H "Authorization: Bearer sk-your-api-key"
{
  "id": "ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "task_id": "ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "poll_url": "/v1/tasks/ldtask_aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa",
  "status": "pending",
  "progress": 0,
  "model": "sora-2",
  "created": 1706000000,
  "updated": 1706000000
}

輪詢最佳做法

  • 每 5 到 10 秒輪詢一次
  • 對於較長的任務實作指數退避
  • 設定最大逾時(例如:10 分鐘)
  • 優雅地處理 failed 狀態
import time

def wait_for_video(task_id, max_wait=600, interval=5):
    """Wait for video with timeout."""
    start = time.time()

    while time.time() - start < max_wait:
        response = requests.get(
            f"https://api.lemondata.cc/v1/tasks/{task_id}",
            headers={"Authorization": "Bearer sk-your-api-key"}
        )
        data = response.json()

        if data["status"] == "completed":
            return data["video_url"]
        elif data["status"] == "failed":
            raise Exception(data.get("error", "Video generation failed"))

        time.sleep(interval)

    raise TimeoutError("Video generation timed out")