Skip to main content

Profile

GET /profile

Get the current user's profile.

  • Auth required: Yes

Response

{
"id": "user_abc",
"username": "alice",
"displayName": "Alice",
"email": "alice@example.com",
"avatarText": "AL",
"role": "user",
"permissions": ["connections.create"],
"dismissedWarnings": []
}

PUT /profile

Update display name, email, or avatar.

  • Auth required: Yes

Request body

{
"displayName": "Alice Smith",
"email": "alice@example.com",
"avatarText": "AS"
}

Response

{ "success": true }

PUT /profile/password

Change the current user's password.

  • Auth required: Yes

Request body

{
"currentPassword": "old-password",
"newPassword": "new-password-min-8"
}

Response

{ "success": true }

GET /profile/ssh-prefs

Get SSH terminal preferences (font, cursor, theme, etc.).

  • Auth required: Yes

Response

{
"fontFamily": "monospace",
"fontSize": 14,
"cursorStyle": "block",
"cursorBlink": true,
"theme": "dark",
"scrollback": 1000
}

PUT /profile/ssh-prefs

Save SSH terminal preferences.

  • Auth required: Yes

Request body (all fields optional)

{
"fontFamily": "JetBrains Mono",
"fontSize": 15,
"cursorStyle": "bar",
"cursorBlink": false,
"theme": "dracula",
"scrollback": 5000
}

Response

{ "ok": true }

DELETE /profile/ssh-prefs

Reset SSH preferences to global defaults.

  • Auth required: Yes

Response

{ "ok": true }

GET /profile/mfa/status

Check whether MFA is currently enabled.

  • Auth required: Yes

Response

{ "enabled": false }

POST /profile/mfa/setup

Generate a TOTP secret and QR code to display in an authenticator app.

  • Auth required: Yes

Response

{
"secret": "BASE32SECRET",
"qrDataUrl": "data:image/png;base64,..."
}

POST /profile/mfa/verify

Confirm the TOTP code and enable MFA.

  • Auth required: Yes
  • Rate limited: 5 attempts / 5 min per user

Request body

{ "token": "123456" }

Response

{ "ok": true }

POST /profile/mfa/disable

Disable MFA (requires password confirmation).

  • Auth required: Yes

Request body

{ "password": "current-password" }

Response

{ "ok": true }

POST /profile/dismiss-warning

Dismiss a named warning banner so it no longer appears.

  • Auth required: Yes

Request body

{ "warning": "insecure-key" }

Response

{ "ok": true }

GET /profile/login-sessions

List all active login sessions for the current user.

  • Auth required: Yes

Response

{
"sessions": [
{
"id": "session_abc",
"browser": "Chrome 123",
"os": "Windows",
"ipAddress": "1.2.3.4",
"createdAt": "2024-01-01T00:00:00.000Z",
"lastUsedAt": "2024-01-02T00:00:00.000Z",
"isCurrent": true
}
]
}

DELETE /profile/login-sessions/:id

Revoke a specific login session.

  • Auth required: Yes

Response

{ "ok": true }

DELETE /profile/login-sessions

Revoke all sessions except the current one.

  • Auth required: Yes

Response

{ "ok": true }