diff --git a/packages/backend/src/misc/is-user-related.ts b/packages/backend/src/misc/is-user-related.ts
index edd65a3c1cc1370977985f91fd3c5f985aece476..ae8f4116cc0e1fd4ff18a5788a6e923de6358ff7 100644
--- a/packages/backend/src/misc/is-user-related.ts
+++ b/packages/backend/src/misc/is-user-related.ts
@@ -3,8 +3,8 @@
  * SPDX-License-Identifier: AGPL-3.0-only
  */
 
-export function isUserRelated(note: any, userIds: Set<string>): boolean {
-	if (userIds.has(note.userId)) {
+export function isUserRelated(note: any, userIds: Set<string>, ignoreAuthor = false): boolean {
+	if (userIds.has(note.userId) && !ignoreAuthor) {
 		return true;
 	}
 
diff --git a/packages/backend/src/server/api/endpoints/users/notes.ts b/packages/backend/src/server/api/endpoints/users/notes.ts
index 6be391be4e44e4c87b0a4e1e299031e673163cba..09adcf20aa5735667a8e2ebe9be132431262e600 100644
--- a/packages/backend/src/server/api/endpoints/users/notes.ts
+++ b/packages/backend/src/server/api/endpoints/users/notes.ts
@@ -13,6 +13,7 @@ import { DI } from '@/di-symbols.js';
 import { GetterService } from '@/server/api/GetterService.js';
 import { CacheService } from '@/core/CacheService.js';
 import { IdService } from '@/core/IdService.js';
+import { isUserRelated } from '@/misc/is-user-related.js';
 import { ApiError } from '../../error.js';
 
 export const meta = {
@@ -70,6 +71,12 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 		private idService: IdService,
 	) {
 		super(meta, paramDef, async (ps, me) => {
+			const [
+				userIdsWhoMeMuting,
+			] = me ? await Promise.all([
+				this.cacheService.userMutingsCache.fetch(me.id),
+			]) : [new Set<string>()];
+
 			let timeline: MiNote[] = [];
 
 			const limit = ps.limit + (ps.untilId ? 1 : 0); // untilIdに指定したものも含まれるため+1
@@ -118,6 +125,8 @@ export default class extends Endpoint<typeof meta, typeof paramDef> { // eslint-
 			timeline = await query.getMany();
 
 			timeline = timeline.filter(note => {
+				if (me && isUserRelated(note, userIdsWhoMeMuting, true)) return false;
+
 				if (note.renoteId) {
 					if (note.text == null && note.fileIds.length === 0 && !note.hasPoll) {
 						if (ps.withRenotes === false) return false;
diff --git a/packages/backend/test/e2e/timelines.ts b/packages/backend/test/e2e/timelines.ts
index 08af5bf97a28dca0d7a33d2942e3f9b44016dbb2..d606c6729b1f9032155183f6ad4725f1452f3187 100644
--- a/packages/backend/test/e2e/timelines.ts
+++ b/packages/backend/test/e2e/timelines.ts
@@ -16,7 +16,7 @@ function genHost() {
 }
 
 function waitForPushToTl() {
-	return sleep(100);
+	return sleep(300);
 }
 
 let app: INestApplicationContext;