Skip to main content

Projects API

The Projects module provides project and task management — create projects, break them into tasks, assign team members, track milestones, and log timesheets. It integrates with Employees, Invoices (billable timesheets), and Helpdesk (ticket-to-task conversion).


Endpoints

MethodPathDescription
GET/api/projectsList projects
POST/api/projectsCreate a project
GET/api/projects/:idGet a project
PATCH/api/projects/:idUpdate a project
DELETE/api/projects/:idArchive a project
GET/api/projects/:id/tasksList tasks for a project
POST/api/projects/:id/tasksCreate a task
GET/api/projects/:id/tasks/:taskIdGet a task
PATCH/api/projects/:id/tasks/:taskIdUpdate a task
POST/api/projects/:id/tasks/:taskId/timesheetsLog time on a task
GET/api/projects/:id/timesheetsProject timesheet summary
GET/api/projects/:id/milestonesList milestones
POST/api/projects/:id/milestonesCreate a milestone

Projects

List Projects

GET /api/projects?status=active&page=1&limit=20

Query Parameters

ParameterTypeDescription
statusactive | on_hold | done | cancelledProject status
contactIdstringFilter by customer contact
managerIdstringFilter by project manager
searchstringSearch by project name

Response

{
"data": [
{
"id": "018e4444-abcd-7000-8000-000000000001",
"name": "Odoo Implementation — Acme Corp",
"status": "active",
"contact": { "id": "...", "name": "Acme Corp" },
"manager": { "id": "...", "name": "Jane PM" },
"startDate": "2026-03-01",
"endDate": "2026-06-30",
"progress": 38,
"tasksTotal": 48,
"tasksDone": 18,
"hoursLogged": 142.5,
"hoursBudget": 400
}
],
"meta": { "total": 12, "page": 1, "limit": 20, "totalPages": 1 }
}

Create a Project

POST /api/projects
Content-Type: application/json

{
"name": "Power BI Dashboard — Globex",
"contactId": "018e1234-abcd-7000-8000-000000000099",
"managerId": "018ecccc-abcd-7000-8000-000000000001",
"startDate": "2026-04-01",
"endDate": "2026-05-31",
"hoursBudget": 120,
"billable": true
}

Tasks

List Tasks

GET /api/projects/018e4444-abcd-7000-8000-000000000001/tasks?status=in_progress&assigneeId=018e...

Task statuses: todo, in_progress, in_review, done, blocked

Response

{
"data": [
{
"id": "018e4444-bbbb-7000-8000-000000000001",
"title": "Configure product catalog sync",
"status": "in_progress",
"assignee": { "id": "...", "name": "Dev Alice" },
"priority": "high",
"dueDate": "2026-03-28T00:00:00Z",
"hoursLogged": 8.5,
"hoursEstimate": 12,
"tags": ["backend", "integration"]
}
],
"meta": { "total": 30, "page": 1, "limit": 20, "totalPages": 2 }
}

Create a Task

POST /api/projects/018e4444-abcd-7000-8000-000000000001/tasks
Content-Type: application/json

{
"title": "Set up Odoo database",
"description": "Install PostgreSQL, configure parameters, restore demo data.",
"assigneeId": "018ecccc-abcd-7000-8000-000000000001",
"priority": "high",
"dueDate": "2026-04-05T00:00:00Z",
"hoursEstimate": 4,
"tags": ["setup", "database"]
}

Timesheets

Log Time

POST /api/projects/018e4444-abcd-7000-8000-000000000001/tasks/018e4444-bbbb-7000-8000-000000000001/timesheets
Content-Type: application/json

{
"employeeId": "018ecccc-abcd-7000-8000-000000000001",
"date": "2026-03-20",
"hours": 3.5,
"description": "Implemented product sync endpoint"
}

Project Timesheet Summary

GET /api/projects/018e4444-abcd-7000-8000-000000000001/timesheets?from=2026-03-01&to=2026-03-31
{
"totalHours": 142.5,
"billableHours": 130,
"budget": 400,
"utilizationPercent": 35.6,
"byEmployee": [
{ "employeeId": "...", "name": "Dev Alice", "hours": 65 },
{ "employeeId": "...", "name": "PM Jane", "hours": 77.5 }
]
}

Milestones

POST /api/projects/018e4444-abcd-7000-8000-000000000001/milestones
Content-Type: application/json

{
"name": "Phase 1 — Setup Complete",
"targetDate": "2026-04-15T00:00:00Z"
}

Mark as reached:

PATCH /api/projects/018e4444-abcd-7000-8000-000000000001/milestones/MILESTONE_ID
Content-Type: application/json

{ "reached": true, "reachedDate": "2026-04-14T00:00:00Z" }

Status Codes

CodeScenario
200Get or list succeeded
201Project, task, timesheet, or milestone created
204Project archived
400Hours logged exceed daily limit (24 hours)
404Project or task not found
422Invalid date range or missing required field