Projects API
Manage projects and inspect their cycles and tasks.
Project routes
| Method | Path | Purpose |
|---|---|---|
GET | /api/v1/projects | Paginated project list |
POST | /api/v1/projects | Create 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}/cycles | Paginated project cycles |
POST | /api/v1/projects/{id}/cycles | Create a cycle |
GET | /api/v1/projects/{id}/issues | Paginated 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/jsonRequires 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/jsonRequires projects.write. Supply at least one create field.
Create a project cycle
POST /api/v1/projects/{id}/cycles
Content-Type: application/jsonRequires 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=50Despite the historical /issues name, this project-scoped route returns
project tasks associated with the project.

