PJT AIPJT AI/API REFERENCE
v1https://api.pjt.ai/api/external/v1
Getting startedMCP
OverviewAuthenticationError codes
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

A standard REST API for integrating PJT AI data with external systems. All requests and responses are JSON, and the base URL is https://api.pjt.ai/api/external/v1.

Basics
  • Authentication — X-API-Key header (account API key, pjt_ prefix)
  • Key scopes — read (read-only, default) / write. POST·PUT·DELETE require a write-scoped key — otherwise 403 SCOPE_FORBIDDEN
  • Rate limit — 60 req/min + 10,000 req/month per key (Enterprise by arrangement)
  • Response codes — 2xx success, 4xx client error, 5xx server error
  • Dates — all timestamps are ISO 8601 (UTC)
AUTH

Authentication

Every request requires the X-API-Key: <API_KEY> header. Issue keys under Account Settings > API keys (shown only once at creation).

⚠
Storing keys
Use API keys only on the server side. If one is exposed to a client (browser or mobile app), revoke and reissue it immediately.
Workspaces
GET/workspaces

List workspaces

Returns the workspaces accessible to the API-key account.

Response codes
200OK401Unauthorized429Rate Limited
GET/workspaces/{workspaceId}

Get workspace

Returns a single workspace.

Path parameters
NameTypeDescription
workspaceIdREQUIREDintegerWorkspace ID
Response codes
200OK401Unauthorized404Not Found
Projects
GET/workspaces/{workspaceId}/projects

List projects

Returns the active projects of a workspace (cancelled/archived excluded).

Path parameters
NameTypeDescription
workspaceIdREQUIREDintegerWorkspace ID
Response codes
200OK401Unauthorized403Forbidden
POST/projects

Create project (idempotent)

Creates a project. With externalRef the call is idempotent — repeating the same (workspaceId, externalRef) returns the existing project with 200 instead of creating a new one (201 on first creation).

Body parameters
NameTypeDescription
workspaceIdREQUIREDintegerWorkspace ID
nameREQUIREDstringProject name
externalRefstringIdempotency key — repeating with the same value returns the existing project with 200 instead of creating a new one
codestringProject code (task key prefix). Auto-generated from the name if omitted
descriptionstringDescription
clientIdsarrayArray of client IDs
managerIdintegerManager account ID
startDatedateStart date — ISO 8601 (YYYY-MM-DD)
endDatedateEnd date — ISO 8601 (YYYY-MM-DD)
budgetintegerBudget
Response codes
201Created200OK400Bad Request401Unauthorized
GET/projects/{projectId}

Get project / progress

Returns project detail including status, progress (%), planned/actual dates and last-modified time.

Path parameters
NameTypeDescription
projectIdREQUIREDstringProject ID — numeric ID or publicId starting with p_
Response codes
200OK404Not Found
PUT/projects/{projectId}

Update project

Updates only the fields you send (partial update).

Path parameters
NameTypeDescription
projectIdREQUIREDstringProject ID — numeric ID or publicId starting with p_
Body parameters
NameTypeDescription
namestringProject name
statusenumStatus — PLANNING·ESTIMATING·WAITING·IN_PROGRESS·ON_HOLD·COMPLETED·CANCELLED
progressRateintegerProgress (%) 0–100
startDatedateStart date — ISO 8601 (YYYY-MM-DD)
endDatedateEnd date — ISO 8601 (YYYY-MM-DD)
Response codes
200OK400Bad Request404Not Found
DELETE/projects/{projectId}

Delete project

Deletes a project. Returns 204 No Content on success (empty body).

Path parameters
NameTypeDescription
projectIdREQUIREDstringProject ID — numeric ID or publicId starting with p_
Response codes
204No Content403Forbidden404Not Found
GET/projects/{projectId}/timeline

Timeline (milestones)

Project milestones — name, status (PLANNED/IN_PROGRESS/COMPLETED), due date, completion date and progress. Ordered by sortOrder.

Path parameters
NameTypeDescription
projectIdREQUIREDstringProject ID — numeric ID or publicId starting with p_
Response codes
200OK403Forbidden404Not Found
GET/projects/{projectId}/activities

Activities

Task change events of the project, newest first — type, message, actor and timestamp.

Path parameters
NameTypeDescription
projectIdREQUIREDstringProject ID — numeric ID or publicId starting with p_
Query parameters
NameTypeDescription
pageintegerPage number (0-based, default 0)
sizeintegerPage size (default 50, max 200)
Response codes
200OK403Forbidden404Not Found
GET/projects/{projectId}/files

Files

Task and comment attachments of the project merged, newest first. fileUrl is a static, non-expiring URL.

Path parameters
NameTypeDescription
projectIdREQUIREDstringProject ID — numeric ID or publicId starting with p_
Query parameters
NameTypeDescription
limitintegerMaximum items (default 100, max 500)
Response codes
200OK403Forbidden404Not Found
Tasks
GET/projects/{projectId}/tasks

List tasks

Returns the tasks of a project. Use /tasks/paged when you need pagination.

Path parameters
NameTypeDescription
projectIdREQUIREDstringProject ID — numeric ID or publicId starting with p_
Query parameters
NameTypeDescription
sortBystringSort field (default createdAt)
Response codes
200OK403Forbidden404Not Found
POST/tasks

Create task

Creates a task.

Body parameters
NameTypeDescription
projectIdREQUIREDintegerProject ID (numeric)
titleREQUIREDstringTitle
descriptionstringDescription
assigneeIdintegerAssignee account ID
statusenumStatus — PENDING·TODO·IN_PROGRESS·IN_REVIEW·BLOCKED·COMPLETED·CANCELLED
priorityenumPriority — URGENT·HIGH·MEDIUM·LOW
dueDatedateDue date — ISO 8601
milestoneIdintegerMilestone ID to link
Response codes
201Created400Bad Request401Unauthorized
GET/tasks/{taskId}

Get task

Returns a single task.

Path parameters
NameTypeDescription
taskIdREQUIREDintegerTask ID
Response codes
200OK404Not Found
PUT/tasks/{taskId}

Update task

Updates only the fields you send.

Path parameters
NameTypeDescription
taskIdREQUIREDintegerTask ID
Body parameters
NameTypeDescription
titlestringTitle
statusenumStatus — PENDING·TODO·IN_PROGRESS·IN_REVIEW·BLOCKED·COMPLETED·CANCELLED
priorityenumPriority — URGENT·HIGH·MEDIUM·LOW
dueDatedateDue date — ISO 8601
Response codes
200OK400Bad Request404Not Found
DELETE/tasks/{taskId}

Delete task

Deletes a task. Returns 204 No Content on success.

Path parameters
NameTypeDescription
taskIdREQUIREDintegerTask ID
Response codes
204No Content403Forbidden404Not Found
GET/tasks/assigned

My assigned tasks

Returns the tasks assigned to the API-key account.

Response codes
200OK401Unauthorized
Documents
GET/projects/{projectId}/documents

List documents

Returns the documents of a project. Use /documents/paged when you need pagination.

Path parameters
NameTypeDescription
projectIdREQUIREDstringProject ID — numeric ID or publicId starting with p_
Response codes
200OK403Forbidden404Not Found
GET/documents/{documentId}

Get document

Returns a single document including its content.

Path parameters
NameTypeDescription
documentIdREQUIREDintegerDocument ID
Response codes
200OK404Not Found
POST/documents

Create document

Creates a document.

Body parameters
NameTypeDescription
workspaceIdREQUIREDintegerWorkspace ID
titleREQUIREDstringTitle
documentTypeREQUIREDenumDocument type (e.g. REQUIREMENT, MEETING_NOTE)
projectIdintegerProject ID (numeric)
contentstringDocument body
visibilityenumVisibility — PUBLIC·TEAM·PRIVATE
Response codes
201Created400Bad Request401Unauthorized
PUT/documents/{documentId}

Update document

Updates only the fields you send.

Path parameters
NameTypeDescription
documentIdREQUIREDintegerDocument ID
Body parameters
NameTypeDescription
titlestringTitle
contentstringDocument body
visibilityenumVisibility — PUBLIC·TEAM·PRIVATE
Response codes
200OK400Bad Request404Not Found
DELETE/documents/{documentId}

Delete document

Deletes a document. Returns 204 No Content on success.

Path parameters
NameTypeDescription
documentIdREQUIREDintegerDocument ID
Response codes
204No Content403Forbidden404Not Found
ERRORS

Error codes

Every error response includes error.code and error.message.

CodeNameDescriptionAction
400Bad RequestThe request body is invalid.Validate the request body
401UnauthorizedThe API key is invalid or missing.Re-check the API key
403ForbiddenYou don't have permission to access this resource. Write requests with a read-only key return SCOPE_FORBIDDEN.Check roles/scopes
404Not FoundThe requested resource was not found.Re-check the ID
429Rate LimitedYou exceeded the rate limit.See the Retry-After header and back off
500Server ErrorAn error occurred while the server processed the request.Retry after 5 min, check status.pjt.ai
BASE URL
https://api.pjt.ai/api/external/v1
VERSION
v1 · released 2026-07