You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Post a comment on a task. Body: { content, mentions?, authorId?, authorType?, replyTo? }. replyTo is a comment ID for structural reply linking.
POST
/api/requirements/:id/comments
Post a comment on a requirement. Body: { content, mentions?, authorId?, authorType?, replyTo? }. replyTo is a comment ID for structural reply linking.
Teams
Method
Path
Description
GET
/api/teams
List teams
POST
/api/teams
Create team
GET
/api/teams/:id
Get team details
PUT
/api/teams/:id
Update team
DELETE
/api/teams/:id
Delete team
Governance & System Control
Method
Path
Description
GET
/api/system/status
Global status (paused/emergency mode)
POST
/api/system/pause-all
Pause all agents
POST
/api/system/resume-all
Resume all agents
POST
/api/system/emergency-stop
Emergency stop
GET
/api/system/storage
Disk usage: org breakdown + per-agent buckets (see note)
GET
/api/system/storage/orphans
Detect orphaned agent/team directories
DELETE
/api/system/storage/orphans
Purge orphaned directories (invalidates the storage cache)
GET
/api/system/announcements
Get system announcements
POST
/api/system/announcements
Create system announcement
GET
/api/governance/policy
View governance policy
PUT
/api/governance/policy
Update governance policy
Reading /api/system/storage. Each agents[].subItems entry is a real
top-level directory of that agent's home, named as it exists on disk
(sessions, workspace, tool-outputs, …) — labels are never rewritten, so a
label cannot drift from what it measured. agents[].size is the total of the
directory, complete in breadth.
size and every bucket are depth-bounded and therefore a lower bound,
not an exact figure: agents[].depthLimited is true when the walk hit its cap
and bytes were left uncounted. This is deliberate — an unbounded walk of the
live org (106 agents) exceeds 60 s, and the handler runs synchronously, so an
uncached call would block the event loop (and therefore chat SSE streams) for
seconds. Results are cached for 30 s. See packages/org-manager/src/storage-usage.ts
for the measurements behind the cap.
Projects
Method
Path
Description
GET
/api/projects
List projects
POST
/api/projects
Create project
GET
/api/projects/:id
Get project
PUT
/api/projects/:id
Update project
DELETE
/api/projects/:id
Delete project
Delivery & Review
Method
Path
Description
POST
/api/tasks/:id/accept
Accept task delivery
POST
/api/tasks/:id/revision
Request revision
POST
/api/tasks/:id/archive
Archive task
Reports & Knowledge
Method
Path
Description
GET
/api/reports
List reports
POST
/api/reports/generate
Trigger report generation
GET
/api/reports/:id
Report details
POST
/api/reports/:id/plan/approve
Approve plan
POST
/api/reports/:id/plan/reject
Reject plan
GET
/api/reports/:id/feedback
Get report feedback
POST
/api/reports/:id/feedback
Create report feedback
POST
/api/knowledge
Contribute knowledge
GET
/api/knowledge/search
Search knowledge base
Users
Method
Path
Description
GET
/api/users
List human users (includes hasJoined flag)
POST
/api/users
Create human user { name, email, role } — returns invite token
PATCH
/api/users/:id
Update user (name, role, email)
POST
/api/users/:id/reset-password
Admin password reset
DELETE
/api/users/:id
Delete user
Invite Flow
Method
Path
Description
GET
/api/auth/invite/:token
Validate invite token — returns user info (name, email)
POST
/api/auth/invite/:token/setup
Complete registration { password, name?, email? }
Group Chats
Method
Path
Description
GET
/api/group-chats
List group chats for current user
POST
/api/group-chats
Create custom group chat { name, memberIds: [{id, type}] }
GET
/api/group-chats/:id
Get group chat details (includes members)
PATCH
/api/group-chats/:id
Update group chat (name, add/remove members)
DELETE
/api/group-chats/:id
Delete group chat
POST
/api/group-chats/:id/members
Add member { userId, userType, userName }
DELETE
/api/group-chats/:id/members/:userId
Remove member
Notifications
Method
Path
Description
GET
/api/notifications
List notifications for current user (supports ?unreadOnly=true&limit=N&offset=N&type=T)
GET
/api/notifications/count
Get unread notification count
POST
/api/notifications/:id/read
Mark a single notification as read
POST
/api/notifications/read-all
Mark all notifications as read
Roles
Method
Path
Description
GET
/api/roles
List available role templates
GET
/api/roles/:name
Get role template details
Settings
Method
Path
Description
GET
/api/settings/agent
Get agent runtime settings
POST
/api/settings/agent
Update agent runtime settings
POST /api/settings/agent
Persists agent settings to markus.json.
Body:
{
"maxToolIterations": 25
}
Field
Type
Description
maxToolIterations
number
Max tool-call loops per agent turn
Requirements & Goals
Requirements may include an optional goalConfig when acting as a persistent goal: