PJT AIPJT AI/API REFERENCE
v1https://api.pjt.ai/api/external/v1
Bắt đầuMCP
Tổng quanXác thựcMã lỗi
Workspaces
  • GET/workspaces
  • GET/workspaces/{workspaceId}
Projects
  • GET/workspaces/{workspaceId}/projects
  • POST/projects
  • GET/projects/{projectId}
  • PUT/projects/{projectId}
  • DELETE/projects/{projectId}
  • GET/projects/{projectId}/timeline
  • GET/projects/{projectId}/activities
  • GET/projects/{projectId}/files
Tasks
  • GET/projects/{projectId}/tasks
  • POST/tasks
  • GET/tasks/{taskId}
  • PUT/tasks/{taskId}
  • DELETE/tasks/{taskId}
  • GET/tasks/assigned
Documents
  • GET/projects/{projectId}/documents
  • GET/documents/{documentId}
  • POST/documents
  • PUT/documents/{documentId}
  • DELETE/documents/{documentId}
OVERVIEW

PJT AI REST API

Một REST API chuẩn để tích hợp dữ liệu PJT AI với các hệ thống bên ngoài. Mọi yêu cầu và phản hồi đều ở định dạng JSON, và URL cơ sở là https://api.pjt.ai/api/external/v1.

Cơ bản
  • Xác thực — header X-API-Key (API key tài khoản, tiền tố pjt_)
  • Phạm vi khóa — read (chỉ đọc, mặc định) / write. POST·PUT·DELETE cần khóa có phạm vi write — nếu không sẽ trả về 403 SCOPE_FORBIDDEN
  • Giới hạn — 60 req/phút + 10.000 req/tháng mỗi khóa (Enterprise thỏa thuận)
  • Mã phản hồi — 2xx thành công, 4xx lỗi máy khách, 5xx lỗi máy chủ
  • Ngày tháng — mọi dấu thời gian đều ở định dạng ISO 8601 (UTC)
AUTH

Xác thực

Mọi yêu cầu đều cần header X-API-Key: <API_KEY> . Cấp khóa tại Cài đặt tài khoản > API key (chỉ hiển thị một lần khi tạo).

⚠
Lưu trữ khóa
Chỉ dùng khóa API ở phía máy chủ. Nếu một khóa bị lộ ra máy khách (trình duyệt hoặc ứng dụng di động), hãy thu hồi và phát hành lại ngay lập tức.
Workspaces
GET/workspaces

Danh sách workspace

Trả về các workspace mà tài khoản API key có thể truy cập.

Mã phản hồi
200OK401Unauthorized429Rate Limited
GET/workspaces/{workspaceId}

Xem workspace

Trả về một workspace.

Tham số đường dẫn
TênKiểuMô tả
workspaceIdBẮT BUỘCintegerID workspace
Mã phản hồi
200OK401Unauthorized404Not Found
Projects
GET/workspaces/{workspaceId}/projects

Danh sách dự án

Trả về các dự án đang hoạt động của workspace (loại trừ đã hủy/lưu trữ).

Tham số đường dẫn
TênKiểuMô tả
workspaceIdBẮT BUỘCintegerID workspace
Mã phản hồi
200OK401Unauthorized403Forbidden
POST/projects

Tạo dự án (idempotent)

Tạo dự án. Khi gửi kèm externalRef, lời gọi là idempotent — lặp lại cùng (workspaceId, externalRef) sẽ trả về dự án hiện có với 200 thay vì tạo mới (201 khi tạo lần đầu).

Tham số body
TênKiểuMô tả
workspaceIdBẮT BUỘCintegerID workspace
nameBẮT BUỘCstringTên dự án
externalRefstringKhóa idempotency — gửi lại cùng giá trị sẽ trả về dự án hiện có với 200 thay vì tạo mới
codestringMã dự án (tiền tố khóa công việc). Tự động tạo từ tên nếu bỏ trống
descriptionstringMô tả
clientIdsarrayMảng ID khách hàng
managerIdintegerID tài khoản quản lý
startDatedateNgày bắt đầu — ISO 8601 (YYYY-MM-DD)
endDatedateNgày kết thúc — ISO 8601 (YYYY-MM-DD)
budgetintegerNgân sách
Mã phản hồi
201Created200OK400Bad Request401Unauthorized
GET/projects/{projectId}

Chi tiết / tiến độ dự án

Trả về chi tiết dự án gồm trạng thái, tiến độ (%), lịch kế hoạch/thực tế và thời điểm sửa cuối.

Tham số đường dẫn
TênKiểuMô tả
projectIdBẮT BUỘCstringID dự án — ID số hoặc publicId bắt đầu bằng p_
Mã phản hồi
200OK404Not Found
PUT/projects/{projectId}

Cập nhật dự án

Chỉ cập nhật các trường được gửi (cập nhật một phần).

Tham số đường dẫn
TênKiểuMô tả
projectIdBẮT BUỘCstringID dự án — ID số hoặc publicId bắt đầu bằng p_
Tham số body
TênKiểuMô tả
namestringTên dự án
statusenumTrạng thái — PLANNING·ESTIMATING·WAITING·IN_PROGRESS·ON_HOLD·COMPLETED·CANCELLED
progressRateintegerTiến độ (%) 0–100
startDatedateNgày bắt đầu — ISO 8601 (YYYY-MM-DD)
endDatedateNgày kết thúc — ISO 8601 (YYYY-MM-DD)
Mã phản hồi
200OK400Bad Request404Not Found
DELETE/projects/{projectId}

Xóa dự án

Xóa dự án. Thành công trả về 204 No Content (không có nội dung).

Tham số đường dẫn
TênKiểuMô tả
projectIdBẮT BUỘCstringID dự án — ID số hoặc publicId bắt đầu bằng p_
Mã phản hồi
204No Content403Forbidden404Not Found
GET/projects/{projectId}/timeline

Timeline (milestone)

Danh sách milestone của dự án — tên, trạng thái (PLANNED/IN_PROGRESS/COMPLETED), hạn chót, ngày hoàn thành và tiến độ. Sắp xếp theo sortOrder.

Tham số đường dẫn
TênKiểuMô tả
projectIdBẮT BUỘCstringID dự án — ID số hoặc publicId bắt đầu bằng p_
Mã phản hồi
200OK403Forbidden404Not Found
GET/projects/{projectId}/activities

Hoạt động

Các sự kiện thay đổi công việc của dự án, mới nhất trước — loại, thông điệp, người thực hiện và thời gian.

Tham số đường dẫn
TênKiểuMô tả
projectIdBẮT BUỘCstringID dự án — ID số hoặc publicId bắt đầu bằng p_
Tham số truy vấn
TênKiểuMô tả
pageintegerSố trang (bắt đầu từ 0, mặc định 0)
sizeintegerKích thước trang (mặc định 50, tối đa 200)
Mã phản hồi
200OK403Forbidden404Not Found
GET/projects/{projectId}/files

Danh sách tệp

Gộp tệp đính kèm của công việc và bình luận trong dự án, mới nhất trước. fileUrl là URL tĩnh không hết hạn.

Tham số đường dẫn
TênKiểuMô tả
projectIdBẮT BUỘCstringID dự án — ID số hoặc publicId bắt đầu bằng p_
Tham số truy vấn
TênKiểuMô tả
limitintegerSố lượng tối đa (mặc định 100, tối đa 500)
Mã phản hồi
200OK403Forbidden404Not Found
Tasks
GET/projects/{projectId}/tasks

Danh sách công việc

Trả về các công việc của dự án. Dùng /tasks/paged nếu cần phân trang.

Tham số đường dẫn
TênKiểuMô tả
projectIdBẮT BUỘCstringID dự án — ID số hoặc publicId bắt đầu bằng p_
Tham số truy vấn
TênKiểuMô tả
sortBystringTrường sắp xếp (mặc định createdAt)
Mã phản hồi
200OK403Forbidden404Not Found
POST/tasks

Tạo công việc

Tạo công việc.

Tham số body
TênKiểuMô tả
projectIdBẮT BUỘCintegerID dự án (số)
titleBẮT BUỘCstringTiêu đề
descriptionstringMô tả
assigneeIdintegerID tài khoản người phụ trách
statusenumTrạng thái — PENDING·TODO·IN_PROGRESS·IN_REVIEW·BLOCKED·COMPLETED·CANCELLED
priorityenumĐộ ưu tiên — URGENT·HIGH·MEDIUM·LOW
dueDatedateHạn chót — ISO 8601
milestoneIdintegerID milestone cần liên kết
Mã phản hồi
201Created400Bad Request401Unauthorized
GET/tasks/{taskId}

Xem công việc

Trả về một công việc.

Tham số đường dẫn
TênKiểuMô tả
taskIdBẮT BUỘCintegerID công việc
Mã phản hồi
200OK404Not Found
PUT/tasks/{taskId}

Cập nhật công việc

Chỉ cập nhật các trường được gửi.

Tham số đường dẫn
TênKiểuMô tả
taskIdBẮT BUỘCintegerID công việc
Tham số body
TênKiểuMô tả
titlestringTiêu đề
statusenumTrạng thái — PENDING·TODO·IN_PROGRESS·IN_REVIEW·BLOCKED·COMPLETED·CANCELLED
priorityenumĐộ ưu tiên — URGENT·HIGH·MEDIUM·LOW
dueDatedateHạn chót — ISO 8601
Mã phản hồi
200OK400Bad Request404Not Found
DELETE/tasks/{taskId}

Xóa công việc

Xóa công việc. Thành công trả về 204 No Content.

Tham số đường dẫn
TênKiểuMô tả
taskIdBẮT BUỘCintegerID công việc
Mã phản hồi
204No Content403Forbidden404Not Found
GET/tasks/assigned

Công việc được giao cho tôi

Trả về các công việc được giao cho tài khoản API key.

Mã phản hồi
200OK401Unauthorized
Documents
GET/projects/{projectId}/documents

Danh sách tài liệu

Trả về các tài liệu của dự án. Dùng /documents/paged nếu cần phân trang.

Tham số đường dẫn
TênKiểuMô tả
projectIdBẮT BUỘCstringID dự án — ID số hoặc publicId bắt đầu bằng p_
Mã phản hồi
200OK403Forbidden404Not Found
GET/documents/{documentId}

Xem tài liệu

Trả về một tài liệu (gồm nội dung).

Tham số đường dẫn
TênKiểuMô tả
documentIdBẮT BUỘCintegerID tài liệu
Mã phản hồi
200OK404Not Found
POST/documents

Tạo tài liệu

Tạo tài liệu.

Tham số body
TênKiểuMô tả
workspaceIdBẮT BUỘCintegerID workspace
titleBẮT BUỘCstringTiêu đề
documentTypeBẮT BUỘCenumLoại tài liệu (vd: REQUIREMENT, MEETING_NOTE)
projectIdintegerID dự án (số)
contentstringNội dung tài liệu
visibilityenumPhạm vi hiển thị — PUBLIC·TEAM·PRIVATE
Mã phản hồi
201Created400Bad Request401Unauthorized
PUT/documents/{documentId}

Cập nhật tài liệu

Chỉ cập nhật các trường được gửi.

Tham số đường dẫn
TênKiểuMô tả
documentIdBẮT BUỘCintegerID tài liệu
Tham số body
TênKiểuMô tả
titlestringTiêu đề
contentstringNội dung tài liệu
visibilityenumPhạm vi hiển thị — PUBLIC·TEAM·PRIVATE
Mã phản hồi
200OK400Bad Request404Not Found
DELETE/documents/{documentId}

Xóa tài liệu

Xóa tài liệu. Thành công trả về 204 No Content.

Tham số đường dẫn
TênKiểuMô tả
documentIdBẮT BUỘCintegerID tài liệu
Mã phản hồi
204No Content403Forbidden404Not Found
ERRORS

Mã lỗi

Mọi phản hồi lỗi đều bao gồm error.code và error.message.

MãTênMô tảHành động
400Bad RequestBody của yêu cầu không hợp lệ.Xác thực body của yêu cầu
401UnauthorizedKhóa API không hợp lệ hoặc thiếu.Kiểm tra lại khóa API
403ForbiddenBạn không có quyền truy cập tài nguyên này. Yêu cầu ghi bằng khóa chỉ đọc sẽ trả về SCOPE_FORBIDDEN.Kiểm tra vai trò/phạm vi
404Not FoundKhông tìm thấy tài nguyên được yêu cầu.Kiểm tra lại ID
429Rate LimitedBạn đã vượt quá giới hạn tốc độ.Xem header Retry-After và giảm tốc
500Server ErrorĐã xảy ra lỗi khi máy chủ xử lý yêu cầu.Thử lại sau 5 phút, kiểm tra status.pjt.ai
BASE URL
https://api.pjt.ai/api/external/v1
VERSION
v1 · released 2026-07