/api/auth/sessionWho this request is, which workspaces it reaches and whether the installation still awaits its first access.
Answers 200 always, even with no credential at all: “there is nobody” is an answer, not a failure. It is how the interface decides between drawing the board, the login screen or the first-access screen.
Request
curl -s http://localhost:3000/api/auth/sessionconst response = await fetch("http://localhost:3000/api/auth/session", {
credentials: "include",
});
const { user, setupRequired, publicMode } = await response.json();Response200
{
"user": {
"id": "cmt94cjx5000vql01imegem2r",
"name": "Ana",
"email": "[email protected]",
"role": "ADMIN",
"avatarUrl": null,
"jobTitle": null,
"timezone": "",
"notifyBackupReady": true,
"hasApiToken": true,
"apiTokenCreatedAt": "2026-08-25T20:37:29.998Z",
"apiTokenLast4": "mGQ",
"passwordPending": false,
"lastLoginAt": "2026-08-27T19:50:42.947Z",
"createdAt": "2026-08-25T20:29:57.593Z",
"tenants": [
{
"id": "cmsp4djx60002p801o7ybpkv7",
"name": "Pessoal",
"color": "amber",
"role": "ADMIN",
"membership": null
}
]
},
"setupRequired": false,
"publicMode": false
}Error responses
publicMode: true means the installation waives login: the identity is an anonymous visitor with role ADMIN and no record in the database.