Reference

HTTP API

Every endpoint of the team server, grouped by area, with who may call it. Generated from the API contract.

The team server has 231 HTTP endpoints. Each one is declared once in shared/src/api/, with zod schemas for its query, body and response. The server validates every request against it, and the web app calls endpoints by name.

Note

The API serves the Trina AX apps. It is not yet a stable public API for other programs, and it follows the version rules.

#Calling the API

  • Endpoints live under the team's own address, for example https://team.example.com/api/health.
  • The web app signs in with a session cookie. Requests from other origins are refused unless the origin is in MYCEL_PUBLIC_ORIGINS.
  • Live updates and answers stream over a WebSocket at GET /api/ws.
  • The MCP connector adds /mcp, /oauth/* and /.well-known/* outside this list.
WhoMeans
AnyoneNo session needed
Signed inAny active member
AdminAn admin or the owner
OwnerThe owner only
Owner + passwordThe owner, who enters their password again (updates, restores)

#Setup, sign-in and account

MethodPathWhoWhat it does
GET/api/setupAnyoneIs first-run setup still needed (no owner yet)?
POST/api/setupAnyoneCreate the team and its owner (only while no user exists; needs the setup token). Signs the owner in.
POST/api/auth/loginAnyoneSign in with username + password (argon2id). Rate-limited per IP and per account.
POST/api/auth/logoutSigned inEnd this session and clear the cookie.
POST/api/auth/passwordSigned inChange own password; ends every other session of this person.
GET/api/meSigned inThe signed-in person, groups, team name.
PATCH/api/meSigned inProfile, language, theme and composer preferences.
GET/api/me/usageSigned inMy own usage this day / week / month (never anyone else's) and the usage limits that apply to me.
GET/api/me/sessionsSigned inOwn signed-in devices.
DELETE/api/me/sessions/:idSigned inSign out one of own devices.
GET/api/invites/:tokenAnyoneWhat an invite link is for (team name, role, still valid?).
GET/api/password-resets/:tokenAnyoneWhat a password reset link is for (whose account, still valid?).
POST/api/password-resets/:tokenAnyoneSet a new password with a one-time reset link; ends every other session and signs in.
POST/api/invites/:token/acceptAnyoneCreate the account from an invite link and sign in.

#Chats and projects

MethodPathWhoWhat it does
GET/api/questions/frequentSigned inOwn repeated questions from current branches in the last 30 days; bounded sample, never other people’s prompts.
GET/api/chatsSigned inOwn chats, newest first (search with q, trash with trash=1).
POST/api/chatsSigned inNew empty chat (optionally inside a project).
GET/api/enginesSigned inWhether the caller may pick the engine / model, the team default, and the engines + models they may pick.
GET/api/chats/:idSigned inOne own chat.
GET/api/chats/:id/queueSigned inOwn chat queue snapshot; advisory rank and epoch/revision for reconnect recovery.
PATCH/api/chats/:idSigned inRename, move to a project, change engine/model.
DELETE/api/chats/:idSigned inMove to chat trash (purged after 7 days). Stops a running turn.
POST/api/chats/:id/restoreSigned inBring a chat back from the trash.
GET/api/chats/:id/messagesSigned inActive branch of the conversation, paged backwards.
POST/api/chats/:id/messagesSigned inSave the message, create the empty answer, queue the turn. Send the X-Mycel-Window header so browser tools reach this window.
POST/api/chats/:id/stopSigned inStop the running or queued turn of this chat.
GET/api/chats/:id/messages/:messageId/sourcesSigned inThe files the AI read or saw passages of for this answer, each checked against the viewer's access now (no name or path for the others).
POST/api/chats/:id/messages/:messageId/regenerateSigned inNew answer to the same user message (sibling of :messageId, an assistant message).
POST/api/chats/:id/messages/:messageId/editSigned inEdited copy of user message :messageId as a new branch, then answer it.
POST/api/chats/:id/branchSigned inSwitch the visible branch ("< 2/3 >"); returns the newest page of the new path.
GET/api/chats/:id/requestsSigned inOpen ask_user / browser site cards of the running turn of this chat.
POST/api/turns/:id/connectSigned inFinish a connect_service card: add the connection with a sealed key, after a sign-in, or skip
POST/api/turns/:id/answerSigned inAnswer an ask_user card or a browser site confirmation of an own running turn.
GET/api/projectsSigned inProjects whose folder the caller can read.
POST/api/projectsSigned inNew project: personal (users//projects/), on an existing folder the caller can write, or a new projects/ with participants (admin or owner).
GET/api/projects/:idSigned inOne project.
PATCH/api/projects/:idSigned inEdit name / instructions (the creator or an admin, with write access to the folder; audited, readers notified). folderPath: admins only, never under users/.
POST/api/projects/:id/shareSigned inCopy a personal project's folder into a team folder and point the project at it (the personal folder stays).
DELETE/api/projects/:idSigned inDelete the project (the creator or an admin; chats stay, without project; the folder stays).

#Memories

MethodPathWhoWhat it does
GET/api/memoriesSigned inOwn memories, newest first.
POST/api/memoriesSigned inAdd a memory of one's own (same limits as the AI's remember).
PATCH/api/memories/:idSigned inCorrect the text of one of the own memories.
DELETE/api/memories/:idSigned inForget one memory.
DELETE/api/memoriesSigned inForget everything.

#Skills

MethodPathWhoWhat it does
GET/api/skills/popularSigned inLast 30 days of usage counts for currently readable skills, with no user identities or prompts.
GET/api/skillsSigned inSkills the caller can use: skills/**/*.md with a name header that the caller can read, and their own personal skills (users//skills/), by name.
GET/api/skills/issuesSigned inSkill entries the caller can read that do not load: an invalid SKILL.md (also a name that is not its folder name) or a legacy file with a broken header.
GET/api/skills/overviewSigned inThe skills folders the caller manages / can suggest into, and how many suggestions wait.
GET/api/skills/suggestionsSigned inMy suggestions, or (scope=review) the suggestions for skills folders I manage. Nobody else sees them.
GET/api/skills/suggestions/:idSigned inOne suggestion: its suggester and the managers of its target folder only (404 for anyone else).
POST/api/skills/suggestionsSigned inSuggest as skill: from an answer in my chat or a file in my folder; stored on the server (not in skills/); the managers of the target folder are told.
POST/api/skills/suggestions/:id/approveSigned inRegister: a manager of the target folder writes it under skills/ (audited, version history); the suggester is told.
POST/api/skills/suggestions/:id/rejectSigned inTurn down: a manager of the target folder turns it down; the suggester is told.
GET/api/admin/skill-changesAdminEvery create / edit / move / delete under skills/ (people and AI), newest first.
GET/api/admin/skill-managersAdminWho manages team skills: the write rules for people and groups on skills/ and its folders.
PUT/api/admin/skill-managersAdmin"Manages team skills" on / off for a person or group on skills/ or a subfolder: adds or removes their write rule there (audited, like Admin > folder access).

#Scheduled tasks

MethodPathWhoWhat it does
GET/api/schedule-templatesSigned inDormant templates; listing creates no scheduled work.
POST/api/schedule-templatesSigned inExplicitly create a private-output scheduled template, idempotent per user/request.
GET/api/schedulesSigned inOwn scheduled tasks and the team time zone they run in.
PATCH/api/schedules/:idSigned inPause or resume one of the own scheduled tasks.
POST/api/schedules/:id/runSigned inRun one of the own tasks once now, with the rules of a scheduled run; its schedule and on/off stay as they are.
POST/api/schedules/:id/editSigned inCheck an edit of an own free-text task and show its schedule card (nothing changes yet).
PUT/api/schedules/:idSigned inSave an edit: a free-text task with the answer to its card, a template with its time and folders.
DELETE/api/schedules/:idSigned inDelete one of the own scheduled tasks.
GET/api/schedules/:id/reviewSigned inThe schedule card of an own task nobody confirmed (needsReview), to check it again.
POST/api/schedules/:id/reviewSigned inAnswer that card with one of its options: resume (confirmed, runs again with the addresses and connections it showed) or keep it paused.
GET/api/admin/schedule-reviewsAdminScheduled tasks paused until their owners confirm them again (metadata only).

#Connected folders

MethodPathWhoWhat it does
GET/api/admin/connectedOwnerConnected folders and their last sync.
POST/api/admin/connectedOwner + passwordConnect a folder of the server Mac as connected/ (everyone can read it; first sync starts).
POST/api/admin/connected/:id/syncOwnerStart a sync now (runs in the background).
DELETE/api/admin/connected/:idOwnerDisconnect: the mirrored files go away, anything people added stays.

#Files

MethodPathWhoWhat it does
GET/api/files/treeSigned inList a folder (only what the caller may see; ancestors of visible folders shown for navigation).
GET/api/files/contentSigned inText content for preview / editing.
PUT/api/files/contentSigned inSave a text file from the file screen (hash-based conflict copy, version history).
GET/api/files/downloadSigned inStream a file (Range supported, never loaded whole into memory).
GET/api/files/hwp-previewSigned inAuthorized HWP/HWPX raster page. Pages are 1-based. Original download stays available.
GET/api/files/previewSigned inJPEG preview of a HEIC / HEIF photo (converted on the server, cached). No converter or a failed conversion: 503 unavailable with params.reason no_preview.
POST/api/files/uploadSigned inUpload one file up to 50 MB into a folder (write access).
POST/api/files/mkdirSigned inCreate a folder (name rules + collision check).
POST/api/files/moveSigned inMove / rename (write access at both ends; folders.path follows). Group / project / rule folders: admin or owner only, never into users/ (400). Into users// when others lose sight of it: 409 audience_narrowed unless confirm.
POST/api/files/copySigned inCopy a readable file into a writable folder (sharing a personal file). dryRun: {viewersAdded} only (also 201).
DELETE/api/filesSigned inMove a file or folder to the trash (30 days). Group / project / rule folders: admin or owner only.
GET/api/files/historySigned inVersion history of a file.
GET/api/files/history/:versionId/downloadSigned inDownload an old version (read access to its path).
POST/api/files/restoreSigned inRestore an old version of a file.
GET/api/files/trashSigned inTrash items the caller could restore (write access to the original path).
POST/api/files/trash/:id/restoreSigned inPut a trashed item back (write access to the original path; " (restored)", in the team language, is added when the name is taken).
DELETE/api/files/trash/:idAdminDelete a trashed item for good (admin or owner).
POST/api/uploadsSigned inAttach a file (≤ 50 MB) to an own chat: stored in users//.attachments//.
GET/api/uploads/:id/thumbnailSigned inSmall JPEG/PNG thumbnail of an image attachment (a team file: the image itself, up to 2 MB, while the caller can read it).
POST/api/attachments/team-fileSigned inAttach a team-folder file the caller can read to an own chat, as a reference (re-checked on every send and turn).
GET/api/files/findSigned inFiles whose name contains q, among the files the caller can read (newest first).
GET/api/files/searchSigned inLines that contain q (literal text, any case) in the files the caller can read, office documents through their text cache. Rate limited per person.
GET/api/files/recentSigned inRecently changed files the caller can read (for the attach picker).
POST/api/upload-sessionsSigned inStart a chunked upload (8 MB chunks). Expires after 24 h.
PUT/api/upload-sessions/:id/chunks/:nSigned inStore chunk n (0-based). Re-sending a stored chunk is a no-op.
GET/api/upload-sessions/:idSigned inWhich chunks arrived (to resume after a disconnect).
POST/api/upload-sessions/:id/completeSigned inVerify sha256 and move the file into place.
DELETE/api/upload-sessions/:idSigned inDrop an unfinished upload.

#Artifacts

MethodPathWhoWhat it does
GET/api/chats/:id/artifactsSigned inArtifacts of an own chat, all versions, without content.
GET/api/artifacts/:idSigned inOne artifact version with content (own chats only).

#Jobs

MethodPathWhoWhat it does
GET/api/jobs/:idSigned inOwn job (jobs of nobody, e.g. system backups: the owner). Result when done.
POST/api/jobs/:id/cancelSigned inCancel a queued or running own job.
POST/api/transcribeSigned inVoice input / recordings up to 50 MB (larger: upload session with target transcribe). Result: TranscribeResult.

#In-app browser

MethodPathWhoWhat it does
GET/api/browser/callsSigned inLong-poll fallback: pending browser.call for this window (waits up to waitMs).
POST/api/browser/resultsSigned inLong-poll fallback: browser.result.

#Admin

MethodPathWhoWhat it does
GET/api/admin/usersAdminAll members, and with ?noAi=1 who cannot use AI now ("No AI").
POST/api/admin/usersAdminAdd a member with a temporary password (alternative to an invite).
PATCH/api/admin/users/:idAdminRole, groups, disable (ends their sessions). Only the owner changes admins.
DELETE/api/admin/users/:idOwnerOwner only. Remove a member: sessions end now, chats and memories are purged after the chat retention period; the personal folder goes to the owner or is deleted.
POST/api/admin/users/:id/reset-passwordAdminNew temporary password (given, or a memorable one is made); the person must change it at next sign-in; valid 7 days; audited.
POST/api/admin/users/:id/reset-linkAdminOne-time password reset link (24 h) to hand over; ends their sessions when used; audited.
POST/api/admin/transfer-ownershipOwner + passwordMake another member the owner (password re-entry); the old owner becomes admin.
GET/api/admin/invitesAdminOpen and used invite links.
POST/api/admin/invitesAdminNew invite link (copy it; no mail in v1).
DELETE/api/admin/invites/:idAdminRevoke an unused invite.
GET/api/admin/groupsAdminGroups with members.
POST/api/admin/groupsAdminNew group.
PATCH/api/admin/groups/:idAdminRename / change members.
DELETE/api/admin/groups/:idAdminDelete a group (its folder rules go too).
GET/api/admin/foldersAdminFolders that carry rules, with their rules (= /api/admin/folder-rules of the design).
POST/api/admin/foldersAdminPut rules on a folder (creates it on disk if asked).
PUT/api/admin/folders/:id/rulesAdminReplace the rules of a folder; audited; affected chats get fresh engine sessions.
DELETE/api/admin/folders/:idAdminRemove all rules of a folder (the folder on disk stays).
POST/api/admin/folder-rules/previewAdmin"Who sees what" for proposed rules, before saving.
GET/api/admin/access/folderAdminOne team folder: every active person's access, the folder and rule it comes from, and counts. Not for users/.
GET/api/admin/access/people/:idAdminOne person: their access to every team folder (rule, top-level, group, project, connected) and why.
POST/api/admin/access/new-personAdminThe same for someone about to be invited with this role and these groups (nothing is saved).
GET/api/admin/access/treeAdminOne level of the team folder for the admin tree: each child folder with who sees it, from where, and its risks. users/ is one row, never listed.
POST/api/admin/access/edit-previewAdminWhat saving these rules on one folder would change: who loses and gains access there and below, what "follow the folder above" gives now, warnings, and the hash of the rules now. Nothing is saved.
GET/api/admin/enginesAdminEngine install/login/lockdown status, models, defaults, concurrency.
GET/api/admin/engines/api-configOwnerThe team API engine settings (the key is never returned, only whether one is set).
PUT/api/admin/engines/api-configOwnerSet the team API engine: OpenAI-compatible base URL, model, label; key: a new one, null to remove, absent to keep.
PATCH/api/admin/enginesAdminDefaults, concurrency, enable/disable, who else may pick the engine, Claude-limit fallback to Codex.
POST/api/admin/engines/:id/checkAdminRe-check one engine now (bounded, no model call unless needed).
GET/api/admin/budgetsAdminBudgets with current spend.
POST/api/admin/budgetsAdminNew budget.
PATCH/api/admin/budgets/:idAdminChange a budget.
DELETE/api/admin/budgets/:idAdminDelete a budget.
GET/api/admin/settingsAdminTeam settings.
PATCH/api/admin/settingsAdminChange team settings (team name change also renames the relay address: owner only).
PUT/api/admin/team-iconAdminSet the team logo (tab icon, home-screen app icon): PNG, JPEG or WebP up to 1 MiB, 32–4096 px a side; audited.
DELETE/api/admin/team-iconAdminRemove the team logo: back to the default icon; audited.
GET/api/admin/speech-hostAdminHow this server turns video and audio sound into text itself: its cores, piece length and measured speed.
GET/api/admin/speech-keyAdminWhether the OpenRouter key for voice input is set (last 4 characters only, never the key).
PUT/api/admin/speech-keyAdminSet (sealed in the browser) or remove (null) the OpenRouter key for voice input; asks for the password again.
GET/api/admin/usageAdminUsage and cost per person / engine / model / day / group / AI connection / skill. Skill rows attribute the entire turn and may overlap.
GET/api/admin/auditAdminAdmin actions, file changes, tool calls, sign-ins.

#AI connections

MethodPathWhoWhat it does
GET/api/admin/credentialsAdminAI connections of the team (and that members have their own), with state and this month's use. Never a secret.
POST/api/admin/credentialsOwner + passwordAdd a Claude subscription token or an API key (sealed in the browser); checked without spending tokens. Already connected: 409 saying where (DuplicateCredentialParams); with moveFrom, a member's personal copy moves to the team.
PATCH/api/admin/credentials/:idOwnerRename, order, switch off, assign to groups / people, monthly limit.
POST/api/admin/credentials/:id/secretOwner + passwordPut a new token / key on an existing connection (same kind).
DELETE/api/admin/credentials/:idOwnerRemove a connection (usage history stays).
POST/api/admin/credentials/:id/checkAdminCheck a connection again now, without spending tokens.
POST/api/admin/credential-loginsOwner + passwordStart a ChatGPT sign-in for the team (device code); progress on WebSocket credential.login.
GET/api/admin/credential-logins/:idOwnerState of a sign-in this owner started.
DELETE/api/admin/credential-logins/:idOwnerStop a sign-in.
PATCH/api/admin/credential-settingsOwnerPersonal connections and explicit shared-subscription consent.
GET/api/credentials/sealing-keySigned inPublic key the browser seals a token / key with before sending it.
GET/api/me/credentialsSigned inMy own AI connections (when the team allows them).
POST/api/me/credentialsSigned inAdd my own Claude token or API key; used for my turns first.
DELETE/api/me/credentials/:idSigned inRemove one of my own connections.
POST/api/me/credential-loginsSigned inStart my own ChatGPT sign-in.
GET/api/me/credential-logins/:idSigned inState of my sign-in.
DELETE/api/me/credential-logins/:idSigned inStop my sign-in.

#Google Drive

MethodPathWhoWhat it does
GET/api/integrations/google-driveSigned inOwn Google Drive connection; never a token.
POST/api/integrations/google-drive/authorizeSigned inStart personal Google authorization in a system browser.
GET/api/integrations/google-drive/flows/:idSigned inPoll the flow started by this same signed-in session.
POST/api/integrations/google-drive/flows/:id/completeSigned inConfirm the Google account shown by this own authorization flow.
DELETE/api/integrations/google-drive/flows/:idSigned inCancel this own authorization flow.
DELETE/api/integrations/google-driveSigned inImmediately disable own Drive access, then attempt Google revocation.

#MCP and HTTP connections

MethodPathWhoWhat it does
GET/api/integrationsSigned inMy personal connections and the team connections I may use. Never a key or token.
POST/api/integrationsSigned inA personal connection (403 when the team turned personal connections off). Checked right away; status says how it went.
PATCH/api/integrations/:idSigned inChange a connection: the owner of a personal one, an admin for a team one. A new address drops the stored key.
DELETE/api/integrations/:idSigned inDelete a connection (OAuth: revocation is tried, the local tokens go first).
POST/api/integrations/:id/refreshSigned inCheck the connection now; MCP: save its current tool list.
POST/api/integrations/:id/authorizeSigned inStart signing in at an MCP server (OAuth with PKCE) in a browser window.
POST/api/integrations/:id/toolsSigned inTurn one tool of an MCP connection on or off for the AI (whoever manages the connection). New tools are on.
GET/api/integrations/flows/:idSigned inPoll a sign-in started by this same session.
GET/api/admin/integrationsAdminEvery team connection, with who may use it.
POST/api/admin/integrationsAdminA team connection; access says who may use it (default: nobody until set).
GET/api/integration-requestsSigned inRequests from admins to connect a service as my own connection, still waiting for me.
GET/api/integration-requests/:idSigned inOne request to me, in any state (404 for anyone else, admins included).
POST/api/integration-requests/:id/completeSigned inConnect it as my own connection, with my key, or made for signing in next (MCP OAuth: the request is connected when the sign-in finishes). Only the member it asks.
POST/api/integration-requests/:id/declineSigned inDecline a waiting request to me.
GET/api/admin/integration-requestsAdminRequests admins sent to members, with their state. Never a key.
POST/api/admin/integration-requestsAdminAsk a member to connect a service as their own connection (a notice and a link for them; waits 7 days).
POST/api/admin/integration-requests/:id/withdrawAdminWithdraw a waiting request.

#Notifications

MethodPathWhoWhat it does
GET/api/notifications/:idSigned inRead an own notification without marking read; current-access filtered and never cached.
GET/api/notificationsSigned inOwn metadata-only inbox, retained for 30 days.
POST/api/notifications/:id/readSigned inMark an own notification read.
GET/api/notification-preferencesSigned inOwn inbox event preferences. OS push opt-in is separate.
PATCH/api/notification-preferencesSigned inChange own inbox event preferences.

#Push notifications

MethodPathWhoWhat it does
GET/api/pushSigned inOwn push opt-in and current-session binding; disabled until the server is configured.
POST/api/push/subscriptionsSigned inExplicitly consent to an encrypted push subscription bound to this login session.
PATCH/api/pushSigned inOwn opt-in preference; turning off removes own subscriptions and queued deliveries.
DELETE/api/push/subscriptions/:idSigned inRemove an own current-session subscription.

#MCP connector (app connections)

MethodPathWhoWhat it does
GET/api/connectors/remote/requests/:idSigned inInspect an OAuth request, bound to this user and login session.
POST/api/connectors/remote/requests/:idSigned inExplicitly allow or deny an external app connection.
GET/api/connectors/remoteSigned inList only this user’s external connections.
DELETE/api/connectors/remote/:idSigned inRevoke an own external connection and all of its tokens.

#System

MethodPathWhoWhat it does
GET/api/healthAnyoneLiveness for the menubar app, relay and update check. No private data.
GET/api/admin/diagnosticsOwnerRelay, disk, engine keys, queue, pf anchor, sandbox, backups.
GET/api/admin/updateOwnerCurrent / available version.
POST/api/admin/updateOwner + passwordBack up the DB, switch app/current, restart; roll back if the health check fails.
GET/api/admin/backupsOwnerBackups in .system/backups/.
POST/api/admin/backupOwnerBack up now (VACUUM INTO + team folder manifest diff).
POST/api/admin/restoreOwner + passwordRestore a backup (everything after it is lost; the UI shows how much).
POST/api/admin/exportOwnerExport chats / memories / files (optionally password-encrypted with age).
GET/api/admin/connectionOwnerRelay / direct connection state (from the relay client, component F).
GET/api/connect-infoSigned inOffice-network address and certificate fingerprint for the desktop app (pinning).
POST/api/connect-info/lan-failureSigned inThe desktop app could not use the office address (shown in Diagnostics).
PUT/api/admin/connectionOwner + passwordChange the connection mode.
GET/api/admin/storageAdminStorage use of the team disk (statfs), what uses it, the plan's disk when there is one.
GET/api/admin/planAdminThe plan (plan.json): limits, what the team uses of them, where to change it. null without a plan file.
GET/api/managed/noticesSigned inThe operator's notices (notices.json) meant for the caller's role, in the caller's language.

#Office Mac updates

MethodPathWhoWhat it does
GET/api/admin/office-updateAdminOffice mode automatic updates: version, channel, next window, last check (null outside office mode).
POST/api/admin/office-updateAdminOffice mode: update now, or turn automatic updates off / on.

#Plugins

MethodPathWhoWhat it does
GET/api/admin/pluginsAdminInstalled plugins, the official catalog for this server and the trust status.
POST/api/admin/plugins/inspectAdminCheck an uploaded .trinaplugin (signature, files, platform) and return what installing it asks for. Installs nothing.
POST/api/admin/plugins/inspect-sourceAdminThe same check for a catalog package or a file in the server import folder.
POST/api/admin/plugins/installAdminInstall (or update to) the inspected package after the admin approved its permissions; optionally enable it for the company.
POST/api/admin/plugins/:id/enableAdminTurn an installed plugin on for the whole company.
POST/api/admin/plugins/:id/disableAdminTurn it off for the company (stays installed).
POST/api/admin/plugins/:id/rollbackAdminGo back to the previously installed version (verified again).
DELETE/api/admin/plugins/:idAdminRemove the plugin and its files. Documents and edited copies of skills stay.

#Dev environment

MethodPathWhoWhat it does
GET/api/projects/:id/dev-envSigned inDev environment (experiment) of a project: setting, availability, the box state; for people who can read the folder.
PUT/api/projects/:id/dev-envAdminTurn the dev environment of a project on or off, who may use it, network and limits; turning on needs the current warning accepted (audited).
POST/api/projects/:id/dev-env/boxSigned inStop or restart the project box (people who may use it, and admins; audited).
POST/api/projects/:id/dev-env/previewSigned inA short-lived link to a dev server port of the box, on the separate preview origin (read access to the folder; audited).
GET/api/projects/:id/dev-env/activitySigned inBox audit of a project: AI commands, changed files, box and preview events (read access to the folder).
Trina AX is free software under AGPL-3.0-only. Icons: Lucide (ISC). Edit this page