Projects API

Project management with tasks, sprints, timesheets, resource allocation, billing rates, and expense tracking.

All endpoints prefixed with /api/v1/project

Projects

Core project records with phases, milestones, and budget tracking.

POST /api/v1/project/projects

Create a new project.

Auth: Bearer token · project.create

Request Body
json
{
  "name": "Website Redesign",
  "code": "WR-001",
  "description": "Complete website overhaul",
  "startDate": "2026-07-01",
  "endDate": "2026-09-30",
  "budget": 50000,
  "currency": "USD",
  "status": "planning",
  "managerId": 1
}
GET /api/v1/project/projects

List projects with pagination and filtering.

Auth: Bearer token · project.view

Query Parameters
Parameter Type Description
page number Page number
limit number Items per page
search string Search by name or code
status string Filter by status
managerId number Filter by manager
GET /api/v1/project/projects/stats

Get project statistics.

Auth: Bearer token · project.view

GET /api/v1/project/projects/:id

Get project by ID.

Auth: Bearer token · project.view

PUT /api/v1/project/projects/:id

Update a project.

Auth: Bearer token · project.edit

DELETE /api/v1/project/projects/:id

Delete a project.

Auth: Bearer token · project.delete

GET /api/v1/project/projects/:id/phases

List phases for a project.

Auth: Bearer token · project.view

POST /api/v1/project/projects/:id/phases

Create a phase for a project.

Auth: Bearer token · project.create

GET /api/v1/project/projects/:id/milestones

List milestones for a project.

Auth: Bearer token · project.view

POST /api/v1/project/projects/:id/milestones

Create a milestone for a project.

Auth: Bearer token · project.create

Tasks

Task management with assignments, priorities, and dependencies.

POST /api/v1/project/tasks

Create a new task.

Auth: Bearer token · project.create

Request Body
json
{
  "projectId": 1,
  "title": "Design mockups",
  "description": "Create UI mockups",
  "assigneeId": 2,
  "priority": "high",
  "status": "todo",
  "dueDate": "2026-07-15",
  "estimatedHours": 16,
  "sprintId": 1
}
GET /api/v1/project/tasks

List tasks with pagination and filtering.

Auth: Bearer token · project.view

Query Parameters
Parameter Type Description
page number Page number
limit number Items per page
projectId number Filter by project
assigneeId number Filter by assignee
status string Filter by status
priority string Filter by priority
sprintId number Filter by sprint
GET /api/v1/project/tasks/kanban

Get Kanban board view grouped by status.

Auth: Bearer token · project.view

Query Parameters
Parameter Type Description
projectId number Filter by project
sprintId number Filter by sprint
GET /api/v1/project/tasks/:id

Get task by ID.

Auth: Bearer token · project.view

PUT /api/v1/project/tasks/:id

Update a task.

Auth: Bearer token · project.edit

DELETE /api/v1/project/tasks/:id

Delete a task.

Auth: Bearer token · project.delete

Sprints

Agile sprint planning with velocity tracking.

POST /api/v1/project/sprints

Create a new sprint.

Auth: Bearer token · project.create

Request Body
json
{
  "projectId": 1,
  "name": "Sprint 1",
  "startDate": "2026-07-01",
  "endDate": "2026-07-14",
  "goal": "Complete initial designs"
}
GET /api/v1/project/sprints

List sprints with pagination and filtering.

Auth: Bearer token · project.view

Query Parameters
Parameter Type Description
page number Page number
limit number Items per page
projectId number Filter by project
status string Filter by status
GET /api/v1/project/sprints/:id

Get sprint by ID.

Auth: Bearer token · project.view

PUT /api/v1/project/sprints/:id

Update a sprint.

Auth: Bearer token · project.edit

DELETE /api/v1/project/sprints/:id

Delete a sprint.

Auth: Bearer token · project.delete

POST /api/v1/project/sprints/:id/start

Start a sprint.

Auth: Bearer token · project.edit

POST /api/v1/project/sprints/:id/complete

Complete a sprint.

Auth: Bearer token · project.edit

Timesheets

Time tracking with billable hours and billing rate integration.

POST /api/v1/project/timesheets

Log a time entry.

Auth: Bearer token · project.create

Request Body
json
{
  "projectId": 1,
  "taskId": 5,
  "date": "2026-07-10",
  "hours": 4.5,
  "description": "Frontend development",
  "billable": true
}
GET /api/v1/project/timesheets

List time entries with pagination and filtering.

Auth: Bearer token · project.view

Query Parameters
Parameter Type Description
page number Page number
limit number Items per page
projectId number Filter by project
userId number Filter by user
startDate string Filter from date
endDate string Filter to date
billable boolean Filter by billable status
GET /api/v1/project/timesheets/:id

Get time entry by ID.

Auth: Bearer token · project.view

PUT /api/v1/project/timesheets/:id

Update a time entry.

Auth: Bearer token · project.edit

DELETE /api/v1/project/timesheets/:id

Delete a time entry.

Auth: Bearer token · project.delete

POST /api/v1/project/timesheets/:id/approve

Approve a timesheet entry.

Auth: Bearer token · project.manage

POST /api/v1/project/timesheets/:id/reject

Reject a timesheet entry.

Auth: Bearer token · project.manage

Resources

Team member assignment and allocation management.

POST /api/v1/project/resources

Assign a resource to a project.

Auth: Bearer token · project.create

Request Body
json
{
  "projectId": 1,
  "userId": 3,
  "role": "Developer",
  "allocationPercentage": 80,
  "hourlyRate": 75
}
GET /api/v1/project/resources

List resources with pagination and filtering.

Auth: Bearer token · project.view

Query Parameters
Parameter Type Description
page number Page number
limit number Items per page
projectId number Filter by project
userId number Filter by user
GET /api/v1/project/resources/:id

Get resource by ID.

Auth: Bearer token · project.view

PUT /api/v1/project/resources/:id

Update a resource assignment.

Auth: Bearer token · project.edit

DELETE /api/v1/project/resources/:id

Remove a resource from a project.

Auth: Bearer token · project.delete

Billing Rates

Configure billing rates per role for timesheet invoicing.

POST /api/v1/project/billing-rates

Create a billing rate.

Auth: Bearer token · project.manage

Request Body
json
{
  "role": "Senior Developer",
  "hourlyRate": 150,
  "currency": "USD",
  "effectiveFrom": "2026-01-01"
}
GET /api/v1/project/billing-rates

List billing rates with pagination.

Auth: Bearer token · project.view

Query Parameters
Parameter Type Description
page number Page number
limit number Items per page
projectId number Filter by project
GET /api/v1/project/billing-rates/:id

Get billing rate by ID.

Auth: Bearer token · project.view

PUT /api/v1/project/billing-rates/:id

Update a billing rate.

Auth: Bearer token · project.manage

DELETE /api/v1/project/billing-rates/:id

Delete a billing rate.

Auth: Bearer token · project.manage

Expenses

Project expense tracking with Finance module bridge.

POST /api/v1/project/expenses

Create a project expense.

Auth: Bearer token · project.create

Request Body
json
{
  "projectId": 1,
  "category": "software",
  "amount": 299.99,
  "currency": "USD",
  "description": "Design tool subscription",
  "date": "2026-07-01",
  "receiptUrl": "..."
}
GET /api/v1/project/expenses

List expenses with pagination and filtering.

Auth: Bearer token · project.view

Query Parameters
Parameter Type Description
page number Page number
limit number Items per page
projectId number Filter by project
status string Filter by status
category string Filter by category
GET /api/v1/project/expenses/:id

Get expense by ID.

Auth: Bearer token · project.view

PUT /api/v1/project/expenses/:id

Update an expense.

Auth: Bearer token · project.edit

DELETE /api/v1/project/expenses/:id

Delete an expense.

Auth: Bearer token · project.delete

POST /api/v1/project/expenses/:id/approve

Approve an expense (triggers Finance bridge).

Auth: Bearer token · project.manage

POST /api/v1/project/expenses/:id/reject

Reject an expense.

Auth: Bearer token · project.manage