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