/api/v1/projects; creating and renaming are actions on /api/v1/mutate.
List projects
?includeArchived=true to list them too.
Create a project
Bootstrap a brain without the app. The project is created and its systemLater phase is seeded, so nodes can be added immediately.
project.idis optional. The default lowercases the name and replaces whitespace with dashes; other punctuation is kept, and an id with punctuation fails validation. Pass an explicitproject.idfor such names.- An id must be 2 to 63 characters of lowercase letters, numbers and dashes, starting with a letter or number. Otherwise
400 "Invalid project id '...'". - Project ids are a global namespace. A taken id returns
400 "Project id 'x' is already taken ...". - Tier project limits apply. Exceeding them returns
403 { "error": "project_limit", "message": "Your tier (free) allows 1 project. ..." }. addProjectdoes not honourIdempotency-Key. Pass an explicitproject.idso a retried create fails cleanly instead of creating a second project.
Rename a project
Changes the display name only. Owner-only.id is immutable. Every node, phase, webhook and share link references it, so keep using the same projectId after a rename. name is required, trimmed, and capped at 100 characters. A member (not the owner) gets 403 { "error": "project_access_denied", "message": "Only the project owner can rename a project" }.
Archive a project
Hide a project from the default list without deleting it. Reversible.- Archiving only affects listing. Nodes, phases, share links, webhooks and the API itself keep working on an archived project.
- Owner-only. A member, or a wrong id, gets
404 "Project 'x' not found (you can only archive projects you own)". archivedmust be a boolean; anything else is400.

