Listen
0:00 / ~0:54
Projects are bundled — a single GET returns every project in your workspace alongside its statuses, tags, members, and metadata. PATCH accepts the same shape for atomic multi-project updates.
/api/projectsReturns the full workspace project bundle: projects, status columns, tag palette, role-based assignment options, and the current display mode (board, list, or timeline).
const res = await fetch("/api/projects");
const { ok, bundle, mode } = await res.json();
// bundle.projects: array of project objects
// bundle.statuses: shared status definitions
// bundle.tags: shared tag palette
// mode: "board" | "list" | "timeline"/api/projectsSubmit a partial or full bundle to add, rename, or reorder projects in one transaction. Useful for batch admin operations like reseeding tags or migrating status names across the workspace.
{
"bundle": {
"projects": [
{ "id": 1, "name": "Website Redesign", "endDate": "2026-07-01" },
{ "id": 2, "name": "Mobile App v2", "endDate": "2026-09-15" }
]
}
}/api/projects/{id}Cascades through tasks, time entries, discussions, files, and budgets for the project. This is irreversible — back up first if you might want the data later.
projectRef as a string when creating tasks or time entries against a project, even though the project id itself is numeric. The two are kept in sync via String(project.id).