diff --git a/CHANGELOG.md b/CHANGELOG.md
index 10398b1778..92d0cc5da9 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -7,6 +7,7 @@ unreleased
 * アンテナの受信ソースにグループを指定できるように
 * 時計ウィジェットを追加
 * ログアウトせずに新しいアカウントを追加できるように
+* APIキー設定を実装
 
 ### 🐛Fixes
 * v12アップデート後にトップページアクセスでOops!になっちゃうのを修正
diff --git a/locales/ja-JP.yml b/locales/ja-JP.yml
index 7342a92d5b..a5ad1539d9 100644
--- a/locales/ja-JP.yml
+++ b/locales/ja-JP.yml
@@ -399,6 +399,7 @@ tags: "タグ"
 docSource: "このドキュメントのソース"
 createAccount: "アカウントを作成"
 existingAcount: "既存のアカウント"
+regenerate: "再生成"
 
 _ago:
   unknown: "謎"
diff --git a/src/client/pages/settings/api.vue b/src/client/pages/settings/api.vue
new file mode 100644
index 0000000000..f394c826de
--- /dev/null
+++ b/src/client/pages/settings/api.vue
@@ -0,0 +1,46 @@
+<template>
+<section class="_card">
+	<div class="_title"><fa :icon="faKey"/> API</div>
+	<div class="_content">
+		<mk-input :value="$store.state.i.token" readonly>
+			<span>{{ $t('token') }}</span>
+		</mk-input>
+		<mk-button @click="regenerateToken"><fa :icon="faSyncAlt"/> {{ $t('regenerate') }}</mk-button>
+	</div>
+</section>
+</template>
+
+<script lang="ts">
+import Vue from 'vue';
+import { faKey, faSyncAlt } from '@fortawesome/free-solid-svg-icons';
+import i18n from '../../i18n';
+import MkButton from '../../components/ui/button.vue';
+import MkInput from '../../components/ui/input.vue';
+
+export default Vue.extend({
+	i18n,
+	components: {
+		MkButton, MkInput
+	},
+	data() {
+		return {
+			faKey, faSyncAlt
+		};
+	},
+	methods: {
+		regenerateToken() {
+			this.$root.dialog({
+				title: this.$t('password'),
+				input: {
+					type: 'password'
+				}
+			}).then(({ canceled, result: password }) => {
+				if (canceled) return;
+				this.$root.api('i/regenerate_token', {
+					password: password
+				});
+			});
+		},
+	}
+});
+</script>
diff --git a/src/client/pages/settings/index.vue b/src/client/pages/settings/index.vue
index 1a00c65760..aa827aa949 100644
--- a/src/client/pages/settings/index.vue
+++ b/src/client/pages/settings/index.vue
@@ -14,6 +14,7 @@
 	<x-security/>
 	<x-2fa/>
 	<x-integration/>
+	<x-api/>
 
 	<mk-button @click="cacheClear()" primary class="cacheClear">{{ $t('cacheClear') }}</mk-button>
 	<mk-button @click="$root.signout()" primary class="logout">{{ $t('logout') }}</mk-button>
@@ -34,6 +35,7 @@ import XSecurity from './security.vue';
 import XTheme from './theme.vue';
 import X2fa from './2fa.vue';
 import XIntegration from './integration.vue';
+import XApi from './api.vue';
 import MkButton from '../../components/ui/button.vue';
 
 export default Vue.extend({
@@ -55,6 +57,7 @@ export default Vue.extend({
 		XTheme,
 		X2fa,
 		XIntegration,
+		XApi,
 		MkButton,
 	},