API Endpoints

All endpoints use the base URL https://projects.cyrus365.com/api/v1.


Projects

MethodPathScopeDescription
GET/projectsprojects.readList accessible projects
GET/projects/:idprojects.read or bound project keyGet project detail

GET /projects

Query parameters:

ParamTypeDescription
statusstringFilter: ACTIVE, PLANNING, PAUSED, COMPLETED, ARCHIVED
pagenumberPage number (default 1)
perPagenumberItems per page (default 50, max 200)

GET /projects/:id

Query parameters:

ParamTypeDescription
includestringComma-separated: tasks, stats, all
taskPagenumberSub-page for included tasks
taskPerPagenumberTasks per sub-page

Tasks

MethodPathScopeDescription
GET/projects/:id/taskstasks.readList tasks with filters
POST/projects/:id/taskstasks.writeCreate a task
GET/projects/:id/tasks/:taskIdtasks.readGet task detail
PATCH/projects/:id/tasks/:taskIdtasks.writeUpdate a task
PATCH/projects/:id/tasks/:taskId/reordertasks.writeMove or reorder a task
DELETE/projects/:id/tasks/:taskIdtasks.writeDelete a task

GET /projects/:id/tasks

ParamTypeDescription
statusstringComma-separated: TODO, IN_PROGRESS, REVIEW, DONE, CLOSED
prioritystringComma-separated: LOW, MEDIUM, HIGH, URGENT
assigneeIdstringFilter by assignee user ID
sprintIdstringFilter by sprint (null for unassigned)
groupIdstringFilter by group (null for drafts)
updatedSincestringISO 8601 date — only tasks updated after this time
searchstringText search in title and description
pagenumberPage number
perPagenumberItems per page (max 200)

POST /projects/:id/tasks

{
    "title": "Design login page",
    "description": "Mobile-first responsive design",
    "status": "TODO",
    "priority": "HIGH",
    "groupId": "group_id",
    "sprintId": "sprint_id",
    "startDate": "2025-02-01",
    "dueDate": "2025-02-15",
    "color": "#3b82f6",
    "assigneeIds": ["user_id_1", "user_id_2"]
}
FieldRequiredDescription
titleYesTask title
descriptionOptional description
statusTODO (default), IN_PROGRESS, REVIEW, DONE, CLOSED
priorityMEDIUM (default), LOW, HIGH, URGENT
groupIdTarget group (null = drafts)
sprintIdSprint assignment (null = unassigned)
startDateISO date
dueDateISO date
colorHex color string
assigneeIdsArray of user IDs

PATCH /projects/:id/tasks/:taskId

All fields are optional — only provided fields are updated.

{
    "title": "Updated title",
    "status": "IN_PROGRESS",
    "priority": "URGENT",
    "groupId": "new_group_id",
    "sprintId": "new_sprint_id",
    "assigneeIds": ["user_id_1"]
}

PATCH /projects/:id/tasks/:taskId/reorder

Move a task to Drafts or to a group/sprint position. Send the target context and optional neighbor task IDs; the API generates the ordering key server-side.

{
    "targetGroupId": "group_id",
    "targetSprintId": "sprint_id",
    "insertAfterTaskId": "task_before_id",
    "insertBeforeTaskId": "task_after_id"
}

Set both targetGroupId and targetSprintId to null to move the task to Drafts. Omit both neighbor fields to append to the end of the target context.


Subtasks

MethodPathScopeDescription
GET/projects/:id/tasks/:taskId/subtaskstasks.readList subtasks
POST/projects/:id/tasks/:taskId/subtaskstasks.writeCreate subtask

Comments

MethodPathScopeDescription
GET/projects/:id/tasks/:taskId/commentscomments.readList comments
POST/projects/:id/tasks/:taskId/commentscomments.writeCreate comment

Activity Logs

MethodPathScopeDescription
GET/projects/:id/tasks/:taskId/logsactivity.readTask activity history

Sprints

MethodPathScopeDescription
GET/projects/:id/sprintssprints.readList sprints
POST/projects/:id/sprintssprints.writeCreate sprint
GET/projects/:id/sprints/:sprintIdsprints.readGet sprint detail
PATCH/projects/:id/sprints/:sprintIdsprints.writeUpdate sprint
DELETE/projects/:id/sprints/:sprintIdsprints.writeDelete sprint

POST /projects/:id/sprints

{
    "name": "Sprint 3",
    "startDate": "2025-01-20",
    "endDate": "2025-02-03",
    "status": "PLANNING",
    "orderKey": 3
}
FieldRequiredDescription
nameYesSprint name
startDateISO date
endDateISO date
statusPLANNING (default), ACTIVE, COMPLETED
orderKeyNumeric ordering value; omitted values append to the end

PATCH /projects/:id/sprints/:sprintId

All fields are optional. Supported fields: name, startDate, endDate, status, orderKey, lockLevel.

DELETE /projects/:id/sprints/:sprintId

Deleting a sprint moves its tasks back to the backlog (sprint assignment set to null). The last sprint in a project cannot be deleted.


Groups

MethodPathScopeDescription
GET/projects/:id/groupsgroups.readList groups (Kanban columns)
POST/projects/:id/groupsgroups.writeCreate group
GET/projects/:id/groups/:groupIdgroups.readGet group detail
PATCH/projects/:id/groups/:groupIdgroups.writeUpdate group
DELETE/projects/:id/groups/:groupIdgroups.writeDelete group

PATCH /projects/:id/groups/:groupId

All fields are optional. Supported fields: name, color, orderKey.

Deleting a group also deletes the tasks in that group.


Members

MethodPathScopeDescription
GET/projects/:id/membersmembers.readList project members
Member responses include membership fields (id, userId, role, autoAdded, createdAt) plus display profile fields when available: name, email, avatarUrl, and avatarConfig. Use userId when assigning tasks through assigneeIds.

Tags

MethodPathScopeDescription
GET/projects/:id/tagstags.readList tags (hierarchical)
POST/projects/:id/tagstags.writeCreate project tag

Calendar Events

MethodPathScopeDescription
GET/projects/:id/calendar-eventscalendar.readList calendar events
POST/projects/:id/calendar-eventscalendar.writeCreate calendar event
GET/projects/:id/calendar-events/:eventIdcalendar.readGet calendar event detail
PATCH/projects/:id/calendar-events/:eventIdcalendar.writeUpdate calendar event
DELETE/projects/:id/calendar-events/:eventIdcalendar.writeDelete calendar event

POST /projects/:id/calendar-events

{
    "title": "Launch Readiness Review",
    "description": "Final go/no-go checkpoint",
    "date": "2026-03-20T09:00:00.000Z",
    "type": "MILESTONE",
    "color": "#3b82f6",
    "taskIds": ["task_1", "task_2"]
}
FieldRequiredDescription
titleYesEvent title
descriptionOptional description
dateYesISO 8601 date-time
typeDEADLINE, MILESTONE, PRESENTATION, MEETING, REVIEW, RELEASE, OTHER
colorOptional hex color override
taskIdsOptional array of linked task IDs in the same project

PATCH /projects/:id/calendar-events/:eventId

All fields are optional. If taskIds is provided, it replaces the current linked task set.


Related