diff --git a/docs/api/entities/user.pug b/docs/api/entities/user.pug
index f5d4be2666..ff3b326bc0 100644
--- a/docs/api/entities/user.pug
+++ b/docs/api/entities/user.pug
@@ -38,7 +38,7 @@ block content
 				tr.nullable
 					td birthday
 					td String
-					td 誕生日
+					td 誕生日(YYYY-MM-DD)
 				tr
 					td created_at
 					td Date
diff --git a/src/api/endpoints/i/update.js b/src/api/endpoints/i/update.js
index a6b68cf01e..3a6b9da905 100644
--- a/src/api/endpoints/i/update.js
+++ b/src/api/endpoints/i/update.js
@@ -5,6 +5,7 @@
  */
 import * as mongo from 'mongodb';
 import User from '../../models/user';
+import { isValidBirthday } from '../../models/user';
 import serialize from '../../serializers/user';
 import event from '../../event';
 
@@ -50,6 +51,16 @@ module.exports = async (params, user, _, isSecure) =>
 		user.bio = bio;
 	}
 
+	// Get 'birthday' parameter
+	const birthday = params.birthday;
+	if (birthday != null) {
+		if (!isValidBirthday(birthday)) {
+			return rej('invalid birthday');
+		}
+
+		user.birthday = birthday;
+	}
+
 	// Get 'avatar_id' parameter
 	const avatar = params.avatar_id;
 	if (avatar !== undefined && avatar !== null) {
diff --git a/src/api/models/user.ts b/src/api/models/user.ts
index 1742f5cafb..ac59e2bfc3 100644
--- a/src/api/models/user.ts
+++ b/src/api/models/user.ts
@@ -8,3 +8,7 @@ export default collection;
 export function validateUsername(username: string): boolean {
 	return /^[a-zA-Z0-9\-]{3,20}$/.test(username);
 }
+
+export function isValidBirthday(birthday: string): boolean {
+	return /^([0-9]{4})\-([0-9]{2})-([0-9]{2})$/.test(birthday);
+}