diff --git a/packages/editor-ui/src/api/api-keys.ts b/packages/editor-ui/src/api/api-keys.ts
new file mode 100644
index 0000000000..9d0a03660a
--- /dev/null
+++ b/packages/editor-ui/src/api/api-keys.ts
@@ -0,0 +1,14 @@
+import {IRestApiContext} from "@/Interface";
+import {makeRestApiRequest} from "@/api/helpers";
+
+export function getApiKey(context: IRestApiContext): Promise<{ apiKey: string | null }> {
+ return makeRestApiRequest(context, 'GET', '/me/api-key');
+}
+
+export function createApiKey(context: IRestApiContext): Promise<{ apiKey: string | null }> {
+ return makeRestApiRequest(context, 'POST', '/users/me/api-key');
+}
+
+export function deleteApiKey(context: IRestApiContext): Promise<{ success: boolean }> {
+ return makeRestApiRequest(context, 'DELETE', '/me/api-key');
+}
diff --git a/packages/editor-ui/src/api/settings.ts b/packages/editor-ui/src/api/settings.ts
index f61814a737..2be67dbab3 100644
--- a/packages/editor-ui/src/api/settings.ts
+++ b/packages/editor-ui/src/api/settings.ts
@@ -1,4 +1,4 @@
-import { IRestApiContext, IN8nPrompts, IN8nValueSurveyData, IN8nUISettings } from '../Interface';
+import {IRestApiContext, IN8nPrompts, IN8nValueSurveyData, IN8nUISettings} from '../Interface';
import { makeRestApiRequest, get, post } from './helpers';
import { N8N_IO_BASE_URL } from '@/constants';
diff --git a/packages/editor-ui/src/components/SettingsSidebar.vue b/packages/editor-ui/src/components/SettingsSidebar.vue
index 55cf95c043..da15882587 100644
--- a/packages/editor-ui/src/components/SettingsSidebar.vue
+++ b/packages/editor-ui/src/components/SettingsSidebar.vue
@@ -19,6 +19,12 @@
{{ $locale.baseText('settings.users') }}
+
+
+
+
+ {{ $locale.baseText('settings.api') }}
+
diff --git a/packages/editor-ui/src/constants.ts b/packages/editor-ui/src/constants.ts
index f6df9933fd..8d7f09e806 100644
--- a/packages/editor-ui/src/constants.ts
+++ b/packages/editor-ui/src/constants.ts
@@ -234,5 +234,6 @@ export enum VIEWS {
CHANGE_PASSWORD = "ChangePasswordView",
USERS_SETTINGS = "UsersSettings",
PERSONAL_SETTINGS = "PersonalSettings",
+ API_SETTINGS = "APISettings",
NOT_FOUND = "NotFoundView",
}
diff --git a/packages/editor-ui/src/plugins/i18n/locales/en.json b/packages/editor-ui/src/plugins/i18n/locales/en.json
index 07d529d4c0..352b189b12 100644
--- a/packages/editor-ui/src/plugins/i18n/locales/en.json
+++ b/packages/editor-ui/src/plugins/i18n/locales/en.json
@@ -647,6 +647,18 @@
"settings.users.usersEmailedError": "Couldn't send invite email",
"settings.users.usersInvited": "Users invited",
"settings.users.usersInvitedError": "Could not invite users",
+ "settings.api": "API",
+ "settings.api.create.title": "Set up your API Key",
+ "settings.api.create.description": "You can use API keys for accessing n8n's",
+ "settings.api.create.description.link": "REST API",
+ "settings.api.create.button": "Create an API Key",
+ "settings.api.create.button.loading": "Creating API Key...",
+ "settings.api.error.title": "Something went wrong",
+ "settings.api.error.get": "Could not check if an api key already exists.",
+ "settings.api.error.create": "Creating the API Key failed.",
+ "settings.api.error.delete": "Deleting the API Key failed.",
+ "settings.api.view.info": "Use your API Key to access n8n's REST API to build your own integrations.",
+ "settings.api.view.myKey": "My API Key",
"settings.version": "Version",
"showMessage.cancel": "@:_reusableBaseText.cancel",
"showMessage.ok": "OK",
diff --git a/packages/editor-ui/src/plugins/icons.ts b/packages/editor-ui/src/plugins/icons.ts
index 2363b46afc..8047e64c61 100644
--- a/packages/editor-ui/src/plugins/icons.ts
+++ b/packages/editor-ui/src/plugins/icons.ts
@@ -64,6 +64,7 @@ import {
faPencilAlt,
faPlay,
faPlayCircle,
+ faPlug,
faPlus,
faPlusCircle,
faPlusSquare,
@@ -166,6 +167,7 @@ addIcon(faPen);
addIcon(faPencilAlt);
addIcon(faPlay);
addIcon(faPlayCircle);
+addIcon(faPlug);
addIcon(faPlus);
addIcon(faPlusCircle);
addIcon(faPlusSquare);
diff --git a/packages/editor-ui/src/router.ts b/packages/editor-ui/src/router.ts
index 18c3c61a31..331e3e1128 100644
--- a/packages/editor-ui/src/router.ts
+++ b/packages/editor-ui/src/router.ts
@@ -8,6 +8,7 @@ import MainSidebar from '@/components/MainSidebar.vue';
import NodeView from '@/views/NodeView.vue';
import SettingsPersonalView from './views/SettingsPersonalView.vue';
import SettingsUsersView from './views/SettingsUsersView.vue';
+import SettingsApiView from './views/SettingsApiView.vue';
import SetupView from './views/SetupView.vue';
import SigninView from './views/SigninView.vue';
import SignupView from './views/SignupView.vue';
@@ -360,6 +361,23 @@ const router = new Router({
},
},
},
+ {
+ path: '/settings/api',
+ name: VIEWS.API_SETTINGS,
+ components: {
+ default: SettingsApiView,
+ },
+ meta: {
+ telemetry: {
+ pageCategory: 'settings',
+ },
+ permissions: {
+ allow: {
+ loginStatus: [LOGIN_STATUS.LoggedIn],
+ },
+ },
+ },
+ },
{
path: '*',
name: VIEWS.NOT_FOUND,
diff --git a/packages/editor-ui/src/views/SettingsApiView.vue b/packages/editor-ui/src/views/SettingsApiView.vue
new file mode 100644
index 0000000000..750b77d1af
--- /dev/null
+++ b/packages/editor-ui/src/views/SettingsApiView.vue
@@ -0,0 +1,124 @@
+
+
+
+
+
+ {{ $locale.baseText('settings.api') }}
+
+
+
+ Hello
+
+
+
+
+
+
+
+
+
+