All. Done API (1.4.2)

Download OpenAPI specification:

Backend API for collaborative project management with JWT auth, file storage, full-text search, AI-powered task suggestions, automated releases, and dual npm publishing.

Authentication

All endpoints require JWT authentication via Authorization: Bearer <token> header, except the following public endpoints:

  • /auth/login - User login
  • /health - Health check
  • / - Root endpoint

Standard Error Responses

  • 401 Unauthorized: Missing or invalid JWT token
  • 403 Forbidden: Valid token but insufficient permissions
  • 404 Not Found: Resource does not exist
  • 422 Validation Error: Invalid request parameters or body
  • 429 Too Many Requests: Rate limit exceeded (AI endpoints, bulk operations)

Pagination

All list endpoints use cursor-based pagination with ULID cursors:

  • page[size]: Number of items (1-200, default 50)
  • page[after]: ULID cursor for next page

Response format:

{
  "data": [...],
  "pagination": {
    "next_cursor": "01HQXXXXXXXXXXXXXXXXXXXXXX",
    "has_more": true,
    "size": 50
  }
}

Timestamps

All timestamps are UTC in ISO 8601 format with Z timezone (e.g., 2025-10-09T14:30:00Z)

Idempotency

Bulk operations and file uploads support the Idempotency-Key header (optional but recommended):

  • POST /tasks:bulk
  • POST /files/versions

Use a unique ULID or UUID to prevent duplicate operations on retry.

health

Health check and API metadata

auth

Authentication (login, register, password reset, tokens)

Login

User login

Request Body schema: application/json
required
email
required
string (Email)
password
required
string (Password)

Responses

Request samples

Content type
application/json
{
  • "email": "string",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "access": "string",
  • "refresh": "string",
  • "user": {
    }
}

Refresh Token

Refresh access token

Request Body schema: application/json
required
refresh
required
string (Refresh)

Responses

Request samples

Content type
application/json
{
  • "refresh": "string"
}

Response samples

Content type
application/json
{
  • "access": "string"
}

Logout

User logout (soft blacklist - optional implementation)

Authorizations:
HTTPBearer

Responses

Response samples

Content type
application/json
null

Register

Public user registration endpoint

Creates a new regular user account (non-admin). Email must be unique.

Request Body schema: application/json
required
name
required
string (Name)
email
required
string <email> (Email)
password
required
string (Password)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "id": "string",
  • "avatar": "string",
  • "is_admin": true,
  • "is_active": true,
  • "last_login_at": "2025-10-09T14:30:00Z",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Forgot Password

Request password reset

Generates a reset token and returns it. In production, this would send an email instead of returning the token.

Request Body schema: application/json
required
email
required
string <email> (Email)

Email address of the user

Responses

Request samples

Content type
application/json
{
  • "email": "user@example.com"
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "email": "string"
}

Reset Password

Reset password with token

Uses the token from forgot-password to set a new password.

Request Body schema: application/json
required
token
required
string (Token) non-empty

Password reset token

new_password
required
string (New Password) >= 6 characters

New password (min 6 characters)

Responses

Request samples

Content type
application/json
{
  • "token": "string",
  • "new_password": "string"
}

Response samples

Content type
application/json
{
  • "message": "string"
}

users

User management, profile, dashboard, search

Get Current User

Get current user information

Authorizations:
HTTPBearer

Responses

Response samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "id": "string",
  • "avatar": "string",
  • "is_admin": true,
  • "is_active": true,
  • "last_login_at": "2025-10-09T14:30:00Z",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Delete Own Account

Delete own account

Authorizations:
HTTPBearer

Responses

Update Profile

Update own profile (name, avatar)

Authorizations:
HTTPBearer
Request Body schema: application/json
required
Name (string) or Name (null) (Name)
Avatar (string) or Avatar (null) (Avatar)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "avatar": "string"
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "id": "string",
  • "avatar": "string",
  • "is_admin": true,
  • "is_active": true,
  • "last_login_at": "2025-10-09T14:30:00Z",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Update Own Password

Change own password (requires old password)

Authorizations:
HTTPBearer
Request Body schema: application/json
required
old_password
required
string (Old Password) >= 6 characters
new_password
required
string (New Password) >= 6 characters

Responses

Request samples

Content type
application/json
{
  • "old_password": "string",
  • "new_password": "string"
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "id": "string",
  • "avatar": "string",
  • "is_admin": true,
  • "is_active": true,
  • "last_login_at": "2025-10-09T14:30:00Z",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Get Dashboard

Get user dashboard with statistics

Authorizations:
HTTPBearer

Responses

Response samples

Content type
application/json
{
  • "user": {
    },
  • "stats": {
    }
}

List Sessions

List all active sessions for current user

Authorizations:
HTTPBearer

Responses

Response samples

Content type
application/json
[
  • {
    }
]

Revoke All Sessions

Revoke all sessions except current one

Authorizations:
HTTPBearer

Responses

Revoke Session

Revoke a specific session

Authorizations:
HTTPBearer
path Parameters
session_id
required
string (Session Id)

Responses

[Admin] Search users

Admin-only: Search and filter users with advanced criteria

Authorizations:
HTTPBearer
query Parameters
Q (string) or Q (null) (Q)

Search query (name or email)

Is Admin (boolean) or Is Admin (null) (Is Admin)

Filter by admin status

Is Active (boolean) or Is Active (null) (Is Active)

Filter by active status

sort_by
string (Sort By)
Default: "created_at"

Sort field: name, email, created_at

sort_order
string (Sort Order)
Default: "desc"

Sort order: asc, desc

size
integer (Size) [ 1 .. 200 ]
Default: 50
After (string) or After (null) (After)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

[Admin] Activate user

Admin-only: Activate a deactivated user account

Authorizations:
HTTPBearer
path Parameters
user_id
required
string (User Id)

Responses

Response samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "id": "string",
  • "avatar": "string",
  • "is_admin": true,
  • "is_active": true,
  • "last_login_at": "2025-10-09T14:30:00Z",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

[Admin] Deactivate user

Admin-only: Deactivate a user account (soft delete)

Authorizations:
HTTPBearer
path Parameters
user_id
required
string (User Id)

Responses

Response samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "id": "string",
  • "avatar": "string",
  • "is_admin": true,
  • "is_active": true,
  • "last_login_at": "2025-10-09T14:30:00Z",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

[Admin] Import users

Admin-only: Bulk import users from JSON

Authorizations:
HTTPBearer
Request Body schema: application/json
required
required
Array of objects (Users) [ 1 .. 1000 ] items

List of users to import (1-1000)

Responses

Request samples

Content type
application/json
{
  • "users": [
    ]
}

Response samples

Content type
application/json
{
  • "created": [
    ],
  • "failed": [
    ],
  • "total": 0,
  • "success_count": 0,
  • "failure_count": 0
}

[Admin] Export users

Admin-only: Export all users to JSON or CSV

Authorizations:
HTTPBearer
query Parameters
format
string (UserExportFormat)
Default: "json"
Enum: "json" "csv"

Export format options

Responses

Response samples

Content type
application/json
null

[Admin] Create a new user

Admin-only: Create a new user with optional admin privileges

Authorizations:
HTTPBearer
Request Body schema: application/json
required
name
required
string (Name)
email
required
string <email> (Email)
password
required
string (Password)
Is Admin (boolean) or Is Admin (null) (Is Admin)
Default: false

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "password": "string",
  • "is_admin": false
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "id": "string",
  • "avatar": "string",
  • "is_admin": true,
  • "is_active": true,
  • "last_login_at": "2025-10-09T14:30:00Z",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

[Admin] List all users

Admin-only: List all users with cursor-based pagination

Authorizations:
HTTPBearer
query Parameters
size
integer (Size) [ 1 .. 200 ]
Default: 50
After (string) or After (null) (After)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

[Admin] Get user by ID

Admin-only: Get detailed information about a specific user

Authorizations:
HTTPBearer
path Parameters
user_id
required
string (User Id)

Responses

Response samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "id": "string",
  • "avatar": "string",
  • "is_admin": true,
  • "is_active": true,
  • "last_login_at": "2025-10-09T14:30:00Z",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

[Admin] Update user

Admin-only: Update user information (name, email, avatar, admin status)

Authorizations:
HTTPBearer
path Parameters
user_id
required
string (User Id)
Request Body schema: application/json
required
Name (string) or Name (null) (Name)
Email (string) or Email (null) (Email)
Avatar (string) or Avatar (null) (Avatar)
Is Admin (boolean) or Is Admin (null) (Is Admin)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "avatar": "string",
  • "is_admin": true
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "id": "string",
  • "avatar": "string",
  • "is_admin": true,
  • "is_active": true,
  • "last_login_at": "2025-10-09T14:30:00Z",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

[Admin] Delete user

Admin-only: Permanently delete a user and all their data

Authorizations:
HTTPBearer
path Parameters
user_id
required
string (User Id)

Responses

[Admin] Update user password

Admin-only: Change a user's password

Authorizations:
HTTPBearer
path Parameters
user_id
required
string (User Id)
Request Body schema: application/json
required
password
required
string (Password) >= 6 characters

New password (min 6 characters)

Responses

Request samples

Content type
application/json
{
  • "password": "string"
}

Response samples

Content type
application/json
{
  • "name": "string",
  • "email": "user@example.com",
  • "id": "string",
  • "avatar": "string",
  • "is_admin": true,
  • "is_active": true,
  • "last_login_at": "2025-10-09T14:30:00Z",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

admin

Admin endpoints (audit logs, user management)

[Admin] List audit logs

Admin-only: View audit trail of all admin actions

Authorizations:
HTTPBearer
query Parameters
size
integer (Size) [ 1 .. 200 ]
Default: 50
After (string) or After (null) (After)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

teams

Team management and membership

Create Team

Create a new team

Authorizations:
HTTPBearer
Request Body schema: application/json
required
name
required
string (Name)

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "created_at": "2025-10-09T14:30:00Z"
}

List Teams

List user's teams with pagination.

Returns all teams where the current user is a member.

Authorizations:
HTTPBearer
query Parameters
size
integer (Size) [ 1 .. 200 ]
Default: 50
After (string) or After (null) (After)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Add Team Member

Add member to team

Authorizations:
HTTPBearer
path Parameters
team_id
required
string (Team Id)
Request Body schema: application/json
required
user_id
required
string (User Id)
role
required
string (Role)

Responses

Request samples

Content type
application/json
{
  • "user_id": "string",
  • "role": "string"
}

Response samples

Content type
application/json
null

List Team Members

List team members with pagination.

Returns all members of the specified team.

Authorizations:
HTTPBearer
path Parameters
team_id
required
string (Team Id)
query Parameters
size
integer (Size) [ 1 .. 200 ]
Default: 50
After (string) or After (null) (After)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Remove Team Member

Remove member from team

Authorizations:
HTTPBearer
path Parameters
team_id
required
string (Team Id)
user_id
required
string (User Id)

Responses

Get Team

Get team details

Authorizations:
HTTPBearer
path Parameters
team_id
required
string (Team Id)

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "created_at": "2025-10-09T14:30:00Z"
}

Update Team

Update team

Authorizations:
HTTPBearer
path Parameters
team_id
required
string (Team Id)
Request Body schema: application/json
required
Name (string) or Name (null) (Name)

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "created_at": "2025-10-09T14:30:00Z"
}

Delete Team

Delete team

Authorizations:
HTTPBearer
path Parameters
team_id
required
string (Team Id)

Responses

Update Team Member Role

Update team member role

Authorizations:
HTTPBearer
path Parameters
team_id
required
string (Team Id)
member_id
required
string (Member Id)
Request Body schema: application/json
required
Role (string) or Role (null) (Role)

Responses

Request samples

Content type
application/json
{
  • "role": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "team_id": "string",
  • "user_id": "string",
  • "role": "string"
}

workspaces

Workspace management and ACL

Create Workspace

Create a new workspace

Authorizations:
HTTPBearer
Request Body schema: application/json
required
name
required
string (Name)
Key (string) or Key (null) (Key)
Settings (object) or Settings (null) (Settings)

Responses

Request samples

Content type
application/json
{
  • "key": "MYCO",
  • "name": "My Company Workspace",
  • "settings": {
    }
}

Response samples

Content type
application/json
{
  • "id": "01HQXXXXXXXXXXXXXXXXXXXXXX",
  • "name": "My Company Workspace",
  • "key": "MYCO",
  • "settings_json": "{\"theme\": \"dark\", \"notifications\": true}",
  • "created_at": "2025-10-09T10:00:00Z",
  • "updated_at": "2025-10-09T10:00:00Z"
}

List Workspaces

List workspaces with cursor-based pagination.

Use filter[member]=me to list only workspaces where current user is a member.

Authorizations:
HTTPBearer
query Parameters
Filter[Member] (string) or Filter[Member] (null) (Filter[Member])
page[size]
integer (Page[Size]) [ 1 .. 200 ]
Default: 50
Page[After] (string) or Page[After] (null) (Page[After])

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Get Workspace

Get workspace details

Authorizations:
HTTPBearer
path Parameters
workspace_id
required
string (Workspace Id)

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "key": "string",
  • "settings_json": "string",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Update Workspace

Update workspace

Authorizations:
HTTPBearer
path Parameters
workspace_id
required
string (Workspace Id)
Request Body schema: application/json
required
Name (string) or Name (null) (Name)
Settings (object) or Settings (null) (Settings)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "settings": { }
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "name": "string",
  • "key": "string",
  • "settings_json": "string",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Delete Workspace

Delete workspace

Authorizations:
HTTPBearer
path Parameters
workspace_id
required
string (Workspace Id)

Responses

List Workspace Principals

List all principals (access control entries) for a workspace.

Returns users and teams with their roles (viewer, member, admin, owner).

Example Response:

{
  "data": [
    {
      "id": "01HQX1A2B3C4D5E6F7G8H9J0K1",
      "workspace_id": "01HQY...",
      "principal_type": "user",
      "principal_id": "01HQZ...",
      "role": "owner",
      "created_at": "2025-10-09T10:00:00Z"
    }
  ],
  "pagination": {
    "next_cursor": "01HQX1A2B3C4D5E6F7G8H9J0K1",
    "has_more": true,
    "size": 50
  }
}
Authorizations:
HTTPBearer
path Parameters
workspace_id
required
string (Workspace Id)
query Parameters
page[size]
integer (Page[Size]) [ 1 .. 200 ]
Default: 50
Page[After] (string) or Page[After] (null) (Page[After])

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Add Workspace Principal

Add principal to workspace

Authorizations:
HTTPBearer
path Parameters
workspace_id
required
string (Workspace Id)
Request Body schema: application/json
required
principal_type
required
string (Principal Type)

Type of principal (user or team)

principal_id
required
string (Principal Id)

ULID of user or team

role
required
string (Role)

Role (viewer, member, admin, owner)

Responses

Request samples

Content type
application/json
{
  • "principal_type": "string",
  • "principal_id": "string",
  • "role": "string"
}

Response samples

Content type
application/json
null

Update Workspace Principal

Update workspace principal role

Authorizations:
HTTPBearer
path Parameters
workspace_id
required
string (Workspace Id)
principal_id
required
string (Principal Id)
Request Body schema: application/json
required
role
required
string (Role)

New role for the principal

Responses

Request samples

Content type
application/json
{
  • "role": "string"
}

Response samples

Content type
application/json
null

Delete Workspace Principal

Remove principal from workspace

Authorizations:
HTTPBearer
path Parameters
workspace_id
required
string (Workspace Id)
principal_id
required
string (Principal Id)

Responses

projects

Project management and ACL

Create Project

Create a new project

Authorizations:
HTTPBearer
Request Body schema: application/json
required
workspace_id
required
string (Workspace Id)
name
required
string (Name)
Code (string) or Code (null) (Code)
Start At (string) or Start At (null) (Start At)
End At (string) or End At (null) (End At)
Description (string) or Description (null) (Description)

Responses

Request samples

Content type
application/json
{
  • "code": "WEB-2025",
  • "description": "Complete redesign of company website with new branding",
  • "end_at": "2025-12-31T23:59:59Z",
  • "name": "Website Redesign",
  • "start_at": "2025-10-15T00:00:00Z",
  • "workspace_id": "01HQXXXXXXXXXXXXXXXXXXXXXX"
}

Response samples

Content type
application/json
{
  • "id": "01HQXXXXXXXXXXXXXXXXXXXXXX",
  • "workspace_id": "01HQYYYYYYYYYYYYYYYYYYYY",
  • "name": "Website Redesign",
  • "code": "WEB-2025",
  • "status": "active",
  • "start_at": "2025-10-15T00:00:00Z",
  • "end_at": "2025-12-31T23:59:59Z",
  • "description": "Complete redesign of company website",
  • "created_at": "2025-10-09T10:00:00Z",
  • "updated_at": "2025-10-09T10:00:00Z"
}

List Projects

List projects with cursor-based pagination.

Use filter[workspaceId] to list projects in a specific workspace. Use filter[status] to filter by project status.

Authorizations:
HTTPBearer
query Parameters
Filter[Workspaceid] (string) or Filter[Workspaceid] (null) (Filter[Workspaceid])
Filter[Status] (string) or Filter[Status] (null) (Filter[Status])
page[size]
integer (Page[Size]) [ 1 .. 200 ]
Default: 50
Page[After] (string) or Page[After] (null) (Page[After])

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Get Project

Get project details

Authorizations:
HTTPBearer
path Parameters
project_id
required
string (Project Id)

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "workspace_id": "string",
  • "name": "string",
  • "code": "string",
  • "status": "string",
  • "start_at": "string",
  • "end_at": "string",
  • "manager_id": "string",
  • "description": "string",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Update Project

Update project

Authorizations:
HTTPBearer
path Parameters
project_id
required
string (Project Id)
Request Body schema: application/json
required
Name (string) or Name (null) (Name)
Code (string) or Code (null) (Code)
Status (string) or Status (null) (Status)
Start At (string) or Start At (null) (Start At)
End At (string) or End At (null) (End At)
Manager Id (string) or Manager Id (null) (Manager Id)
Description (string) or Description (null) (Description)

Responses

Request samples

Content type
application/json
{
  • "name": "string",
  • "code": "string",
  • "status": "string",
  • "start_at": "string",
  • "end_at": "string",
  • "manager_id": "string",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "workspace_id": "string",
  • "name": "string",
  • "code": "string",
  • "status": "string",
  • "start_at": "string",
  • "end_at": "string",
  • "manager_id": "string",
  • "description": "string",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Delete Project

Delete project

Authorizations:
HTTPBearer
path Parameters
project_id
required
string (Project Id)

Responses

List Project Principals

List all principals (access control entries) for a project.

Returns users and teams with their roles (maintainer, contributor, guest).

Example Response:

{
  "data": [
    {
      "id": "01HQX1A2B3C4D5E6F7G8H9J0K1",
      "project_id": "01HQY...",
      "principal_type": "user",
      "principal_id": "01HQZ...",
      "role": "maintainer",
      "created_at": "2025-10-09T10:00:00Z"
    }
  ],
  "pagination": {
    "next_cursor": "01HQX1A2B3C4D5E6F7G8H9J0K1",
    "has_more": false,
    "size": 1
  }
}
Authorizations:
HTTPBearer
path Parameters
project_id
required
string (Project Id)
query Parameters
page[size]
integer (Page[Size]) [ 1 .. 200 ]
Default: 50
Page[After] (string) or Page[After] (null) (Page[After])

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Add Project Principal

Add principal to project

Authorizations:
HTTPBearer
path Parameters
project_id
required
string (Project Id)
Request Body schema: application/json
required
principal_type
required
string (Principal Type)

Type of principal (user or team)

principal_id
required
string (Principal Id)

ULID of user or team

role
required
string (Role)

Role (viewer, member, admin, owner)

Responses

Request samples

Content type
application/json
{
  • "principal_type": "string",
  • "principal_id": "string",
  • "role": "string"
}

Response samples

Content type
application/json
null

Update Project Principal

Update project principal role

Authorizations:
HTTPBearer
path Parameters
project_id
required
string (Project Id)
principal_id
required
string (Principal Id)
Request Body schema: application/json
required
role
required
string (Role)

New role for the principal

Responses

Request samples

Content type
application/json
{
  • "role": "string"
}

Response samples

Content type
application/json
null

Delete Project Principal

Remove principal from project

Authorizations:
HTTPBearer
path Parameters
project_id
required
string (Project Id)
principal_id
required
string (Principal Id)

Responses

wbs

Work Breakdown Structure (WBS) nodes

Create Wbs

Create a new WBS node

Authorizations:
HTTPBearer
Request Body schema: application/json
required
project_id
required
string (Project Id)
Parent Id (string) or Parent Id (null) (Parent Id)
type
required
string (Type)
name
required
string (Name)

Responses

Request samples

Content type
application/json
{
  • "name": "Planning",
  • "project_id": "01HQXXXXXXXXXXXXXXXXXXXXXX",
  • "type": "phase"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "project_id": "string",
  • "parent_id": "string",
  • "type": "string",
  • "name": "string",
  • "wbs_index": "string",
  • "owner_id": "string",
  • "estimate_hours": 0,
  • "status": "string",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

List Wbs

List WBS nodes with cursor-based pagination.

Default sort is by wbs_index for hierarchical order (1, 1.1, 1.1.1, 1.2, 2, ...).

Authorizations:
HTTPBearer
query Parameters
Filter[Projectid] (string) or Filter[Projectid] (null) (Filter[Projectid])
Sort (string) or Sort (null) (Sort)
Default: "wbs_index"

Sort field (default: wbs_index for hierarchical order)

page[size]
integer (Page[Size]) [ 1 .. 200 ]
Default: 50
Page[After] (string) or Page[After] (null) (Page[After])

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Get Wbs

Get WBS node details

Authorizations:
HTTPBearer
path Parameters
wbs_id
required
string (Wbs Id)

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "project_id": "string",
  • "parent_id": "string",
  • "type": "string",
  • "name": "string",
  • "wbs_index": "string",
  • "owner_id": "string",
  • "estimate_hours": 0,
  • "status": "string",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Update Wbs

Update WBS node

Authorizations:
HTTPBearer
path Parameters
wbs_id
required
string (Wbs Id)
Request Body schema: application/json
required
Parent Id (string) or Parent Id (null) (Parent Id)
Name (string) or Name (null) (Name)
Status (string) or Status (null) (Status)
Owner Id (string) or Owner Id (null) (Owner Id)
Estimate Hours (number) or Estimate Hours (null) (Estimate Hours)

Responses

Request samples

Content type
application/json
{
  • "parent_id": "string",
  • "name": "string",
  • "status": "string",
  • "owner_id": "string",
  • "estimate_hours": 0
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "project_id": "string",
  • "parent_id": "string",
  • "type": "string",
  • "name": "string",
  • "wbs_index": "string",
  • "owner_id": "string",
  • "estimate_hours": 0,
  • "status": "string",
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Delete Wbs

Delete WBS node

Authorizations:
HTTPBearer
path Parameters
wbs_id
required
string (Wbs Id)

Responses

tasks

Task management with views (board, tree, calendar, gantt)

Create Task

Create a new task

Authorizations:
HTTPBearer
Request Body schema: application/json
required
project_id
required
string (Project Id)
wbs_id
required
string (Wbs Id)
title
required
string (Title)
Description (string) or Description (null) (Description)
Assignee Id (string) or Assignee Id (null) (Assignee Id)
Estimate Hours (number) or Estimate Hours (null) (Estimate Hours)
Default: 0
TaskState (string) or null
TaskPriority (string) or null
Start At (string) or Start At (null) (Start At)
Due At (string) or Due At (null) (Due At)
Array of Visible In Views (strings) or Visible In Views (null) (Visible In Views)
Percent Done (number) or Percent Done (null) (Percent Done)
Default: 0

Responses

Request samples

Content type
application/json
{
  • "assignee_id": "01HQZZZZZZZZZZZZZZZZZZZZZ",
  • "description": "Add JWT-based authentication with login/logout",
  • "due_at": "2025-10-12T17:00:00Z",
  • "estimate_hours": 8,
  • "priority": "high",
  • "project_id": "01HQXXXXXXXXXXXXXXXXXXXXXX",
  • "start_at": "2025-10-10T09:00:00Z",
  • "state": "todo",
  • "title": "Implement user authentication",
  • "wbs_id": "01HQYYYYYYYYYYYYYYYYYYYY"
}

Response samples

Content type
application/json
{
  • "id": "01HQXXXXXXXXXXXXXXXXXXXXXX",
  • "project_id": "01HQYYYYYYYYYYYYYYYYYYYY",
  • "wbs_id": "01HQZZZZZZZZZZZZZZZZZZZZZ",
  • "title": "Implement user authentication",
  • "description": "Add JWT-based authentication with login/logout",
  • "assignee_id": "01HQAAAAAAAAAAAAAAAAAAAAA",
  • "estimate_hours": 8,
  • "remaining_hours": 8,
  • "state": "todo",
  • "priority": "high",
  • "start_at": "2025-10-10T09:00:00Z",
  • "due_at": "2025-10-12T17:00:00Z",
  • "visible_in_views": [
    ],
  • "percent_done": 0,
  • "duration_days": 3,
  • "created_at": "2025-10-09T10:00:00Z",
  • "updated_at": "2025-10-09T10:00:00Z"
}

List Tasks

List tasks with optional view filtering.

View rules:

  • board: Requires state field (Kanban columns)
  • calendar: Requires start_at OR due_at
  • gantt: Requires start_at AND due_at (both dates)
  • table/tree: Always visible (unless explicitly removed from visible_in_views)

Tasks are automatically assigned to views based on their properties. Use visible_in_views to override.

Subtasks behavior:

  • include_subtasks=true: Include subtasks in response (for table/tree views)
  • include_subtasks=false (default): Parent tasks only
  • Board/Gantt views: Subtasks never included regardless of this parameter

Example Response:

{
  "data": [
    {
      "id": "01HQX...",
      "project_id": "01HQY...",
      "wbs_id": "01HQZ...",
      "title": "Implement authentication",
      "state": "in_progress",
      "priority": "high",
      "estimate_hours": 8.0,
      "remaining_hours": 4.0,
      "assignee_id": "01HQW..."
    }
  ],
  "pagination": {
    "next_cursor": "01HQX...",
    "has_more": true,
    "size": 50
  }
}
Authorizations:
HTTPBearer
query Parameters
Filter[Projectid] (string) or Filter[Projectid] (null) (Filter[Projectid])
Filter[State] (string) or Filter[State] (null) (Filter[State])
Filter[Wbsid] (string) or Filter[Wbsid] (null) (Filter[Wbsid])
Filter[Assigneeid] (string) or Filter[Assigneeid] (null) (Filter[Assigneeid])

Filter by assigned user

TaskView (string) or Filter[View] (null) (Filter[View])

Filter tasks by view. board=requires state; calendar=requires start_at OR due_at; gantt=requires start_at AND due_at

include_subtasks
boolean (Include Subtasks)
Default: false

Include subtasks in response. Useful for table/tree views. Never included in board/gantt views.

Sort (string) or Sort (null) (Sort)

Sort fields: priority, state, due_at, created_at, wbs_index. Prefix with - for descending

page[size]
integer (Page[Size]) [ 1 .. 200 ]
Default: 50
Page[After] (string) or Page[After] (null) (Page[After])

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Get Task

Get task details

Authorizations:
HTTPBearer
path Parameters
task_id
required
string (Task Id)

Responses

Response samples

Content type
application/json
{
  • "assignee_id": "01HQAAAAAAAAAAAAAAAAAAAAA",
  • "created_at": "2025-10-09T10:00:00Z",
  • "description": "Add JWT-based authentication with login/logout",
  • "due_at": "2025-10-12T17:00:00Z",
  • "duration_days": 3,
  • "estimate_hours": 8,
  • "id": "01HQXXXXXXXXXXXXXXXXXXXXXX",
  • "percent_done": 30,
  • "priority": "high",
  • "project_id": "01HQYYYYYYYYYYYYYYYYYYYY",
  • "remaining_hours": 5.5,
  • "start_at": "2025-10-10T09:00:00Z",
  • "state": "in_progress",
  • "title": "Implement user authentication",
  • "updated_at": "2025-10-10T14:30:00Z",
  • "visible_in_views": [
    ],
  • "wbs_id": "01HQZZZZZZZZZZZZZZZZZZZZZ"
}

Update Task

Update task

Authorizations:
HTTPBearer
path Parameters
task_id
required
string (Task Id)
Request Body schema: application/json
required
Title (string) or Title (null) (Title)
Description (string) or Description (null) (Description)
Assignee Id (string) or Assignee Id (null) (Assignee Id)
Wbs Id (string) or Wbs Id (null) (Wbs Id)
Estimate Hours (number) or Estimate Hours (null) (Estimate Hours)
Remaining Hours (number) or Remaining Hours (null) (Remaining Hours)
TaskState (string) or null
TaskPriority (string) or null
Start At (string) or Start At (null) (Start At)
Due At (string) or Due At (null) (Due At)
Array of Visible In Views (strings) or Visible In Views (null) (Visible In Views)
Percent Done (number) or Percent Done (null) (Percent Done)

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "description": "string",
  • "assignee_id": "string",
  • "wbs_id": "string",
  • "estimate_hours": 0,
  • "remaining_hours": 0,
  • "state": "todo",
  • "priority": "low",
  • "start_at": "2025-10-09T14:30:00Z",
  • "due_at": "2025-10-09T14:30:00Z",
  • "visible_in_views": [
    ],
  • "percent_done": 0
}

Response samples

Content type
application/json
{
  • "assignee_id": "01HQAAAAAAAAAAAAAAAAAAAAA",
  • "created_at": "2025-10-09T10:00:00Z",
  • "description": "Add JWT-based authentication with login/logout",
  • "due_at": "2025-10-12T17:00:00Z",
  • "duration_days": 3,
  • "estimate_hours": 8,
  • "id": "01HQXXXXXXXXXXXXXXXXXXXXXX",
  • "percent_done": 30,
  • "priority": "high",
  • "project_id": "01HQYYYYYYYYYYYYYYYYYYYY",
  • "remaining_hours": 5.5,
  • "start_at": "2025-10-10T09:00:00Z",
  • "state": "in_progress",
  • "title": "Implement user authentication",
  • "updated_at": "2025-10-10T14:30:00Z",
  • "visible_in_views": [
    ],
  • "wbs_id": "01HQZZZZZZZZZZZZZZZZZZZZZ"
}

Delete Task

Delete task

Authorizations:
HTTPBearer
path Parameters
task_id
required
string (Task Id)

Responses

Bulk Create Tasks

Bulk create multiple tasks in a single request.

Features:

  • Create up to 100 tasks at once
  • Partial success: Some tasks may succeed while others fail
  • Idempotent: Use Idempotency-Key header to prevent duplicate creation on retry
  • Rate limited: Max 10 requests, refills at 0.2/sec (12 per minute)

Idempotency: Include an Idempotency-Key header (ULID or UUID) to make this operation idempotent. If you retry with the same key, you'll get the same response without creating duplicates.

Example:

curl -X POST "$API/tasks:bulk" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Idempotency-Key: 01HQXXXXXXXXXXXXXXXXXXXXXX" \
  -H "Content-Type: application/json" \
  -d '{"tasks": [{"project_id":"...","wbs_id":"...","title":"Task 1"}]}'
Authorizations:
HTTPBearer
Request Body schema: application/json
required
required
Array of objects (Tasks) [ 1 .. 100 ] items

List of 1-100 tasks to create

Responses

Request samples

Content type
application/json
{
  • "tasks": [
    ]
}

Response samples

Content type
application/json
{
  • "created": [
    ],
  • "failed": [ ],
  • "failure_count": 0,
  • "success_count": 2,
  • "total": 2
}

Bulk Delete Tasks

Bulk delete tasks

Authorizations:
HTTPBearer
Request Body schema: application/json
required
ids
required
Array of strings (Ids) non-empty

List of task IDs to delete

Responses

Request samples

Content type
application/json
{
  • "ids": [
    ]
}

Bulk Update Tasks

Bulk update multiple tasks with the same changes.

Features:

  • Update multiple tasks at once with the same patch
  • All tasks must be accessible by the current user
  • Rate limited: Max 10 requests, refills at 0.2/sec (12 per minute)

Example:

curl -X PATCH "$API/tasks:bulk" \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"ids":["01HQ...","01HQ..."],"patch":{"state":"in_progress"}}'
Authorizations:
HTTPBearer
Request Body schema: application/json
required
ids
required
Array of strings (Ids)
required
object (TaskUpdate)

Responses

Request samples

Content type
application/json
{
  • "ids": [
    ],
  • "patch": {
    }
}

Response samples

Content type
application/json
{
  • "message": "string",
  • "updated_count": 0,
  • "requested_count": 0
}

subtasks

Subtask management

Create Subtask

Create a subtask

Authorizations:
HTTPBearer
path Parameters
task_id
required
string (Task Id)
Request Body schema: application/json
required
title
required
string (Title)
Estimate Hours (number) or Estimate Hours (null) (Estimate Hours)
Default: 0

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "estimate_hours": 0
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "task_id": "string",
  • "title": "string",
  • "state": "string",
  • "estimate_hours": 0,
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

List Subtasks

List subtasks for a task with pagination.

Returns all subtasks belonging to the specified task.

Authorizations:
HTTPBearer
path Parameters
task_id
required
string (Task Id)
query Parameters
size
integer (Size) [ 1 .. 200 ]
Default: 50
After (string) or After (null) (After)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Update Subtask

Update subtask

Authorizations:
HTTPBearer
path Parameters
subtask_id
required
string (Subtask Id)
Request Body schema: application/json
required
Title (string) or Title (null) (Title)
State (string) or State (null) (State)
Estimate Hours (number) or Estimate Hours (null) (Estimate Hours)

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "state": "string",
  • "estimate_hours": 0
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "task_id": "string",
  • "title": "string",
  • "state": "string",
  • "estimate_hours": 0,
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Delete Subtask

Delete subtask

Authorizations:
HTTPBearer
path Parameters
subtask_id
required
string (Subtask Id)

Responses

files

File upload, download, and versioning

Upload File

Upload a file with optional links to workspace/project/wbs/task entities.

Note on links parameter: Due to multipart/form-data limitations, the links field must be a JSON-encoded string, not a native array. Example: '[{"targetType":"project","targetId":"01HQ..."}]'

Example with curl:

curl -X POST "$API/files" \
  -H "Authorization: Bearer $TOKEN" \
  -F "file=@document.pdf" \
  -F "name=Quarterly Report" \
  -F 'links=[{"targetType":"project","targetId":"01HQXXXXXXXXXXXXXXXXXXXXXX"}]'
Authorizations:
HTTPBearer
query Parameters
Workspace Id (string) or Workspace Id (null) (Workspace Id)

Optional workspace ID to link file to

Request Body schema: multipart/form-data
required
file
required
string <binary> (File)
Name (string) or Name (null) (Name)
Mime (string) or Mime (null) (Mime)
links
string (Links)
Default: "[]"

JSON array of links: [{"targetType":"project","targetId":"..."}]

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "owner_user_id": "string",
  • "name": "string",
  • "ext": "string",
  • "mime": "string",
  • "size_bytes": 0,
  • "sha256": "string",
  • "is_document": true,
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

List Files

List files by context or filters.

Supports two modes:

  1. Legacy: context + id (e.g., context=workspace&id=ws123)
  2. New: filter[workspaceId], filter[projectId], filter[targetType], filter[targetId]

filter[targetType] accepts: workspace, project, wbs, task

Authorizations:
HTTPBearer
query Parameters
Context (string) or Context (null) (Context)
Deprecated
Id (string) or Id (null) (Id)
Deprecated
Filter[Workspaceid] (string) or Filter[Workspaceid] (null) (Filter[Workspaceid])
Filter[Projectid] (string) or Filter[Projectid] (null) (Filter[Projectid])
FileTargetType (string) or Filter[Targettype] (null) (Filter[Targettype])

Filter by target type: workspace, project, wbs, task

Filter[Targetid] (string) or Filter[Targetid] (null) (Filter[Targetid])
Search (string) or Search (null) (Search)
page[size]
integer (Page[Size]) [ 1 .. 200 ]
Default: 50
Page[After] (string) or Page[After] (null) (Page[After])

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Get File

Get file metadata

Authorizations:
HTTPBearer
path Parameters
file_id
required
string (File Id)

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "owner_user_id": "string",
  • "name": "string",
  • "ext": "string",
  • "mime": "string",
  • "size_bytes": 0,
  • "sha256": "string",
  • "is_document": true,
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Update File Metadata

Update file metadata (rename file).

Only the owner or users with editor role can update file metadata.

Authorizations:
HTTPBearer
path Parameters
file_id
required
string (File Id)
Request Body schema: application/json
required
name
required
string (Name) non-empty

New filename

Responses

Request samples

Content type
application/json
{
  • "name": "string"
}

Response samples

Content type
application/json
{
  • "id": "string",
  • "owner_user_id": "string",
  • "name": "string",
  • "ext": "string",
  • "mime": "string",
  • "size_bytes": 0,
  • "sha256": "string",
  • "is_document": true,
  • "created_at": "2025-10-09T14:30:00Z",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Delete File

Delete file and all versions

Authorizations:
HTTPBearer
path Parameters
file_id
required
string (File Id)

Responses

Download File

Download file content.

Returns raw binary data with appropriate Content-Type header.

Authorizations:
HTTPBearer
path Parameters
file_id
required
string (File Id)

Responses

Create File Version

Upload a new version of an existing file.

Creates a new version while preserving the original file metadata (name, links, etc.). The file content is stored separately and can be accessed via version history.

Authorizations:
HTTPBearer
path Parameters
file_id
required
string (File Id)
Request Body schema: multipart/form-data
required
file
required
string <binary> (File)
Comment (string) or Comment (null) (Comment)

Responses

Response samples

Content type
application/json
{
  • "id": "string",
  • "file_id": "string",
  • "version_number": 0,
  • "sha256": "string",
  • "storage_path": "string",
  • "size_bytes": 0,
  • "uploaded_by": "string",
  • "comment": "string",
  • "created_at": "2025-10-09T14:30:00Z"
}

List File Versions

List all versions of a file with pagination.

Returns versions in descending order (newest first).

Authorizations:
HTTPBearer
path Parameters
file_id
required
string (File Id)
query Parameters
size
integer (Size) [ 1 .. 200 ]
Default: 50
After (string) or After (null) (After)

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

Download File Version

Download a specific version of a file.

Returns the file content with appropriate Content-Type and Content-Disposition headers.

Authorizations:
HTTPBearer
path Parameters
file_id
required
string (File Id)
version_id
required
string (Version Id)

Responses

docs

Collaborative document editing

Get Doc State

Get document state (latest snapshot).

Returns the current collaborative document state with version information.

Authorizations:
HTTPBearer
path Parameters
file_id
required
string (File Id)

Responses

Response samples

Content type
application/json
{
  • "file_id": "01HQXXXXXXXXXXXXXXXXXXXXXX",
  • "size_bytes": 15420,
  • "snapshot_id": "v42",
  • "updated_at": "2025-10-09T14:30:00Z"
}

Export Doc

Export document to various formats (PDF, Markdown, DOCX).

Note: This is a stub implementation. Returns a placeholder response.

Authorizations:
HTTPBearer
path Parameters
file_id
required
string (File Id)
Request Body schema: application/json
required
format
required
string (Format)
Enum: "pdf" "md" "docx"

Export format

Responses

Request samples

Content type
application/json
{
  • "format": "pdf"
}

Response samples

Content type
application/json
{}

search

Full-text search (FTS5) across entities

Search

Full-text search across tasks, files, docs, and other entities.

Supports filtering by entity type and context (workspace or project). Results are filtered by user access permissions.

Uses cursor-based pagination with ULID cursors.

Authorizations:
HTTPBearer
query Parameters
q
required
string (Q)

Search query

Filter[Entity] (string) or Filter[Entity] (null) (Filter[Entity])

Filter by entity type: workspace, project, wbs, task, doc

Context (string) or Context (null) (Context)
Deprecated

Context type: workspace, project

Id (string) or Id (null) (Id)
Deprecated

Context ID

page[size]
integer (Page[Size]) [ 1 .. 200 ]
Default: 50
Page[After] (string) or Page[After] (null) (Page[After])

Responses

Response samples

Content type
application/json
{
  • "data": [
    ],
  • "pagination": {
    }
}

ai

AI-powered suggestions (Mistral AI)

Ai Breakdown Task

Generate task breakdown for a WBS node using AI.

Analyzes the WBS description and suggests tasks with effort estimates.

Rate Limiting: This endpoint is rate-limited. If you exceed the limit, you'll receive a 429 response with a Retry-After header indicating when to retry.

Authorizations:
HTTPBearer
Request Body schema: application/json
required
wbs_id
required
string (Wbs Id)

WBS node ID to break down into tasks

Description (string) or Description (null) (Description)

Additional description or context

Responses

Request samples

Content type
application/json
{
  • "wbs_id": "string",
  • "description": "string"
}

Response samples

Content type
application/json
{
  • "tasks": [
    ],
  • "wbs_id": "string"
}

Ai Suggest Task

Generate AI suggestions for improving a task.

Analyzes the task and provides suggestions for improvement.

Rate Limiting: This endpoint is rate-limited. If you exceed the limit, you'll receive a 429 response with a Retry-After header indicating when to retry.

Authorizations:
HTTPBearer
Request Body schema: application/json
required
task_id
required
string (Task Id)

Task ID to analyze

Context (string) or Context (null) (Context)

Additional context for suggestions

Responses

Request samples

Content type
application/json
{
  • "task_id": "string",
  • "context": "string"
}

Response samples

Content type
application/json
{
  • "suggestions": [
    ],
  • "task_id": "string"
}

Ai Estimate Task

Generate effort estimate for a task using AI.

Analyzes the task complexity and provides an estimated duration with confidence level and reasoning.

Rate Limiting: This endpoint is rate-limited. If you exceed the limit, you'll receive a 429 response with a Retry-After header indicating when to retry.

Authorizations:
HTTPBearer
Request Body schema: application/json
required
title
required
string (Title) [ 1 .. 200 ] characters
Description (string) or Description (null) (Description)
Array of Subtasks (strings) or Subtasks (null) (Subtasks)

List of subtask titles

Context (string) or Context (null) (Context)

Responses

Request samples

Content type
application/json
{
  • "title": "string",
  • "description": "string",
  • "subtasks": [
    ],
  • "context": "string"
}

Response samples

Content type
application/json
{
  • "estimate_hours": 0.1,
  • "confidence": "string",
  • "reasoning": "string",
  • "breakdown": {
    }
}

Ai Generate Wbs

Generate Work Breakdown Structure for a project using AI.

Analyzes the project description and generates a hierarchical WBS with appropriate groups and work packages.

Rate Limiting: This endpoint is rate-limited. If you exceed the limit, you'll receive a 429 response with a Retry-After header indicating when to retry.

Authorizations:
HTTPBearer
Request Body schema: application/json
required
project_name
required
string (Project Name) non-empty
project_description
required
string (Project Description) non-empty
Project Type (string) or Project Type (null) (Project Type)

software, construction, event, etc.

Array of Phases (strings) or Phases (null) (Phases)

Suggested project phases

Responses

Request samples

Content type
application/json
{
  • "project_name": "string",
  • "project_description": "string",
  • "project_type": "string",
  • "phases": [
    ]
}

Response samples

Content type
application/json
{
  • "nodes": [
    ],
  • "reasoning": "string"
}

Get Ai Status

Get AI service status and configuration.

Returns information about AI availability and current model.

Authorizations:
HTTPBearer

Responses

Response samples

Content type
application/json
{
  • "available": true,
  • "enabled": true,
  • "features": {
    },
  • "model": "mistral-small-latest",
  • "provider": "Mistral AI"
}

Health Check

Health check endpoint

Responses

Response samples

Content type
application/json
null

Get Meta

Get API metadata and feature flags.

Returns version, environment, and feature availability.

Responses

Response samples

Content type
application/json
{
  • "version": "string",
  • "env": "string",
  • "database": "string",
  • "fts": "string",
  • "features": {
    },
  • "views": [
    ]
}

Root

Root endpoint

Responses

Response samples

Content type
application/json
null