ประวัติงาน — GET /jobs
รายการงานถอดเสียงทั้งหมด เรียงจากงานที่ส่งล่าสุดก่อน หน้าละ 30 รายการ — เมื่อเรียกด้วย API key จะเห็นงานของผู้ใช้ทุกคนรวมถึงงานที่สร้างด้วย key เอง (session จาก editor เห็นเฉพาะงานของตัวเอง) งานที่เสร็จแล้วคือรายการประวัติซับไตเติลของ editor
GET https://api.lomasub.ai/jobs?filter=<filter>&page=<n>
| Header |
ค่า |
จำเป็น |
Authorization |
Bearer <API_KEY> |
ต้องระบุ |
Query Parameters
| พารามิเตอร์ |
ชนิด |
ค่าเริ่มต้น |
คำอธิบาย |
filter |
all | finished | running | failed |
all |
เลือกสถานะที่จะแสดง — finished = READY, running = QUEUED และทุกขั้นตอนของ worker (ทุกสถานะที่ยังไม่สิ้นสุด), failed = FAILED ค่าอื่นตอบ 422 |
page |
int ≥ 1 |
1 |
เลขหน้าเริ่มที่ 1 หน้าที่เลยท้ายรายการจะได้ jobs ว่างพร้อม total ที่ถูกต้อง ค่าน้อยกว่า 1 ตอบ 422 |
ตัวอย่าง Request
curl "https://api.lomasub.ai/jobs?filter=finished&page=1" \
-H "Authorization: Bearer $LOMA_API_SECRET_KEY"
Response — 200 OK
| ฟิลด์ |
ชนิด |
คำอธิบาย |
jobs |
array |
รายการงานไม่เกิน page_size รายการ เรียงตามเวลาส่งงานจากใหม่ไปเก่า ลำดับคงที่ข้ามหน้า |
page |
int |
หน้าที่ส่งกลับ |
page_size |
int |
จำนวนรายการต่อหน้า เป็น 30 เสมอ |
total |
int |
จำนวนงานทั้งหมดที่ตรงกับ filter (เท่ากันทุกหน้า) |
has_more |
bool |
page × page_size < total |
ฟิลด์ของแต่ละรายการ (jobs[])
| ฟิลด์ |
ชนิด |
คำอธิบาย |
id |
string (UUID) |
รหัสงาน ค่าเดียวกับที่ใช้ใน GET /status |
user_id |
int | null |
เจ้าของงานเมื่อสร้างจาก session ของ editor — เป็น null สำหรับงานที่สร้างด้วย API key |
name |
string |
filename ที่ส่งมาตอน POST /new-transcribe — เป็น "untitled" เมื่อไม่ได้ส่ง |
state |
string |
สถานะดิบของงาน: QUEUED, ขั้นตอนของ worker, READY หรือ FAILED |
queued_at |
string (timestamp) |
เวลาส่งงาน มีเสมอ |
finished_at |
string | null |
เวลาที่งานเป็น READY — null สำหรับสถานะอื่น |
edited_at |
string | null |
เวลาบันทึกล่าสุดผ่าน PUT /jobs/{job_id} — null จนกว่าจะบันทึกครั้งแรก |
duration_seconds |
number | null |
ความยาวสื่อสำหรับแสดงผล: ค่า duration_seconds ที่ส่งมาตอนสร้างงาน ถ้าไม่มีใช้ค่าที่ worker วัดได้ ถ้าไม่มีทั้งคู่เป็น null — มีเพียงค่าที่ส่งมาเท่านั้นที่ใช้ใน GET /jobs/match |
cue_count |
int | null |
จำนวนบรรทัดในผลลัพธ์ — เป็นตัวเลขเมื่อ READY นอกนั้น null |
has_karaoke |
bool |
งานนี้มี karaoke VTT (timestamp ระดับคำ) หรือไม่ — false จนกว่าจะ READY |
edited |
bool |
เคยบันทึก SRT ที่แก้ไขแล้วสำหรับงานนี้หรือไม่ |
failed_stage · error |
string | null |
มีเฉพาะรายการที่ FAILED ความหมายเดียวกับใน GET /status |
ตัวอย่าง Response
{
"jobs": [
{"id": "7f3c2b1e-9a4d-4c8e-b2f1-5d6e7a8b9c0d", "user_id": 42, "name": "interview.mp4", "state": "READY",
"queued_at": "2026-09-08T09:12:44.318412Z", "finished_at": "2026-09-08T09:14:23.088441Z",
"edited_at": null, "duration_seconds": 1483.2, "cue_count": 412, "has_karaoke": true, "edited": false},
{"id": "c41d0a77-2e6b-4f1a-9d3c-8b7e6f5a4d3c", "user_id": null, "name": "meeting.m4a", "state": "TRANSCRIBING",
"queued_at": "2026-09-08T09:10:02.900114Z", "finished_at": null,
"edited_at": null, "duration_seconds": 3602.5, "cue_count": null, "has_karaoke": false, "edited": false},
{"id": "0b9e8d7c-6a5f-4e3d-b2c1-a0f9e8d7c6b5", "user_id": null, "name": "clip.mp3", "state": "FAILED",
"queued_at": "2026-09-08T08:55:31.220870Z", "finished_at": null,
"edited_at": null, "duration_seconds": null, "cue_count": null, "has_karaoke": false, "edited": false,
"failed_stage": "SPLITTING", "error": "source download failed: HTTP 403"}
],
"page": 1, "page_size": 30, "total": 47, "has_more": true
}
ข้อผิดพลาดที่อาจพบ
| สถานะ |
สาเหตุ |
401 Unauthorized |
ไม่มีหรือ API key ไม่ถูกต้อง |
422 Unprocessable Entity |
filter ไม่ใช่ค่าที่กำหนด หรือ page น้อยกว่า 1 |
GET /jobs/match
ค้นหางานที่เสร็จแล้วของไฟล์สื่อที่เคยถอดเสียงไปแล้ว เพื่อให้ client นำผลเดิมมาใช้แทนการสร้างงานใหม่
GET https://api.lomasub.ai/jobs/match?name=<filename>&duration_seconds=<seconds>
| พารามิเตอร์ |
ชนิด |
จำเป็น |
คำอธิบาย |
name |
string (1–255) |
ต้องระบุ |
filename ตรงตัวตามที่ส่งตอนสร้างงาน |
duration_seconds |
number ≥ 0 |
ต้องระบุ |
ความยาวสื่อ — งานจะตรงกันเมื่อ duration_seconds ที่ส่งตอน /new-transcribe ต่างกันไม่เกิน 0.5 วินาที งานที่สร้างโดยไม่ส่งค่านี้จะไม่ถูกจับคู่เลย แม้ worker จะวัดความยาวได้เท่ากัน |
ตอบ 200 OK เสมอ เป็น {"job": <รายการ> | null} — งาน READY ที่แก้ไขล่าสุดซึ่งชื่อและความยาวตรงกัน ในรูปแบบเดียวกับรายการใน jobs[] ด้านบน หรือ null เมื่อไม่พบ
curl "https://api.lomasub.ai/jobs/match?name=interview.mp4&duration_seconds=1483.2" \
-H "Authorization: Bearer $LOMA_API_SECRET_KEY"