ตรวจสอบสถานะงาน — GET /status

Personal API key และ session อ่านสถานะได้เฉพาะงานของเจ้าของบัญชี งานของผู้ใช้อื่นตอบ 404

ตรวจสอบความคืบหน้าของงานถอดเสียงด้วย job_id — เมื่องานเสร็จสิ้น (state = READY) response จะมีลิงก์ดาวน์โหลดไฟล์ซับไตเติลให้ทันที

GET https://api.lomasub.ai/status?job_id=<job_id>

Headers

Header ค่า จำเป็น
Authorization Bearer <API_KEY> ต้องระบุ

Query Parameters

พารามิเตอร์ ชนิด จำเป็น คำอธิบาย
job_id string (UUID) ต้องระบุ รหัสงานที่ได้จาก POST /new-transcribe

ตัวอย่าง Request

curl "https://api.lomasub.ai/status?job_id=0b8a4f3e-6c1d-4a9b-9f2e-7d5c3b1a8e64" \
  -H "Authorization: Bearer $LOMA_API_SECRET_KEY"

Response — 200 OK

ฟิลด์ที่มีเสมอ

ฟิลด์ ชนิด คำอธิบาย
job_id string (UUID) รหัสงาน
state string สถานะปัจจุบันของงาน (ดูตารางสถานะด้านล่าง)
source_url string (URL) URL ไฟล์เสียงต้นทางของงานนี้
audio_duration_seconds float | null ความยาวไฟล์เสียงที่ worker ถอดรหัสได้ (วินาที) — มีค่าหลังตรวจความยาวและจองโควตาใน SPLITTING สำเร็จ หรือเมื่อ worker ส่งค่าตอน /finish; ก่อนหน้านั้นเป็น null
started_at string (timestamp) เวลาที่ worker รับงาน (เท่ากับ s2_splitting_ts) หรือเวลาเข้าคิวหากยังไม่มีใครรับ ทุก timestamp ใน API เป็น UTC รูปแบบ RFC 3339 ลงท้ายด้วย Z
config object config snapshot ที่ worker ใช้จริง (ค่าเริ่มต้นของเซิร์ฟเวอร์รวมกับค่าที่ส่งมา) รวมถึง language
s1_queued_ts … s9_ready_ts string | null เวลาเข้าสู่แต่ละขั้นตอน 11 ค่า: s1_queued_ts, s2_splitting_ts, s3_transcribing_ts, s3a_pro_correcting_ts, s4_aligning_ts, s4a_llm_splitting_ts, s4b_forcedalign_2nd_ts, s5_preparing_srt_ts, s6_diarizing_ts, s7_building_srt_ts, s9_ready_ts — ขั้นตอนที่ยังไม่ถึงหรือไม่ได้ทำงานจะเป็น null ผลต่างของค่าที่ติดกันคือเวลาที่ใช้ในแต่ละขั้น

สถานะของงาน (state)

งานจะไล่สถานะตามลำดับต่อไปนี้ (บางขั้นตอนมีเฉพาะเมื่อเปิดตัวเลือกที่เกี่ยวข้อง)

สถานะ คำอธิบาย
QUEUED เข้าคิว รอ worker รับงาน
SPLITTING ดาวน์โหลด ถอดรหัสเป็น 16 kHz โมโน สแกน Silero VAD และแบ่งช่วงเสียง
TRANSCRIBING Whisper ถอดเสียงทุกช่วง แล้วผ่านตัวกรองข้อความหลอนภาษาไทย
PRO_CORRECTING ตรวจแก้คำด้วย Pro หลัง TRANSCRIBING ก่อน ALIGNING (เฉพาะ promodel="pro")
ALIGNING ForceAligner จัดตำแหน่งเวลาของแต่ละคำ (ข้ามเมื่อ forcealigner_level="none")
LLM_SPLITTING กำลังตัดประโยคด้วยโมเดลภาษา (เฉพาะเมื่อ forcealigner_level="llmsplitting")
FORCEDALIGN_2ND กำลังจัดตำแหน่งเวลารอบที่สอง (เฉพาะเมื่อ forcealigner_level="llmsplitting")
PREPARING_SRT ตัดบรรทัดด้วยตัวตัดแบบ pause-DP ให้ได้ขนาดตาม srt_cue_words ไม่เกิน srt_max_chars แล้วรวมบรรทัดสั้น
DIARIZING กำลังระบุผู้พูด (เฉพาะเมื่อ speaker_diarization=true)
BUILDING_SRT รวมบรรทัดสั้นรอบสุดท้าย กรองข้อความหลอน จัดเวลาแสดงผล (end-fill, ตัดขอบเงียบ, จำกัดการยืด, แยกที่ช่วงเงียบยาว) ใส่ timestamp คาราโอเกะ สร้าง sidecar และอัปโหลดผลลัพธ์พร้อมกัน
READY เสร็จสิ้น — ดาวน์โหลดผลลัพธ์ได้
FAILED งานล้มเหลว — ดูรายละเอียดใน failed_stage และ error

การ poll: เรียกซ้ำทุก 1–3 วินาทีจนกว่า state จะเป็น READY หรือ FAILED ซึ่งเป็นสถานะสิ้นสุดทั้งคู่

ฟิลด์เพิ่มเติมเมื่อ state = READY

ฟิลด์ ชนิด คำอธิบาย
srt_url string (URL) ลิงก์ดาวน์โหลด result.srt — SubRip ธรรมดา มีป้ายชื่อผู้พูดนำหน้าเมื่อเปิด diarization (มีเสมอ)
vtt_url string (URL) ลิงก์ดาวน์โหลด result.vtt — WebVTT บรรทัดเดียวกับ SRT ไม่มีข้อมูลซ่อนใด ๆ (มีเมื่อไฟล์นี้ถูกสร้าง)
compact_url string (URL) ลิงก์ดาวน์โหลด result.compact.txt (ข้อความล้วน; มีเมื่อไฟล์นี้ถูกสร้าง)
karaoke_vtt_url string (URL) ลิงก์ดาวน์โหลด result.karaoke.vtt — WebVTT ที่มี timestamp ระดับคำ <hh:mm:ss.ttt> แทรกหน้าคำถัดไปในแต่ละ cue สำหรับเรนเดอร์แบบคาราโอเกะ (มีเมื่อ forcealigner_level ไม่ใช่ none)
words_url string (URL) ลิงก์ดาวน์โหลด result.words.json — ข้อมูลระดับคำสำหรับวิเคราะห์/ฝึกโมเดล: token ทุกตัวพร้อมเวลาเริ่ม-จบจาก ForceAligner, ขอบเขต chunk, บรรทัดดิบจาก LLM (เมื่อใช้ llmsplitting), cue สุดท้ายกับช่วง token, ผู้พูด, และค่า VAD ทั้งไฟล์ (มีเมื่อ forcealigner_level ไม่ใช่ none; รูปแบบดูที่ result.words.json)
debug_vtt_url string (URL) ลิงก์ดาวน์โหลด result.debug.vtt — WebVTT สำหรับดีบัก: cue เดียวกับ SRT พร้อม timestamp ระดับคำ (เมื่อ forcealigner_level ไม่ใช่ none) ตามด้วยบล็อก NOTE loma-fastsrt-vad (ค่า VAD รายเฟรมของ cue) และ NOTE loma-fastsrt-embedding (speaker embedding เมื่อเปิด diarization) ไม่ใช่ซับสำหรับผู้ชม (สร้างให้ทุกงาน ขั้นตอนนี้ไม่ทำให้งานล้มเหลว มีเมื่ออัปโหลดสำเร็จ; รูปแบบดูที่ result.debug.vtt)

ลิงก์ดาวน์โหลดเป็น presigned URL ที่มีอายุ 86 400 วินาที (24 ชั่วโมง) — หากลิงก์หมดอายุ ให้เรียก GET /status อีกครั้งเพื่อรับลิงก์ใหม่

ฟิลด์ *_url แต่ละตัวจะมีก็ต่อเมื่อไฟล์นั้นถูกสร้างจริง (srt_url มีเสมอ) — response ไม่มี object key ใด ๆ ใช้ลิงก์เท่านั้น

ฟิลด์เพิ่มเติมเมื่อ state = FAILED

ฟิลด์ ชนิด คำอธิบาย
failed_stage string | null ขั้นตอนที่ worker อยู่ตอนยอมแพ้ เช่น ALIGNING
error string | null ข้อความข้อผิดพลาดจาก worker ตัดที่ 4000 ตัวอักษร

ตัวอย่าง Response — งานกำลังประมวลผล

{
  "job_id": "0b8a4f3e-6c1d-4a9b-9f2e-7d5c3b1a8e64",
  "state": "TRANSCRIBING",
  "source_url": "https://lomafastsrt.sgp1.cdn.digitaloceanspaces.com/cancer.mp3",
  "audio_duration_seconds": null,
  "started_at": "2026-07-10T09:15:24.102Z",
  "config": { "language": "th", "srt_max_chars": 40, "srt_cue_words": 6, "speaker_diarization": false },
  "s1_queued_ts": "2026-07-10T09:15:22.481Z",
  "s2_splitting_ts": "2026-07-10T09:15:24.102Z",
  "s3_transcribing_ts": "2026-07-10T09:15:41.877Z",
  "s3a_pro_correcting_ts": null,
  "s4_aligning_ts": null,
  "s4a_llm_splitting_ts": null,
  "s4b_forcedalign_2nd_ts": null,
  "s5_preparing_srt_ts": null,
  "s6_diarizing_ts": null,
  "s7_building_srt_ts": null,
  "s9_ready_ts": null
}

ตัวอย่าง Response — งานเสร็จสิ้น

{
  "job_id": "0b8a4f3e-6c1d-4a9b-9f2e-7d5c3b1a8e64",
  "state": "READY",
  "source_url": "https://lomafastsrt.sgp1.cdn.digitaloceanspaces.com/cancer.mp3",
  "audio_duration_seconds": 213.4,
  "started_at": "2026-07-10T09:15:24.102Z",
  "config": {
    "forcealigner_level": "default",
    "speaker_diarization": false,
    "min_vad_duration_seconds": 10.0,
    "max_vad_duration_seconds": 25.0,
    "vad_threshold": 0.3,
    "min_srt_duration_ms": 1200,
    "srt_max_chars": 48,
    "srt_cue_words": 6,
    "language": "th"
  },
  "srt_url": "https://...presigned.../result.srt?X-Amz-Expires=...",
  "vtt_url": "https://...presigned.../result.vtt?X-Amz-Expires=...",
  "compact_url": "https://...presigned.../result.compact.txt?X-Amz-Expires=...",
  "karaoke_vtt_url": "https://...presigned.../result.karaoke.vtt?X-Amz-Expires=...",
  "words_url": "https://...presigned.../result.words.json?X-Amz-Expires=...",
  "debug_vtt_url": "https://...presigned.../result.debug.vtt?X-Amz-Expires=...",
  "s9_ready_ts": "2026-07-10T09:18:03.554Z"
}

ตัวอย่าง Response — งานล้มเหลว

{
  "job_id": "0b8a4f3e-6c1d-4a9b-9f2e-7d5c3b1a8e64",
  "state": "FAILED",
  "failed_stage": "ALIGNING",
  "error": "forcealigner request failed"
}

ข้อผิดพลาดที่อาจพบ

สถานะ สาเหตุ ตัวอย่างข้อความ
401 Unauthorized ไม่มีหรือ API key ไม่ถูกต้อง —
404 Not Found ไม่พบ job_id ที่ระบุ, รูปแบบ id ไม่ถูกต้อง หรืองานถูกลบแล้ว (บัญชีฟรีที่ไม่เคยชำระเงินเก็บผลงาน 24 ชั่วโมงหลังสร้างงาน) "job not found"

results matching ""

    No results matching ""