跳转到主要内容

路径参数

id
string
必填
从创建视频请求返回的任务 ID。将 idtask_id 视为相同的异步标识。
如果创建响应返回 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")