diff --git a/src/server/api/index.ts b/src/server/api/index.ts
index 04fc8759f..17a2579f2 100644
--- a/src/server/api/index.ts
+++ b/src/server/api/index.ts
@@ -56,8 +56,6 @@ router.use(require('./service/discord').routes());
 router.use(require('./service/github').routes());
 router.use(require('./service/twitter').routes());
 
-router.use(require('./mastodon').routes());
-
 // Return 404 for unknown API
 router.all('*', async ctx => {
 	ctx.status = 404;
diff --git a/src/server/api/mastodon/emoji.ts b/src/server/api/mastodon/emoji.ts
deleted file mode 100644
index df19c6e75..000000000
--- a/src/server/api/mastodon/emoji.ts
+++ /dev/null
@@ -1,35 +0,0 @@
-export type IMastodonEmoji = {
-	shortcode: string,
-	url: string,
-	static_url: string,
-	visible_in_picker: boolean
-};
-
-export async function toMastodonEmojis(emoji: any): Promise<IMastodonEmoji[]> {
-	return [{
-		shortcode: emoji.name,
-		url: emoji.url,
-		static_url: emoji.url, // TODO: Implement ensuring static emoji
-		visible_in_picker: true
-	}, ...(emoji.aliases as string[] || []).map(x => ({
-		shortcode: x,
-		url: emoji.url,
-		static_url: emoji.url,
-		visible_in_picker: true
-	}))];
-}
-
-export function toMisskeyEmojiSync(emoji: IMastodonEmoji) {
-	return {
-		name: emoji.shortcode,
-		url: emoji.url
-	};
-}
-
-export function toMisskeyEmojiWithAliasesSync(emoji: IMastodonEmoji, ...aliases: string[]) {
-	return {
-		name: emoji.shortcode,
-		aliases,
-		url: emoji.url
-	};
-}
diff --git a/src/server/api/mastodon/index.ts b/src/server/api/mastodon/index.ts
deleted file mode 100644
index 3680f22d7..000000000
--- a/src/server/api/mastodon/index.ts
+++ /dev/null
@@ -1,98 +0,0 @@
-import * as Router from 'koa-router';
-import User from '../../../models/user';
-import { toASCII } from 'punycode';
-import config from '../../../config';
-import { ObjectID } from 'bson';
-import Emoji from '../../../models/emoji';
-import { toMastodonEmojis } from './emoji';
-import fetchMeta from '../../../misc/fetch-meta';
-import * as pkg from '../../../../package.json';
-
-// Init router
-const router = new Router();
-
-router.get('/v1/custom_emojis', async ctx => ctx.body =
-	(await Emoji.find({ host: null }, {
-		fields: {
-			_id: false
-		}
-	})).map(x => toMastodonEmojis(x)));
-
-router.get('/v1/instance', async ctx => { // TODO: This is a temporary implementation. Consider creating helper methods!
-	const meta = await fetchMeta();
-	const { originalNotesCount, originalUsersCount } = meta.stats;
-	const domains = await User.distinct('host', { host: { $ne: null } }) as any as [] || [];
-	const maintainer = await User.findOne({ isAdmin: true }) || {
-		_id: ObjectID.createFromTime(0),
-		username: '', // TODO: Consider making this better!
-		host: config.host,
-		name: '',
-		isLocked: false,
-		isBot: false,
-		createdAt: new Date(0),
-		description: '',
-		avatarUrl: '',
-		bannerUrl: '',
-		followersCount: 0,
-		followingCount: 0,
-		notesCount: 0
-	};
-	const acct = maintainer.host ? `${maintainer.username}@${maintainer.host}` : maintainer.username;
-	const emojis = (await Emoji.find({ host: null }, {
-		fields: {
-			_id: false
-		}
-	})).map(toMastodonEmojis);
-
-	ctx.body = {
-		uri: config.hostname,
-		title: meta.name || 'Misskey',
-		description: meta.description || '',
-		email: meta.maintainer.email,
-		version: `0.0.0 (compatible; Misskey ${pkg.version})`, // TODO: commit hash
-		thumbnail: meta.bannerUrl,
-		/*
-		urls: {
-			streaming_api: config.ws_url + '/mastodon' // TODO: Implement compatible streaming API
-		}, */
-		stats: {
-			user_count: originalUsersCount,
-			status_count: originalNotesCount,
-			domain_count: domains.length
-		},
-		languages: meta.langs || [ 'ja' ],
-		contact_account: {
-			id: maintainer._id,
-			username: maintainer.username,
-			acct: acct,
-			display_name: maintainer.name || '',
-			locked: maintainer.isLocked,
-			bot: maintainer.isBot,
-			created_at: maintainer.createdAt,
-			note: maintainer.description,
-			url: `${config.url}/@${acct}`,
-			avatar: maintainer.avatarUrl || '',
-			/*
-			avatar_static: maintainer.avatarUrl || '', // TODO: Implement static avatar url (ensure non-animated GIF)
-			*/
-			header: maintainer.bannerUrl || '',
-			/*
-			header_static: maintainer.bannerUrl || '', // TODO: Implement static header url (ensure non-animated GIF)
-			*/
-			followers_count: maintainer.followersCount,
-			following_count: maintainer.followingCount,
-			statuses_count: maintainer.notesCount,
-			emojis: emojis,
-			moved: null,
-			fields: null
-		}
-	};
-});
-
-router.get('/v1/instance/peers', async ctx => {
-	const peers = await User.distinct('host', { host: { $ne: null } }) as any as string[];
-	const punyCodes = peers.map(peer => toASCII(peer));
-	ctx.body = punyCodes;
-});
-
-module.exports = router;