PJT AI REST API
REST API มาตรฐานสำหรับการเชื่อมต่อข้อมูล PJT AI กับระบบภายนอก คำขอและการตอบกลับทั้งหมดเป็น JSON และ base URL คือ https://api.pjt.ai/api/external/v1.
- การยืนยันตัวตน — เฮดเดอร์ X-API-Key (API key ของบัญชี, prefix pjt_)
- ขอบเขตคีย์ — read (อ่านอย่างเดียว ค่าเริ่มต้น) / write. POST·PUT·DELETE ต้องใช้คีย์ที่มีขอบเขต write — ไม่เช่นนั้นจะได้ 403 SCOPE_FORBIDDEN
- ขีดจำกัด — 60 ครั้ง/นาที + 10,000 ครั้ง/เดือน ต่อคีย์ (Enterprise ตกลงเพิ่มเติม)
- รหัสการตอบกลับ — 2xx สำเร็จ, 4xx ข้อผิดพลาดฝั่งไคลเอนต์, 5xx ข้อผิดพลาดเซิร์ฟเวอร์
- วันที่ — timestamp ทั้งหมดเป็น ISO 8601 (UTC)
การยืนยันตัวตน
ทุกคำขอต้องมี header X-API-Key: <API_KEY> สร้างคีย์ได้ที่ การตั้งค่าบัญชี > API key (แสดงเพียงครั้งเดียวตอนสร้าง)
/workspacesรายการเวิร์กสเปซ
คืนรายการเวิร์กสเปซที่บัญชี API key เข้าถึงได้
/workspaces/{workspaceId}ดูเวิร์กสเปซ
คืนเวิร์กสเปซหนึ่งรายการ
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| workspaceIdREQUIRED | integer | ID เวิร์กสเปซ |
/workspaces/{workspaceId}/projectsรายการโปรเจกต์
คืนรายการโปรเจกต์ที่ใช้งานอยู่ของเวิร์กสเปซ (ไม่รวมที่ยกเลิก/เก็บถาวร)
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| workspaceIdREQUIRED | integer | ID เวิร์กสเปซ |
/projectsสร้างโปรเจกต์ (idempotent)
สร้างโปรเจกต์ หากส่ง externalRef การเรียกจะเป็น idempotent — การส่งซ้ำด้วย (workspaceId, externalRef) เดิมจะคืนโปรเจกต์เดิมพร้อม 200 แทนการสร้างใหม่ (สร้างครั้งแรกคือ 201)
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| workspaceIdREQUIRED | integer | ID เวิร์กสเปซ |
| nameREQUIRED | string | ชื่อโปรเจกต์ |
| externalRef | string | คีย์ idempotency — ส่งซ้ำด้วยค่าเดิมจะคืนโปรเจกต์เดิมพร้อม 200 แทนการสร้างใหม่ |
| code | string | รหัสโปรเจกต์ (prefix ของคีย์งาน) หากเว้นว่างจะสร้างอัตโนมัติจากชื่อ |
| description | string | คำอธิบาย |
| clientIds | array | อาร์เรย์ของ ID ลูกค้า |
| managerId | integer | ID บัญชีผู้จัดการ |
| startDate | date | วันเริ่ม — ISO 8601 (YYYY-MM-DD) |
| endDate | date | วันสิ้นสุด — ISO 8601 (YYYY-MM-DD) |
| budget | integer | งบประมาณ |
/projects/{projectId}รายละเอียด / ความคืบหน้าโปรเจกต์
คืนรายละเอียดโปรเจกต์ รวมสถานะ ความคืบหน้า (%) กำหนดการตามแผน/จริง และเวลาแก้ไขล่าสุด
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| projectIdREQUIRED | string | ID โปรเจกต์ — ID ตัวเลขหรือ publicId ที่ขึ้นต้นด้วย p_ |
/projects/{projectId}แก้ไขโปรเจกต์
อัปเดตเฉพาะฟิลด์ที่ส่งมา (partial update)
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| projectIdREQUIRED | string | ID โปรเจกต์ — ID ตัวเลขหรือ publicId ที่ขึ้นต้นด้วย p_ |
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| name | string | ชื่อโปรเจกต์ |
| status | enum | สถานะ — PLANNING·ESTIMATING·WAITING·IN_PROGRESS·ON_HOLD·COMPLETED·CANCELLED |
| progressRate | integer | ความคืบหน้า (%) 0–100 |
| startDate | date | วันเริ่ม — ISO 8601 (YYYY-MM-DD) |
| endDate | date | วันสิ้นสุด — ISO 8601 (YYYY-MM-DD) |
/projects/{projectId}ลบโปรเจกต์
ลบโปรเจกต์ สำเร็จจะคืน 204 No Content (ไม่มีเนื้อหา)
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| projectIdREQUIRED | string | ID โปรเจกต์ — ID ตัวเลขหรือ publicId ที่ขึ้นต้นด้วย p_ |
/projects/{projectId}/timelineไทม์ไลน์ (ไมล์สโตน)
รายการไมล์สโตนของโปรเจกต์ — ชื่อ สถานะ (PLANNED/IN_PROGRESS/COMPLETED) กำหนดส่ง วันเสร็จ และความคืบหน้า เรียงตาม sortOrder
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| projectIdREQUIRED | string | ID โปรเจกต์ — ID ตัวเลขหรือ publicId ที่ขึ้นต้นด้วย p_ |
/projects/{projectId}/activitiesกิจกรรม
เหตุการณ์การเปลี่ยนแปลงงานของโปรเจกต์ เรียงจากใหม่สุด — ประเภท ข้อความ ผู้กระทำ และเวลา
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| projectIdREQUIRED | string | ID โปรเจกต์ — ID ตัวเลขหรือ publicId ที่ขึ้นต้นด้วย p_ |
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| page | integer | หมายเลขหน้า (เริ่มที่ 0 ค่าเริ่มต้น 0) |
| size | integer | ขนาดหน้า (ค่าเริ่มต้น 50 สูงสุด 200) |
/projects/{projectId}/filesรายการไฟล์
รวมไฟล์แนบจากงานและคอมเมนต์ในโปรเจกต์ เรียงจากใหม่สุด fileUrl เป็น URL แบบคงที่ไม่หมดอายุ
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| projectIdREQUIRED | string | ID โปรเจกต์ — ID ตัวเลขหรือ publicId ที่ขึ้นต้นด้วย p_ |
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| limit | integer | จำนวนสูงสุด (ค่าเริ่มต้น 100 สูงสุด 500) |
/projects/{projectId}/tasksรายการงาน
คืนรายการงานของโปรเจกต์ หากต้องการแบ่งหน้าให้ใช้ /tasks/paged
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| projectIdREQUIRED | string | ID โปรเจกต์ — ID ตัวเลขหรือ publicId ที่ขึ้นต้นด้วย p_ |
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| sortBy | string | เกณฑ์เรียงลำดับ (ค่าเริ่มต้น createdAt) |
/tasksสร้างงาน
สร้างงาน
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| projectIdREQUIRED | integer | ID โปรเจกต์ (ตัวเลข) |
| titleREQUIRED | string | หัวข้อ |
| description | string | คำอธิบาย |
| assigneeId | integer | ID บัญชีผู้รับผิดชอบ |
| status | enum | สถานะ — PENDING·TODO·IN_PROGRESS·IN_REVIEW·BLOCKED·COMPLETED·CANCELLED |
| priority | enum | ความสำคัญ — URGENT·HIGH·MEDIUM·LOW |
| dueDate | date | กำหนดส่ง — ISO 8601 |
| milestoneId | integer | ID ไมล์สโตนที่จะเชื่อมโยง |
/tasks/{taskId}ดูงาน
คืนงานหนึ่งรายการ
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| taskIdREQUIRED | integer | ID งาน |
/tasks/{taskId}แก้ไขงาน
อัปเดตเฉพาะฟิลด์ที่ส่งมา
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| taskIdREQUIRED | integer | ID งาน |
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| title | string | หัวข้อ |
| status | enum | สถานะ — PENDING·TODO·IN_PROGRESS·IN_REVIEW·BLOCKED·COMPLETED·CANCELLED |
| priority | enum | ความสำคัญ — URGENT·HIGH·MEDIUM·LOW |
| dueDate | date | กำหนดส่ง — ISO 8601 |
/tasks/{taskId}ลบงาน
ลบงาน สำเร็จจะคืน 204 No Content
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| taskIdREQUIRED | integer | ID งาน |
/tasks/assignedงานที่มอบหมายให้ฉัน
คืนรายการงานที่มอบหมายให้บัญชี API key
/projects/{projectId}/documentsรายการเอกสาร
คืนรายการเอกสารของโปรเจกต์ หากต้องการแบ่งหน้าให้ใช้ /documents/paged
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| projectIdREQUIRED | string | ID โปรเจกต์ — ID ตัวเลขหรือ publicId ที่ขึ้นต้นด้วย p_ |
/documents/{documentId}ดูเอกสาร
คืนเอกสารหนึ่งรายการ (รวมเนื้อหา)
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| documentIdREQUIRED | integer | ID เอกสาร |
/documentsสร้างเอกสาร
สร้างเอกสาร
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| workspaceIdREQUIRED | integer | ID เวิร์กสเปซ |
| titleREQUIRED | string | หัวข้อ |
| documentTypeREQUIRED | enum | ประเภทเอกสาร (เช่น REQUIREMENT, MEETING_NOTE) |
| projectId | integer | ID โปรเจกต์ (ตัวเลข) |
| content | string | เนื้อหาเอกสาร |
| visibility | enum | ขอบเขตการมองเห็น — PUBLIC·TEAM·PRIVATE |
/documents/{documentId}แก้ไขเอกสาร
อัปเดตเฉพาะฟิลด์ที่ส่งมา
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| documentIdREQUIRED | integer | ID เอกสาร |
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| title | string | หัวข้อ |
| content | string | เนื้อหาเอกสาร |
| visibility | enum | ขอบเขตการมองเห็น — PUBLIC·TEAM·PRIVATE |
/documents/{documentId}ลบเอกสาร
ลบเอกสาร สำเร็จจะคืน 204 No Content
| ชื่อ | ประเภท | คำอธิบาย |
|---|---|---|
| documentIdREQUIRED | integer | ID เอกสาร |
รหัสข้อผิดพลาด
การตอบกลับข้อผิดพลาดทุกครั้งมี error.code และ error.message
| รหัส | ชื่อ | คำอธิบาย | การดำเนินการ |
|---|---|---|---|
| 400 | Bad Request | request body ไม่ถูกต้อง | ตรวจสอบ request body |
| 401 | Unauthorized | API key ไม่ถูกต้องหรือขาดหายไป | ตรวจสอบ API key อีกครั้ง |
| 403 | Forbidden | คุณไม่มีสิทธิ์เข้าถึงทรัพยากรนี้ คำขอเขียนด้วยคีย์แบบอ่านอย่างเดียวจะได้รับ SCOPE_FORBIDDEN | ตรวจสอบบทบาท/ขอบเขต |
| 404 | Not Found | ไม่พบทรัพยากรที่ร้องขอ | ตรวจสอบ ID อีกครั้ง |
| 429 | Rate Limited | คุณเกินขีดจำกัดอัตรา | ดู header Retry-After และชะลอการเรียก |
| 500 | Server Error | เกิดข้อผิดพลาดขณะเซิร์ฟเวอร์ประมวลผลคำขอ | ลองใหม่หลัง 5 นาที ตรวจสอบ status.pjt.ai |