Error Codes
รหัสข้อผิดพลาดจาก Client API, Seller API และ File delivery — อ่านแล้วรู้ว่าแก้ตรงไหน
ระบบรหัสทำงานยังไง
Client API (/api/1.3/, /api/1.4/) ไม่ส่งข้อความ error ดิบออกไปตรง ๆ — ใช้ veil แปลงเป็นรหัสสั้น ๆ ใน field message ของ JSON response
| รูปแบบ | ตัวอย่าง | ความหมาย |
| Static | E01 … E18 | ข้อความมาตรฐานที่ map ไว้ในเซิร์ฟเวอร์ — อ่านตารางด้านล่างได้เลย |
| Dynamic | E1AA3B2 | E + 6 ตัว hex จาก CRC32b ของข้อความจริง — ไม่มีใน static table |
| Empty | E00 | ข้อความ error ว่าง |
| Custom | ข้อความเต็ม | ถ้า dev ตั้ง Custom Messages ใน Panel แล้วข้อความตรงกับที่ตั้ง — ส่งออกแบบไม่ veil |
| Special | invalidver | เวอร์ชัน client ไม่ตรง — response มี download เพิ่ม |
WARN
รหัส dynamic ไม่ได้อยู่ใน static list — ดูตาราง
Quick Lookup หรือตรวจ Event Logs ใน Panel (ถ้ามีสิทธิ์)
TIP
ถอดรหัส dynamic: E + 6 ตัวแรกของ hash('crc32b', message) — เช่น Invalid license key → E48E0A5. อย่าสับสนกับ E05 (Hash mismatch).
Quick Lookup — รหัสที่เจอบ่อย
| Code | สาเหตุสั้น ๆ | แก้ |
E1A7FF8 | ไฟล์ Authenticated แต่ยังไม่ license/login | File flow · license ก่อน file · หรือเปลี่ยนเป็น Public |
E1AA3B2 | API v1.4 — seq ผิด | ใช้ SDK ล่าสุด · ดู Sequence |
E77AC17 | fileid ผิดหรือไฟล์ถูกลบ | Panel → Files → Copy File ID |
E547D79 | ไม่ส่ง sessionid | เรียก init ก่อน · ส่ง session ทุก request |
EF622D2 | session หมดอายุ | init ใหม่ |
E04 | เปิด hash check แต่ client ไม่ส่ง MD5 | Hash guide |
E05 | MD5 exe ไม่อยู่ใน whitelist | Panel → Access Controls → Add Hash · ดู rh/received_hash |
E48E0A5 | Invalid license key — คีย์ผิด / หมดอายุ / ใช้แล้ว / คนแอป | Panel → Licenses · สร้างคีย์ใหม่ · ไม่ใช่ปัญหา Hash |
E18 | Client ไม่มี wire token | LibreAuth SDK + /api/1.4/ หรือ /api/1.3/ |
| var → Session not authenticated | เรียก type=var ก่อน license/login | Variables gate · Init → License → var |
| var → No active subscription | sub หมดแต่ session ยังค้าง | ต่ออายุคีย์ · heartbeat จะ kill sub_expired |
File Download — Public vs Authenticated
Endpoint type=file ต้องมี sessionid จาก init เสมอ — ต่างกันที่ไฟล์ Authenticated ต้อง login/license ก่อน
| โหมดไฟล์ (Panel) | Flow (API v1.4) | หมายเหตุ |
| Public |
init → file |
ไม่ต้อง license · installer/mod loader ใช้แบบนี้ได้ |
| Authenticated |
init → license → file |
license ต้อง success: true ก่อน download |
TIP
Response สำเร็จมี
contents (hex) — แปลงเป็น bytes ก่อนเขียนไฟล์ · ดู
file endpoint
Static Codes — E01 ถึง E18
| Code | สาเหตุ | วิธีแก้ |
E00 | ข้อความ error ว่าง | ตรวจ request body / server log |
E01 | ขาดพารามิเตอร์บังคับ เช่น type, ownerid, name | ส่งครบตาม endpoint docs · ใช้ SDK ล่าสุด |
E02 | ownerid ไม่ใช่ 10 ตัวอักษร | คัดลอก Owner ID จาก Panel → App Settings |
E03 | type ไม่รู้จัก | สะกดให้ตรง: init, login, license, file ฯลฯ |
E04 | แอปเปิด Hash Check แต่ client ไม่ส่ง MD5 | ส่ง hash หรือ h ทุก request · Hash troubleshooting |
E05 | MD5 ของ exe ไม่อยู่ใน whitelist | ดู received_hash (rh บน 1.4), whitelist_count (wc) · Panel → Settings → Recent rejected MD5 · Add Hash |
E06 | Anti-Tamper เปิด แต่ไม่ส่ง integrity token | อัปเดต SDK · ส่ง token ตาม Anti-Tamper |
E07 | Anti-Tamper ต้องการ hash คู่กับ token | ส่งทั้ง token และ file hash ใน request เดียวกัน |
E08 | hash ใน token ไม่ตรงกับ hash ที่ส่งมา | ใช้ hash จากไฟล์เดียวกันที่ build จริง |
E09 | Token หมดอายุ / ถูกแก้ / สร้างผิด session | เรียก init ใหม่ · อย่า reuse token ข้าม session |
E10 | IP เปลี่ยนระหว่าง session (VPN, mobile network) | เรียก init จาก network เดิม · ปิด VPN ชั่วคราว |
E11 | ไม่ส่ง nonce หรือ nonce ซ้ำ / ผิดลำดับ | SDK ต้องส่ง nonce ใหม่ทุก request หลัง init |
E12 | ส่ง request ซ้ำภายใน replay window | รอแล้วส่งใหม่ · อย่า retry พร้อม payload เดิมทันที |
E13 | HWID ใน session ไม่ตรงกับที่ bind ไว้ | logout + init ใหม่ · หรือขอ reset HWID จาก provider |
E14 | แอปบังคับ signed response แต่เซิร์ฟเวอร์ยังไม่มี Ed25519 key | ติดต่อ host ให้ตั้งค่า signing key |
E15 | DB down หรือ maintenance | ลองใหม่ · ตรวจสถานะเซิร์ฟเวอร์ |
E16 | แอปถูกปิดใน Panel | เปิดแอปใน Panel → App Settings |
E17 | แอปอยู่ในสถานะ Paused | Panel → Resume app |
E18 | Client ยิง API โดยไม่มี wire token (la_w) | ใช้ LibreAuth SDK บน /api/1.4/ (Enterprise) หรือ /api/1.3/ — legacy loaders ไม่รองรับ |
Dynamic Codes (เช่น E1AA3B2)
ถ้า error ไม่ตรงกับ static table (E01–E18) จะได้รหัส dynamic แบบ E + 6 ตัว hex — รหัสนี้ไม่เปิดเผยข้อความภายในเซิร์ฟเวอร์ ใช้ตารางด้านล่างและ Quick Lookup ด้านบนเพื่อแก้ปัญหา
| อาการ | เมื่อไหร่ | แก้ยังไง |
| ไม่พบไฟล์ | type=file แต่ fileid ผิดหรือถูกลบ | ตรวจ File ID ใน Panel · ส่ง fileid ตัวเลขที่ถูก |
| ยังไม่ authenticated | ไฟล์ตั้ง Authenticated แต่ client ยังไม่ login/license | init → license → file · หรือเปลี่ยนไฟล์เป็น Public ใน Panel |
| แหล่งไฟล์ HTTP 403 | URL ต้นทางบล็อก hotlink / ต้อง auth | ใช้ direct link · อัปโหลด hosted file แทน URL ภายนอก |
| แหล่งไฟล์ HTTP 404 | ลิงก์หมดอายุหรือ path ผิด | Panel → Files → Test URL · แก้ URL หรือ re-upload |
| ไฟล์ใหญ่เกิน limit / HTTP 413 | เกินเพดานแพ็กเกจ (Free 50 · Developer 100 · Pro 256 · Enterprise 512) หรือถูกตัดโดย PHP/nginx/Cloudflare ก่อนถึงแอป | ดู Upload max ใน Files (plan · PHP) · ตั้ง upload_max_filesize/post_max_size · client_max_body_size · หรือใช้ External URL |
| Storage quota exceeded | พื้นที่ hosted รวมเกินแพ็กเกจ (Free 200 MB · Dev 1 GB · Pro 5 GB · Enterprise 10 GB) | ลบไฟล์ hosted หรืออัปเกรด · ใช้ External URL |
| Too many file downloads | rate/bandwidth gate บน type=file | รอ ~1 นาที · ตรวจว่า client ไม่วนดาวน์โหลด |
คีย์ไม่ถูก / หมดอายุ · รหัส E48E0A5 | type=license ได้ข้อความ Invalid license key (veil dynamic) | Panel → Licenses · สร้าง/รีเซ็ตคีย์ · ตรวจว่าคีย์เป็นของแอปนี้ · ถ้า Discord โชว์ Hash ตรง แปลว่า init ผ่านแล้ว — ไม่ใช่ E05 |
| คีย์ถูกใช้แล้ว | one-time key · ข้อความอาจ veil เป็น dynamic อื่น | สร้างคีย์ใหม่ |
| HWID ไม่ตรง | เครื่องไม่ตรงที่ bind | reset HWID หรือใช้เครื่องเดิม |
| session หมดอายุ | TTL หมด | เรียก init ใหม่ |
| ไม่มี session | ไม่ส่ง sessionid | เก็บ session จาก init แล้วส่งทุก call |
| sequence ผิด | API v1.4 — seq ไม่ตรง | ใช้ SDK ล่าสุด · ดู Sequence |
| Captcha ไม่ผ่าน | Captcha เปิดในแอป | ส่ง captcha token ที่ verify แล้ว |
Protocol v2 — plain errors (ไม่ veil)
Endpoint /api/v2/ ส่งข้อความ error ตรง ๆ ใน error — ไม่ใช้รหัส E0x
| error | HTTP | สาเหตุ | แก้ |
Invalid session | 401 | session ไม่มีใน DB · หมดอายุ · หรือ idle_ttl 90s (ค้างหน้า Login หลัง Init) | SDK ล่าสุด re-Init + retry ใน Login/License · หรือเรียก init ใหม่ก่อนกด Login · API v2 → Idle TTL |
Missing session | 401 | ไม่ส่ง session | init ก่อน · ใช้ SDK อย่างเดียว |
Invalid mac | 401 | HMAC ผิด / body ถูกแก้ / secret เก่า | ใช้ session_secret จาก init ล่าสุด · อย่า replay body |
Invalid sequence | 401 | seq ไม่ตรง | ForceAdopt หลัง login/license · SDK ล่าสุด |
Duplicate nonce | 401 | nonce ซ้ำ | nonce ใหม่ทุก request |
Invalid timestamp | 401 | นาฬิกาคลาด > 120s | sync เวลาเครื่อง |
Session IP mismatch | 401 | strict_ip + IP เปลี่ยน | init จาก network เดิม |
HWID session mismatch | 401 | hwid ไม่ตรง bound | ส่ง hwid เดิมทุก call |
Enterprise plan required | 403 | แอปไม่อยู่ Enterprise / ไม่มี api_v2 | Panel → Billing |
Feature not entitled | 403 | type=feature แต่แพ็กของคีย์ไม่มีชื่อนั้น (และไม่ใช่ all) | Panel → Subscriptions · ใส่ feature / ติ๊ก All · Subscriptions & Features |
Session not authenticated / License or login required | 401 | type=var ก่อน license · หรือไม่มี credential | Variables gate |
No active subscription / Subscription expired | 403 | sub หมด · heartbeat sub_expired | ต่ออายุคีย์ |
Session not bound | 401 | var โดยไม่มี bound_hwid | Init พร้อม hwid |
Variable access disabled | 403 | ปิด function var | เปิด entitlement ในแอป |
Variable not found | 404 | varid ผิด | Panel → Variables |
HTTP 404 Ghost (Init, unsigned HTML) | 404 | ApiV2::Ghost() — name/ownerid ไม่เจอแอป (ไม่ใช่ WAF เป็นหลัก) | คัดลอก secret name + ownerid จาก Manage Apps · API v2 → Ghost |
HTTP 404 unsigned (Ghost/WAF) (หลัง MAC) | 404 | proxy/WAF กลืน response หรือ path ผิด — SDK roll seq | ตรวจ /api/v2/ · Cloudflare · ใช้ SDK ล่าสุด |
TIP
WPF / license form: ข้อความแดง Invalid session บนหน้าใส่ License = idle wipe เป็นส่วนใหญ่ — ไม่ใช่คีย์ผิด
TIP
Dev ที่มี access server log: ค้นหา error ใน Event Logs ของ Panel
Variables — License gate
Global variables (type=var) และ user vars (getvar/setvar) ไม่มีโหมด Public — ต้อง license/login + sub สด + bound HWID + request HWID ตรงกับ bound (ขโมย sessionid อย่างเดียวใช้ไม่ได้) + ไม่ติด blacklist / key ban. API v2 ต้องมี heartbeat check ก่อนอ่าน var
| error / message | HTTP (v2) | สาเหตุ | แก้ |
Session not authenticated | 401 | Init-only · ไม่มี credential · ไม่มี user | init → license/login แล้วค่อย var |
Session not bound | 401 | ไม่มี bound_hwid หรือ request ไม่ส่ง hwid | ส่ง hwid ตอน Init/license และทุก var/getvar/setvar |
HWID session mismatch | 401 | hwid ใน request ≠ bound บน session (ขโมย session จากเครื่องอื่น) | ใช้ HWID เครื่องเดิม · อย่า replay sessionid คนเดียว |
No active subscription / Subscription expired | 403 | sub หมด / pause · heartbeat kill sub_expired | ต่ออายุคีย์ · Panel → Users / Licenses |
Banned / Blacklisted | 403 | user ถูกแบน · HWID/IP blacklist · license key banned | Panel → Users / Blacklist / Licenses |
Heartbeat required | 401 | เรียก var ก่อน check pulse (v2) | license → check → var |
Variable access disabled | 403 | ปิด entitlement var ในแอป | Panel → Access / function toggles |
Invalid variable name | 400 | ว่างหรือยาว > 64 | ใช้ varid สั้น ๆ จาก Panel |
Variable not found | 404 | ไม่มีแถว / typo | Panel → Variables · Copy name/varid |
รายละเอียด API v2: API v2 → Variables · Seller setvar บังคับ authed=1 เสมอ
File Download Errors
Endpoint type=file อาจได้ dynamic code จากข้อความเหล่านี้:
| ข้อความ | สาเหตุ | แก้ |
Feature not entitled | แพ็กคีย์ไม่มี files (และไม่ใช่ All functions) | Panel → Subscriptions · ใส่ files หรือติ๊ก All |
File not Found | ไม่มี record หรือ fileid ผิด | ใช้ File ID จาก Panel (ปุ่ม Copy ID) |
| ยังไม่ authenticated | ไฟล์ตั้งค่า Authenticated | login/license ก่อน download · หรือเปลี่ยนเป็น Public |
File is disabled | ไฟล์ถูกปิดใน Panel | เปิดไฟล์ / แก้ status |
Invalid file URL | URL ว่างหรือ format ผิด | Panel → Edit file → Test URL |
File URL blocked by security policy | โดเมนอยู่ใน blocklist ของเซิร์ฟเวอร์ | ใช้ hosted upload หรือโดเมนที่อนุญาต |
File download unavailable on server | เซิร์ฟเวอร์ไม่มี curl | ติดตั้ง php-curl บน host |
Hosted file missing on server | ไฟล์อัปโหลดหายจาก storage | Re-upload ใน Panel |
URL looks like a web page, not a direct file download | Content-Type เป็น HTML | ใช้ direct download link ไม่ใช่หน้าเว็บ |
Seller API Errors
INFO
Seller API ส่งข้อความ plain text ใน message — ไม่ใช้ veil (ไม่มี E01/E1AA3B2)
| message | HTTP | แก้ |
Missing sellerkey | 200 | ส่ง sellerkey=… ทุก request |
Invalid sellerkey | 200 | สร้าง key ใหม่ใน Panel → Seller API |
IP not whitelisted | 200 | เกิดได้เฉพาะ key ที่ตั้ง IP whitelist ไว้เอง — เพิ่ม IP ปัจจุบันใน Panel → Seller API (key ที่ไม่ได้ตั้ง whitelist ใช้ได้จากทุก IP) |
Permission denied for this API key | 200 | เปิด permission ของ type นั้น (เช่น addkey) |
Unknown seller API type | 200 | สะกด type ให้ตรง · ดู Seller Endpoints |
Seller API requires Pro plan or higher | 200 | อัปเกรดแพ็กเกจ account |
Seller subscription expired | 200 | ต่ออายุ seller sub |
Service unavailable | 200 | DB/connect ล้ม — ติดต่อ host |
Application not found | 200 | ส่ง app หรือ name ถ้ามีหลายแอป |
Invalid expiry | 200 | expiry / expiry_val ต้อง ≥ 1 |
Invalid subscription | 200 | สร้าง subscription tier ใน Panel ก่อน |
| ข้อความจาก Billing (key limit) | 200 | อัปเกรดแพ็กหรือลบคีย์เก่า |
| ข้อความ PHP exception | 500 | ดู message ใน JSON — มักเป็น mask ผิด, DB error |
Discord Bot & License Mask
อาการที่พบบ่อยจากบอท custom (เช่น genkey_new) หรือ Seller API addkey:
| อาการ | สาเหตุ | แก้ |
| Panel โชว์ note แทนคีย์ | เวอร์ชัน Panel เก่า | อัปเดต LibreAuth — แสดง key_code แล้ว |
คีย์สั้นแค่ 1d | mask ไม่มี * | ใช้ 1day-****** หรือให้ระบบ auto-expand เฉพาะ 1d/1day |
พิมพ์ Test11 ได้คีย์สุ่มต่อท้าย | logic เก่าเติม * ให้ทุก mask สั้น | อัปเดต server — Test11 = คีย์ตายตัว · อยากสุ่มใช้ Test11-****** |
ลบไม่ได้ · received length 4 | บอทส่งแค่ 4 ตัว หรือคีย์ตายตัวสั้นซ้ำหลายแอป | ส่งคีย์เต็มจาก create/Panel · หรือใส่ app= · mask สั้นไม่มี * = คีย์ทั้งก้อนสั้นจริง |
| HTTP 500 จาก addkey | mask ผิด / DB / permission | ดู Seller API Errors |