Projects API

Manage projects and inspect their cycles and tasks.

Project routes

MethodPathPurpose
GET/api/v1/projectsPaginated project list
POST/api/v1/projectsCreate a project
GET/api/v1/projects/{id}Retrieve one project
PATCH/api/v1/projects/{id}Update a project
DELETE/api/v1/projects/{id}Delete/soft-delete through the project service
GET/api/v1/projects/{id}/cyclesPaginated project cycles
POST/api/v1/projects/{id}/cyclesCreate a cycle
GET/api/v1/projects/{id}/issuesPaginated project tasks

List routes support page and limit; limit defaults to 50 and is capped at 100.

Create a project

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

Requires projects.write.

{
  "name": "Website redesign",
  "description": "Marketing site overhaul",
  "status": "active",
  "priority": "high",
  "progress": 0,
  "start_date": "2026-07-29",
  "end_date": "2026-09-30"
}

name is required and limited to 200 characters.

Optional fields are description, status, priority, progress, start_date, end_date, team_id, lead_user_id, template_id, deal_id, company_id, github_url, external_id, and hosted.

Accepted priority values are low, medium, high, and urgent. The API accepts legacy and current project status keys and normalizes them. If both dates are supplied, end_date must be on or after start_date.

Update a project

PATCH /api/v1/projects/{id}
Content-Type: application/json

Requires projects.write. Supply at least one create field.

Create a project cycle

POST /api/v1/projects/{id}/cycles
Content-Type: application/json

Requires projects.write. The route scopes the new cycle to the project ID in the path.

Project tasks

GET /api/v1/projects/{id}/issues?page=1&limit=50

Despite the historical /issues name, this project-scoped route returns project tasks associated with the project.