diff --git a/packages/backend/src/core/entities/BlockingEntityService.ts b/packages/backend/src/core/entities/BlockingEntityService.ts
index 77e8cae189..25d31ad451 100644
--- a/packages/backend/src/core/entities/BlockingEntityService.ts
+++ b/packages/backend/src/core/entities/BlockingEntityService.ts
@@ -7,6 +7,7 @@ import type { Blocking } from '@/models/entities/Blocking.js';
 import type { User } from '@/models/entities/User.js';
 import { bindThis } from '@/decorators.js';
 import { UserEntityService } from './UserEntityService.js';
+import { Serialized } from 'schema-type';
 
 @Injectable()
 export class BlockingEntityService {
@@ -22,7 +23,7 @@ export class BlockingEntityService {
 	public async pack(
 		src: Blocking['id'] | Blocking,
 		me?: { id: User['id'] } | null | undefined,
-	): Promise<Packed<'Blocking'>> {
+	): Promise<Serialized<Packed<'Blocking'>>> {
 		const blocking = typeof src === 'object' ? src : await this.blockingsRepository.findOneByOrFail({ id: src });
 
 		return await awaitAll({
@@ -39,7 +40,7 @@ export class BlockingEntityService {
 	public packMany(
 		blockings: any[],
 		me: { id: User['id'] },
-	) {
+	): Promise<Serialized<Packed<'Blocking'>>[]> {
 		return Promise.all(blockings.map(x => this.pack(x, me)));
 	}
 }
diff --git a/packages/backend/src/server/api/endpoints/blocking/delete.ts b/packages/backend/src/server/api/endpoints/blocking/delete.ts
index 46dd26a45a..4a7de73e8a 100644
--- a/packages/backend/src/server/api/endpoints/blocking/delete.ts
+++ b/packages/backend/src/server/api/endpoints/blocking/delete.ts
@@ -8,56 +8,10 @@ import { DI } from '@/di-symbols.js';
 import { ApiError } from '../../error.js';
 import { GetterService } from '@/server/api/GetterService.js';
 
-export const meta = {
-	tags: ['account'],
-
-	limit: {
-		duration: ms('1hour'),
-		max: 100,
-	},
-
-	requireCredential: true,
-
-	kind: 'write:blocks',
-
-	errors: {
-		noSuchUser: {
-			message: 'No such user.',
-			code: 'NO_SUCH_USER',
-			id: '8621d8bf-c358-4303-a066-5ea78610eb3f',
-		},
-
-		blockeeIsYourself: {
-			message: 'Blockee is yourself.',
-			code: 'BLOCKEE_IS_YOURSELF',
-			id: '06f6fac6-524b-473c-a354-e97a40ae6eac',
-		},
-
-		notBlocking: {
-			message: 'You are not blocking that user.',
-			code: 'NOT_BLOCKING',
-			id: '291b2efa-60c6-45c0-9f6a-045c8f9b02cd',
-		},
-	},
-
-	res: {
-		type: 'object',
-		optional: false, nullable: false,
-		ref: 'UserDetailedNotMe',
-	},
-} as const;
-
-export const paramDef = {
-	type: 'object',
-	properties: {
-		userId: { type: 'string', format: 'misskey:id' },
-	},
-	required: ['userId'],
-} as const;
-
 // eslint-disable-next-line import/no-default-export
 @Injectable()
-export default class extends Endpoint<typeof meta, typeof paramDef> {
+export default class extends Endpoint<'blocking/delete'> {
+	name = 'blocking/delete' as const;
 	constructor(
 		@Inject(DI.usersRepository)
 		private usersRepository: UsersRepository,
@@ -69,17 +23,17 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 		private getterService: GetterService,
 		private userBlockingService: UserBlockingService,
 	) {
-		super(meta, paramDef, async (ps, me) => {
+		super(async (ps, me) => {
 			const blocker = await this.usersRepository.findOneByOrFail({ id: me.id });
 
 			// Check if the blockee is yourself
 			if (me.id === ps.userId) {
-				throw new ApiError(meta.errors.blockeeIsYourself);
+				throw new ApiError(this.meta.errors.blockeeIsYourself);
 			}
 
 			// Get blockee
 			const blockee = await this.getterService.getUser(ps.userId).catch(err => {
-				if (err.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(meta.errors.noSuchUser);
+				if (err.id === '15348ddd-432d-49c2-8a5a-8069753becff') throw new ApiError(this.meta.errors.noSuchUser);
 				throw err;
 			});
 
@@ -90,7 +44,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 			});
 
 			if (exist == null) {
-				throw new ApiError(meta.errors.notBlocking);
+				throw new ApiError(this.meta.errors.notBlocking);
 			}
 
 			// Delete blocking
diff --git a/packages/backend/src/server/api/endpoints/blocking/list.ts b/packages/backend/src/server/api/endpoints/blocking/list.ts
index 969aae06f9..1e3faf9c1e 100644
--- a/packages/backend/src/server/api/endpoints/blocking/list.ts
+++ b/packages/backend/src/server/api/endpoints/blocking/list.ts
@@ -5,37 +5,10 @@ import { QueryService } from '@/core/QueryService.js';
 import { BlockingEntityService } from '@/core/entities/BlockingEntityService.js';
 import { DI } from '@/di-symbols.js';
 
-export const meta = {
-	tags: ['account'],
-
-	requireCredential: true,
-
-	kind: 'read:blocks',
-
-	res: {
-		type: 'array',
-		optional: false, nullable: false,
-		items: {
-			type: 'object',
-			optional: false, nullable: false,
-			ref: 'Blocking',
-		},
-	},
-} as const;
-
-export const paramDef = {
-	type: 'object',
-	properties: {
-		limit: { type: 'integer', minimum: 1, maximum: 100, default: 30 },
-		sinceId: { type: 'string', format: 'misskey:id' },
-		untilId: { type: 'string', format: 'misskey:id' },
-	},
-	required: [],
-} as const;
-
 // eslint-disable-next-line import/no-default-export
 @Injectable()
-export default class extends Endpoint<typeof meta, typeof paramDef> {
+export default class extends Endpoint<'blocking/list'> {
+	name = 'blocking/list' as const;
 	constructor(
 		@Inject(DI.blockingsRepository)
 		private blockingsRepository: BlockingsRepository,
@@ -43,7 +16,7 @@ export default class extends Endpoint<typeof meta, typeof paramDef> {
 		private blockingEntityService: BlockingEntityService,
 		private queryService: QueryService,
 	) {
-		super(meta, paramDef, async (ps, me) => {
+		super(async (ps, me) => {
 			const query = this.queryService.makePaginationQuery(this.blockingsRepository.createQueryBuilder('blocking'), ps.sinceId, ps.untilId)
 				.andWhere('blocking.blockerId = :meId', { meId: me.id });
 
diff --git a/packages/misskey-js/src/endpoints.ts b/packages/misskey-js/src/endpoints.ts
index 96e3714925..fb291a9a37 100644
--- a/packages/misskey-js/src/endpoints.ts
+++ b/packages/misskey-js/src/endpoints.ts
@@ -2522,6 +2522,76 @@ export const endpoints = {
 			},
 		}],
 	},
+	'blocking/delete': {
+		tags: ['account'],
+	
+		limit: {
+			duration: ms('1hour'),
+			max: 100,
+		},
+	
+		requireCredential: true,
+	
+		kind: 'write:blocks',
+	
+		errors: {
+			noSuchUser: {
+				message: 'No such user.',
+				code: 'NO_SUCH_USER',
+				id: '8621d8bf-c358-4303-a066-5ea78610eb3f',
+			},
+	
+			blockeeIsYourself: {
+				message: 'Blockee is yourself.',
+				code: 'BLOCKEE_IS_YOURSELF',
+				id: '06f6fac6-524b-473c-a354-e97a40ae6eac',
+			},
+	
+			notBlocking: {
+				message: 'You are not blocking that user.',
+				code: 'NOT_BLOCKING',
+				id: '291b2efa-60c6-45c0-9f6a-045c8f9b02cd',
+			},
+		},
+
+		defines: [{
+			req: {
+				type: 'object',
+				properties: {
+					userId: { type: 'string', format: 'misskey:id' },
+				},
+				required: ['userId'],
+			},
+			res: {
+				$ref: 'https://misskey-hub.net/api/schemas/UserDetailedNotMe',
+			},
+		}],
+	},
+	'blocking/list': {
+		tags: ['account'],
+	
+		requireCredential: true,
+	
+		kind: 'read:blocks',
+
+		defines: [{
+			req: {
+				type: 'object',
+				properties: {
+					limit: { type: 'integer', minimum: 1, maximum: 100, default: 30 },
+					sinceId: { type: 'string', format: 'misskey:id' },
+					untilId: { type: 'string', format: 'misskey:id' },
+				},
+				required: [],
+			},
+			res: {
+				type: 'array',
+				items: {
+					$ref: 'https://misskey-hub.net/api/schemas/Blocking',
+				},
+			},
+		}],
+	},
 	//#endregion
 } as const satisfies { [x: string]: IEndpointMeta; };