Public API
เปิด ticket จาก UI หรือ Backend ของคุณเอง สร้าง key ได้ที่ project → API keys
การยืนยันตัวตน
ส่ง key ใน header X-Api-Key และควรเรียกจากฝั่ง server เพื่อไม่ให้ key หลุดไปที่ browser key จะเห็นเฉพาะ ticket ที่เปิดผ่าน API ใน project ของตัวเอง ไม่เห็น ticket ที่เปิดจากหน้า web และ rate limit นับรวมทุก key ของบริษัท
สร้าง ticket
ตอบกลับ 201 พร้อมเลข ticket หากส่งซ้ำด้วย Idempotency-Key เดิมจะได้ 200 และ ticket เดิม ถ้าใช้ key เดิมกับข้อมูลต่างกันจะได้ 422 IDEMPOTENCY_KEY_REUSED
curl -X POST https://api-jaengo.flexblitz.com/public/v1/tickets \
-H "Content-Type: application/json" \
-H "X-Api-Key: jgo_xxxxxxxxxxxxxxxx" \
-H "Idempotency-Key: 7f9c2ba4-order-1234" \
-d '{
"title": "Cannot submit leave request",
"description": "Button does nothing after clicking Save",
"type": "incident",
"priority": "high",
"system": "HR-WEB",
"reporter": { "name": "Somchai", "email": "somchai@example.com", "externalId": "emp-1029" },
"metadata": { "appVersion": "2.4.1", "page": "/leave/new" }
}'{
"key": "HR-42",
"title": "Cannot submit leave request",
"status": "open",
"priority": "high",
"type": "incident",
"system": "HR-WEB",
"createdAt": "2026-10-26T09:30:00Z",
"updatedAt": "2026-10-26T09:30:00Z"
}แยก ticket ตามระบบ
ถ้า project มีหลายระบบ ให้สร้างระบบที่ project → ระบบ แล้วเลือกได้ 2 แบบ: (1) สร้าง API key แยกต่อระบบและผูกกับระบบนั้น ticket จะถูกติดระบบให้อัตโนมัติ และ key จะเห็นเฉพาะ ticket ของระบบตัวเอง (แนะนำ) หรือ (2) ใช้ key ของทั้ง project แล้วส่ง "system": "<code>" มาใน body เหมาะกับ gateway ที่รวมหลายระบบ code ที่ไม่มีหรือระบบที่เก็บถาวรแล้วจะได้ 400 VALIDATION_ERROR (system) ถ้า key ผูกระบบไว้แล้วส่ง code อื่นมาจะได้ system_mismatch รายการ ticket กรองด้วย system=<code> ได้ และ response มีฟิลด์ system
ตรวจสอบสถานะ ticket
ได้ ticket พร้อมคำตอบที่ไม่ใช่ note ภายใน (fromReporter บอกว่าใครเป็นคนเขียน) และรายการ file แนบ
curl https://api-jaengo.flexblitz.com/public/v1/tickets/HR-42 -H "X-Api-Key: jgo_xxxxxxxxxxxxxxxx"รายการ ticket ของผู้แจ้ง
สำหรับหน้า “ticket ของฉัน” กรองด้วย reporterEmail หรือ reporterExternalId (ต้องมีอย่างน้อยหนึ่งค่า) และใส่ status, page, pageSize ได้
curl "https://api-jaengo.flexblitz.com/public/v1/tickets?reporterExternalId=emp-1029&system=HR-WEB&status=open&page=1&pageSize=20" \
-H "X-Api-Key: jgo_xxxxxxxxxxxxxxxx"ตอบกลับในนามผู้แจ้ง
เพิ่มคำตอบจากผู้แจ้งและส่ง email แจ้งผู้รับผิดชอบ ถ้า ticket อยู่ในสถานะรอข้อมูลจะกลับเป็นกำลังดำเนินการ
curl -X POST https://api-jaengo.flexblitz.com/public/v1/tickets/HR-42/comments \
-H "Content-Type: application/json" \
-H "X-Api-Key: jgo_xxxxxxxxxxxxxxxx" \
-d '{ "body": "I tried again after clearing the cache and it still fails." }'แนบ file
3 ขั้นตอน: ขอ upload URL แล้ว PUT file ไปที่ URL นั้นพร้อม header Content-Type ที่ได้รับ และขนาด file ต้องตรงกับ size ที่แจ้งไว้ (ภายใน 15 นาที) จากนั้นเรียก complete file ละไม่เกิน 25 MB ส่วน video (MP4, MOV, WebM) ตามขนาดที่ package กำหนด รองรับรูปภาพ (รวม HEIC) video PDF TXT CSV Excel และ file Office อื่น ๆ และ ZIP ระบบจะตรวจว่าเนื้อ file ตรงกับชนิด file (422 FILE_TYPE_MISMATCH) และลบข้อมูล GPS ออกจากรูปถ่าย
# 1) Request an upload URL
curl -X POST https://api-jaengo.flexblitz.com/public/v1/tickets/HR-42/attachments \
-H "Content-Type: application/json" \
-H "X-Api-Key: jgo_xxxxxxxxxxxxxxxx" \
-d '{ "fileName": "screenshot.png", "contentType": "image/png", "size": 48213 }'
# → 201 { "attachment": { "id": "6720…", "status": "pending", … }, "uploadUrl": "https://…", "headers": { "Content-Type": "image/png" } }
# 2) Upload the bytes directly to storage
curl -X PUT "<uploadUrl>" -H "Content-Type: image/png" --data-binary @screenshot.png
# 3) Confirm
curl -X POST https://api-jaengo.flexblitz.com/public/v1/tickets/HR-42/attachments/<attachmentId>/complete \
-H "X-Api-Key: jgo_xxxxxxxxxxxxxxxx"Download file
ได้ URL ชั่วคราวสำหรับ download file ที่อยู่ใน ticket
curl https://api-jaengo.flexblitz.com/public/v1/tickets/HR-42/attachments/<attachmentId>/url -H "X-Api-Key: jgo_xxxxxxxxxxxxxxxx"
# → 200 { "url": "https://…", "expiresAt": "…" }File ขนาดใหญ่และ video
File ที่ใหญ่กว่า 32 MB จะ upload เป็นส่วนละ 16 MB แต่ละส่วนมี URL ของตัวเอง (ใช้ได้ 2 ชั่วโมง) ที่รับเฉพาะขนาดของส่วนนั้น หาก internet หลุดจะส่งซ้ำแค่ส่วนที่ล้มเหลว จากนั้นส่ง ETag ของทุกส่วนไปที่ complete
# Files over 32 MB (videos) get "multipart" instead of "uploadUrl":
# → 201 { "attachment": {…}, "multipart": { "partSize": 16777216,
# "parts": [ { "partNumber": 1, "offset": 0, "size": 16777216, "url": "https://…" }, … ] } }
# PUT each byte range to its URL (retry a failed part with the same URL) and keep the ETag header
curl -X PUT "<parts[0].url>" --data-binary @<(head -c 16777216 video.mp4) -D - | grep -i etag
# Then confirm with every part's ETag
curl -X POST https://api-jaengo.flexblitz.com/public/v1/tickets/HR-42/attachments/<attachmentId>/complete \
-H "Content-Type: application/json" -H "X-Api-Key: jgo_xxxxxxxxxxxxxxxx" \
-d '{ "parts": [ { "partNumber": 1, "etag": "\"9b2cf…\"" }, { "partNumber": 2, "etag": "\"41d8c…\"" } ] }'Link share (ไม่ต้องใช้ API key)
ทีมสร้าง link share ได้จากหน้า case (กำหนดวันหมดอายุ รหัสผ่าน จำนวนครั้ง และ file ที่จะแสดง) ผู้ที่มี link อ่าน case ได้เป็น JSON หรือ Markdown สำหรับ AI โดยไม่ต้องเข้าสู่ระบบหรือใช้ API key note ภายในจะไม่ถูก share การใส่รหัสผ่านผิดถูกจำกัด (5 ครั้ง/15 นาที) และทุกการเปิดถูกบันทึก
# Markdown for an AI tool (text written by people is wrapped in <user_content> tags)
curl "https://api-jaengo.flexblitz.com/share/v1/jgs_xxxxxxxxxxxxxxxx?format=md"
# JSON; add the password header when the link has one
curl "https://api-jaengo.flexblitz.com/share/v1/jgs_xxxxxxxxxxxxxxxx" -H "X-Share-Password: ••••••"
# A temporary link to one file (inline for images/videos)
curl "https://api-jaengo.flexblitz.com/share/v1/jgs_xxxxxxxxxxxxxxxx/attachments/<attachmentId>/url?disposition=inline"ข้อผิดพลาด
ข้อผิดพลาดมีรหัสคงที่: 401 INVALID_API_KEY, 400 VALIDATION_ERROR, 402 PLAN_LIMIT_REACHED, 429 RATE_LIMITED, 503 STORAGE_DISABLED (ยังไม่เปิดใช้ file แนบ), 409 UPLOAD_NOT_FOUND, 422 IDEMPOTENCY_KEY_REUSED