diff --git a/packages/backend/src/server/api/endpoints/users/notes.ts b/packages/backend/src/server/api/endpoints/users/notes.ts
index 35b22af1da..4a3d2e5be4 100644
--- a/packages/backend/src/server/api/endpoints/users/notes.ts
+++ b/packages/backend/src/server/api/endpoints/users/notes.ts
@@ -72,80 +72,84 @@ 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>()];
+			const isRangeSpecified = (ps.sinceId != null || ps.sinceDate != null) && (ps.untilId != null || ps.untilDate != null);
 
-			const limit = ps.limit + (ps.untilId ? 1 : 0) + (ps.sinceId ? 1 : 0); // untilIdに指定したものも含まれるため+1
+			if (isRangeSpecified || !(ps.sinceId != null || ps.sinceDate != null)) {
+				const [
+					userIdsWhoMeMuting,
+				] = me ? await Promise.all([
+					this.cacheService.userMutingsCache.fetch(me.id),
+				]) : [new Set<string>()];
 
-			const [noteIdsRes, repliesNoteIdsRes, channelNoteIdsRes] = await Promise.all([
-				this.redisForTimelines.xrevrange(
-					ps.withFiles ? `userTimelineWithFiles:${ps.userId}` : `userTimeline:${ps.userId}`,
-					ps.untilId ? this.idService.parse(ps.untilId).date.getTime() : ps.untilDate ?? '+',
-					ps.sinceId ? this.idService.parse(ps.sinceId).date.getTime() : ps.sinceDate ?? '-',
-					'COUNT', limit,
-				).then(res => res.map(x => x[1][1]).filter(x => x !== ps.untilId && x !== ps.sinceId)),
-				ps.withReplies
-					? this.redisForTimelines.xrevrange(
-						`userTimelineWithReplies:${ps.userId}`,
+				const limit = ps.limit + (ps.untilId ? 1 : 0) + (ps.sinceId ? 1 : 0); // untilIdに指定したものも含まれるため+1
+
+				const [noteIdsRes, repliesNoteIdsRes, channelNoteIdsRes] = await Promise.all([
+					this.redisForTimelines.xrevrange(
+						ps.withFiles ? `userTimelineWithFiles:${ps.userId}` : `userTimeline:${ps.userId}`,
 						ps.untilId ? this.idService.parse(ps.untilId).date.getTime() : ps.untilDate ?? '+',
 						ps.sinceId ? this.idService.parse(ps.sinceId).date.getTime() : ps.sinceDate ?? '-',
 						'COUNT', limit,
-					).then(res => res.map(x => x[1][1]).filter(x => x !== ps.untilId && x !== ps.sinceId))
-					: Promise.resolve([]),
-				ps.withChannelNotes
-					? this.redisForTimelines.xrevrange(
-						`userTimelineWithChannel:${ps.userId}`,
-						ps.untilId ? this.idService.parse(ps.untilId).date.getTime() : ps.untilDate ?? '+',
-						ps.sinceId ? this.idService.parse(ps.sinceId).date.getTime() : ps.sinceDate ?? '-',
-						'COUNT', limit,
-					).then(res => res.map(x => x[1][1]).filter(x => x !== ps.untilId && x !== ps.sinceId))
-					: Promise.resolve([]),
-			]);
+					).then(res => res.map(x => x[1][1]).filter(x => x !== ps.untilId && x !== ps.sinceId)),
+					ps.withReplies
+						? this.redisForTimelines.xrevrange(
+							`userTimelineWithReplies:${ps.userId}`,
+							ps.untilId ? this.idService.parse(ps.untilId).date.getTime() : ps.untilDate ?? '+',
+							ps.sinceId ? this.idService.parse(ps.sinceId).date.getTime() : ps.sinceDate ?? '-',
+							'COUNT', limit,
+						).then(res => res.map(x => x[1][1]).filter(x => x !== ps.untilId && x !== ps.sinceId))
+						: Promise.resolve([]),
+					ps.withChannelNotes
+						? this.redisForTimelines.xrevrange(
+							`userTimelineWithChannel:${ps.userId}`,
+							ps.untilId ? this.idService.parse(ps.untilId).date.getTime() : ps.untilDate ?? '+',
+							ps.sinceId ? this.idService.parse(ps.sinceId).date.getTime() : ps.sinceDate ?? '-',
+							'COUNT', limit,
+						).then(res => res.map(x => x[1][1]).filter(x => x !== ps.untilId && x !== ps.sinceId))
+						: Promise.resolve([]),
+				]);
 
-			let noteIds = Array.from(new Set([
-				...noteIdsRes,
-				...repliesNoteIdsRes,
-				...channelNoteIdsRes,
-			]));
-			noteIds.sort((a, b) => a > b ? -1 : 1);
-			noteIds = noteIds.slice(0, ps.limit);
+				let noteIds = Array.from(new Set([
+					...noteIdsRes,
+					...repliesNoteIdsRes,
+					...channelNoteIdsRes,
+				]));
+				noteIds.sort((a, b) => a > b ? -1 : 1);
+				noteIds = noteIds.slice(0, ps.limit);
 
-			if (noteIds.length > 0) {
-				const isFollowing = me ? me.id === ps.userId || Object.hasOwn(await this.cacheService.userFollowingsCache.fetch(me.id), ps.userId) : false;
+				if (noteIds.length > 0) {
+					const isFollowing = me ? me.id === ps.userId || Object.hasOwn(await this.cacheService.userFollowingsCache.fetch(me.id), ps.userId) : false;
 
-				const query = this.notesRepository.createQueryBuilder('note')
-					.where('note.id IN (:...noteIds)', { noteIds: noteIds })
-					.innerJoinAndSelect('note.user', 'user')
-					.leftJoinAndSelect('note.reply', 'reply')
-					.leftJoinAndSelect('note.renote', 'renote')
-					.leftJoinAndSelect('reply.user', 'replyUser')
-					.leftJoinAndSelect('renote.user', 'renoteUser')
-					.leftJoinAndSelect('note.channel', 'channel');
+					const query = this.notesRepository.createQueryBuilder('note')
+						.where('note.id IN (:...noteIds)', { noteIds: noteIds })
+						.innerJoinAndSelect('note.user', 'user')
+						.leftJoinAndSelect('note.reply', 'reply')
+						.leftJoinAndSelect('note.renote', 'renote')
+						.leftJoinAndSelect('reply.user', 'replyUser')
+						.leftJoinAndSelect('renote.user', 'renoteUser')
+						.leftJoinAndSelect('note.channel', 'channel');
 
-				let timeline = await query.getMany();
+					let timeline = await query.getMany();
 
-				timeline = timeline.filter(note => {
-					if (me && isUserRelated(note, userIdsWhoMeMuting, true)) return false;
+					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;
+						if (note.renoteId) {
+							if (note.text == null && note.fileIds.length === 0 && !note.hasPoll) {
+								if (ps.withRenotes === false) return false;
+							}
 						}
+
+						if (note.visibility === 'specified' && (!me || (me.id !== note.userId && !note.visibleUserIds.some(v => v === me.id)))) return false;
+						if (note.visibility === 'followers' && !isFollowing) return false;
+
+						return true;
+					});
+
+					timeline.sort((a, b) => a.id > b.id ? -1 : 1);
+
+					if (timeline.length > 0) {
+						return await this.noteEntityService.packMany(timeline, me);
 					}
-
-					if (note.visibility === 'specified' && (!me || (me.id !== note.userId && !note.visibleUserIds.some(v => v === me.id)))) return false;
-					if (note.visibility === 'followers' && !isFollowing) return false;
-
-					return true;
-				});
-
-				timeline.sort((a, b) => a.id > b.id ? -1 : 1);
-
-				if (timeline.length > 0) {
-					return await this.noteEntityService.packMany(timeline, me);
 				}
 			}