Skip to content

Search docs

Find pages, headings, and concepts. Press ⌘K or Ctrl+K to toggle.

Projects

CRUD for projects, the canvas-and-session containers that scope agent work.

Projects are the primary container for canvas state, sessions, files, and memory. Every project belongs to one workspace and may be additionally shared into more workspaces. Visibility is either team (everyone in the workspace) or private (creator only).

Endpoints

MethodPathDescription
GET/api/v1/projectsList projects visible to the caller.
POST/api/v1/projectsCreate a project.
GET/api/v1/projects/:idFetch one project with spend totals and shared workspaces.
PATCH/api/v1/projects/:idUpdate project fields.
DELETE/api/v1/projects/:idSoft-delete a project and its owned records.

List projects

GET /api/v1/projects returns non-deleted projects in the caller's org, filtered by workspace scope and visibility. Side effect: project file folders are ensured to exist on first list.

Response item: project record with id, orgId, workspaceId, userId, name, description, prompt, emoji, visibility, status, tags, metadata, createdAt, updatedAt.

Create project

POST /api/v1/projects

FieldTypeRequiredDescription
namestringone of name/description1–255 chars. If omitted, a name is generated from the description.
descriptionstring | nullone of name/descriptionUp to 5,000 chars.
promptstring | nullnoUp to 12,000 chars. Project-wide system prompt.
emojistring | nullnoUp to 16 chars.
visibility"team" | "private"noDefaults to the user's defaultProjectVisibility, then team.

When only description is supplied, the server generates a project name with the LLM and falls back to Untitled project on failure.

Response (201): the created project record. The matching project folder is provisioned in the file tree, and the project is linked to the active workspace.

bash
Sign in to fill in your org and key
curl -X POST https://alumia.com/api/v1/projects \
-H "Authorization: Bearer alm_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "name": "Q3 launch", "visibility": "team" }'

Get project

GET /api/v1/projects/:id

Returns the project record plus:

  • spend: total usage cost for this project.
  • sharedWorkspaces: workspaces this project is linked into beyond its primary one.

:id accepts either UUID or slug.

Update project

PATCH /api/v1/projects/:id

Accepts any subset of: name, description, prompt, emoji, status ("active" | "archived" | "completed"), visibility ("team" | "private"), tags (max 30, each ≤80 chars), metadata (max 32 KB, max depth 12). Renaming the project also renames its protected folder.

Delete project

DELETE /api/v1/projects/:id — Soft-deletes the project, its folder tree, and project-owned records (transactionally). Returns:

{ "success": true, "data": { "deleted": true } }

Errors

CodeWhen
UNAUTHORIZEDNo valid key.
BAD_REQUESTBody missing, both name and description empty on create, oversized field, invalid status/visibility, metadata too large or too deep.
FORBIDDENCaller has no workspace access.
NOT_FOUNDProject does not exist, is soft-deleted, or is invisible to the caller (workspace + visibility).