Theo dõi Job
https://sangtao.ai/api/v2/jobs/{jobId}Tài liệu cho Theo dõi Job.
Tất cả endpoint tạo nội dung (ảnh, video, voiceover...) trả về jobId. Poll endpoint này để theo dõi tiến độ và lấy kết quả.
Luồng xử lý
| Trạng thái | Mô tả | Hành động |
|---|---|---|
| pending | Job đang chờ trong queue | Tiếp tục poll |
| processing | Đang xử lý, có progress updates | Hiện progress bar |
| complete | Hoàn thành! Kết quả trong resultUrl / resultImages | Hiển thị kết quả |
| error | Lỗi. Thông báo trong trường error | Hiện lỗi + tùy chọn thử lại |
Các trường response
jobIdstringID duy nhất của job
statusstring"WaitingForAgent" | "processing" | "complete" | "error". So sánh không phân biệt hoa thường — endpoint này trả chữ thường trong khi vài chỗ khác trả "Complete".
progressnumber0 đến 100. Đo thực tế: giữ nguyên 0 cho tới khi job xong, nên không dùng làm thanh tiến độ được.
stepstringBước hiện tại, cho job nhiều bước như voiceover. Job ảnh luôn null.
resultUrlstringẢnh hoặc video đã xong, trước đó là null. Link sống bảy ngày — cần giữ lâu hơn thì tải về lưu phía bạn.
resultImagesstring[]Cùng kết quả đó dạng mảng.
resultDataobjectChi tiết kết quả — resultUrl, imageUrls, width, height, durationMs.
thumbnailUrlstringẢnh thu nhỏ, cho job video.
errorstringLý do hỏng, viết cho người đọc. null nếu không hỏng.
failureKindstringMã lỗi để code xử lý. Đây là trường quyết định retry có ích hay không.
elapsedSecondsnumberThời gian chạy. Đo thử một ảnh đơn giản mất khoảng 13 giây.
creditCostnumberChi phí thực tế, quyết toán khi xong. Bằng 0 nếu gói tháng đã trả. Job hỏng thì không bị tính tiền, credit hoàn tự động.
paramsobjectRequest đã lưu — tiện để đối chiếu xem thực sự đã gửi gì.
createdAtstringLúc nhận job; processingAt là lúc máy bắt đầu; completedAt là lúc xong.
retryCountnumberSố lần hệ thống tự thử lại. Không phải thứ bạn điều khiển.
Ví dụ response
Đang xử lý:
{
"success": true,
"data": {
"jobId": "abc-123",
"status": "processing",
"progress": 60,
"step": "generating_images"
}
}Hoàn thành (video):
{
"success": true,
"data": {
"jobId": "abc-123",
"status": "complete",
"resultUrl": "https://cdn.sangtao.ai/videos/result.mp4",
"thumbnailUrl": "https://cdn.sangtao.ai/videos/thumb.jpg",
"creditCost": 8
}
}Hoàn thành (ảnh):
{
"success": true,
"data": {
"jobId": "img-456",
"status": "complete",
"resultImages": [
"https://cdn.sangtao.ai/images/result1.jpg",
"https://cdn.sangtao.ai/images/result2.jpg"
],
"creditCost": 1
}
}Lỗi:
{
"success": true,
"data": {
"jobId": "abc-123",
"status": "error",
"error": "Content moderation: prompt contains unsafe content"
}
}Tần suất poll
Chờ khoảng mười giây trước lần poll đầu — không job nào xong nhanh hơn thế, nên poll ngay lập tức lúc nào cũng nhận về "chưa xong".
| Loại job | Tần suất khuyên nghị | Thời gian thường mất |
|---|---|---|
| Tạo ảnh | 5 giây | 13-90 giây |
| Tạo video | 5 giây | 30s - 3 phút |
| Video AI Voice | 3 giây | 1-5 phút |
| Video Stock | 3 giây | 1-3 phút |
| Bài báo ra Video | 5 giây | 2-5 phút |
Tên bước (Voiceover/Stock Video)
| Bước | Mô tả |
|---|---|
| generating_script | AI đang viết/chia kịch bản thành các scene |
| generating_voice | Đang tạo giọng đọc từ văn bản |
| generating_images | Đang tạo ảnh AI cho từng scene |
| searching_stock | Đang tìm video stock cho từng scene |
| rendering | Đang render video hoàn chỉnh |
Ví dụ đầy đủ
for i in $(seq 60); do
R=$(curl -sS https://sangtao.ai/api/v2/jobs/$JOB \
-H "X-Api-Key: YOUR_KEY")
S=$(echo "$R" | jq -r '.data.status' | tr 'A-Z' 'a-z')
[ "$S" = "complete" ] && {
echo "$R" | jq -r '.data.resultUrl'; break
}
[ "$S" = "error" ] && {
echo "$R" | jq -r '.data.error'; break
}
sleep 5
done