diff --git a/src/server/api/api-handler.ts b/src/server/api/api-handler.ts
index 5cd8cf1e2a..fdfaea1ff2 100644
--- a/src/server/api/api-handler.ts
+++ b/src/server/api/api-handler.ts
@@ -3,11 +3,9 @@ import * as Koa from 'koa';
 import { IEndpoint } from './endpoints';
 import authenticate from './authenticate';
 import call from './call';
-import { IUser } from '../../models/user';
-import { IApp } from '../../models/app';
 import { ApiError } from './error';
 
-export default async (endpoint: IEndpoint, ctx: Koa.BaseContext) => {
+export default (endpoint: IEndpoint, ctx: Koa.BaseContext) => new Promise((res) => {
 	const body = ctx.is('multipart/form-data') ? (ctx.req as any).body : ctx.request.body;
 
 	const reply = (x?: any, y?: ApiError) => {
@@ -19,36 +17,22 @@ export default async (endpoint: IEndpoint, ctx: Koa.BaseContext) => {
 		} else {
 			ctx.body = x;
 		}
+		res();
 	};
 
-	let user: IUser;
-	let app: IApp;
-
 	// Authentication
-	try {
-		[user, app] = await authenticate(body['i']);
-	} catch (e) {
+	authenticate(body['i']).then(([user, app]) => {
+		// API invoking
+		call(endpoint.name, user, app, body, (ctx.req as any).file).then(res => {
+			reply(res);
+		}).catch(e => {
+			reply(e.kind == 'client' ? 400 : 500, e);
+		});
+	}).catch(() => {
 		reply(403, new ApiError({
 			message: 'Authentication failed. Please ensure your token is correct.',
 			code: 'AUTHENTICATION_FAILED',
 			id: 'b0a7f5f8-dc2f-4171-b91f-de88ad238e14'
 		}));
-		return;
-	}
-
-	let res;
-
-	// API invoking
-	try {
-		res = await call(endpoint.name, user, app, body, (ctx.req as any).file);
-	} catch (e) {
-		if (e.kind == 'client') {
-			reply(400, e);
-		} else {
-			reply(500, e);
-		}
-		return;
-	}
-
-	reply(res);
-};
+	});
+});