api keys live in profile, not integrations

Reported by the owner, who went looking for them in user management and then in profile, and found
them in neither. They were under Integrations.

A key is not an integration with anything. It is a second way to present the authority the account
already has, and the permission registry already says exactly that: `/api-keys` is `core`, sitting
beside `/user` and `/dock`, with the comment "a key is not new authority". Profile, next to the
password it stands in for, is where somebody looks.

Moved rather than duplicated, and the route moves with it — /settings/profile/api-keys. Nothing
linked to the old path, so there is no redirect to keep.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-08-20 23:15:36 +00:00
co-authored by Claude Opus 5
parent 10feb76880
commit c4042886fc
3 changed files with 13 additions and 9 deletions
@@ -11,7 +11,6 @@ import { GoogleOAuthConfig } from './GoogleOAuthConfig';
import { BrowserRelay } from './BrowserRelay';
import { ApifyConfig } from './ApifyConfig';
import { DavAppPasswords } from './DavAppPasswords';
import { ApiKeys } from './ApiKeys';
const BASE_PATH = '/settings/integrations';
@@ -51,13 +50,6 @@ const personalSections: SettingsSection[] = [
description: 'Per-device passwords for CalDAV/CardDAV clients',
content: <DavAppPasswords />,
},
{
key: 'api-keys',
icon: KeyRound,
title: 'API keys',
description: 'Per-app keys that sign in as you, revocable one at a time',
content: <ApiKeys />,
},
{
key: 'browser-relay',
icon: Globe,
@@ -1,11 +1,12 @@
import { useMemo } from 'react';
import { User, Lock, Globe, LayoutGrid, Volume2 } from 'lucide-react';
import { User, Lock, Globe, KeyRound, LayoutGrid, Volume2 } from 'lucide-react';
import type { LayoutNode, PanelComponents } from 'officerdev';
import { WorkspaceLayout } from 'officerdev';
import { SettingsRoute, createSettingsPanelComponents, type SettingsSection } from '../SettingsPanel';
import { UserData } from './UserData';
import { ChangePassword } from './ChangePassword';
import { ApiKeys } from './ApiKeys';
import { Languages } from './Languages';
import { DockSettings } from './DockSettings';
import { VoicePreference } from './VoicePreference';
@@ -21,6 +22,17 @@ const sections: SettingsSection[] = [
description: 'Update your password',
content: <ChangePassword />,
},
// Beside the password rather than under Integrations, where it was until 2026-08-21. A key is not an
// integration with anything — it is a second way to present the authority this account already has, and
// the permission registry says so: `/api-keys` is `core`, sitting with `/user` and `/dock`. Somebody
// looking for it went to user management and then to profile, which is where it should have been.
{
key: 'api-keys',
icon: KeyRound,
title: 'API keys',
description: 'Per-app keys that sign in as you, revocable one at a time',
content: <ApiKeys />,
},
{
key: 'languages',
icon: Globe,