diff --git a/app/controllers/api/base_controller.rb b/app/controllers/api/base_controller.rb
index 3f3e1ca7bdcdefd7286c9b121b0b972aeb4b59ed..665425f2965db5e713f2fd93ea5fe14ea9912c22 100644
--- a/app/controllers/api/base_controller.rb
+++ b/app/controllers/api/base_controller.rb
@@ -57,7 +57,7 @@ class Api::BaseController < ApplicationController
     render json: { error: I18n.t('errors.429') }, status: 429
   end
 
-  rescue_from ActionController::ParameterMissing do |e|
+  rescue_from ActionController::ParameterMissing, Mastodon::InvalidParameterError do |e|
     render json: { error: e.to_s }, status: 400
   end
 
diff --git a/app/models/account_filter.rb b/app/models/account_filter.rb
index e214e0bad228c9e0756846a36ebdaf85ca1050f1..e09ce4ec267ea206487880665afc1d6d55ca64aa 100644
--- a/app/models/account_filter.rb
+++ b/app/models/account_filter.rb
@@ -57,7 +57,7 @@ class AccountFilter
     when 'order'
       order_scope(value)
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 
@@ -68,7 +68,7 @@ class AccountFilter
     when 'remote'
       Account.remote
     else
-      raise "Unknown origin: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown origin: #{value}"
     end
   end
 
@@ -84,8 +84,10 @@ class AccountFilter
       accounts_with_users.merge(User.disabled)
     when 'silenced'
       Account.silenced
+    when 'sensitized'
+      Account.sensitized
     else
-      raise "Unknown status: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
     end
   end
 
@@ -96,7 +98,7 @@ class AccountFilter
     when 'recent'
       Account.recent
     else
-      raise "Unknown order: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown order: #{value}"
     end
   end
 
diff --git a/app/models/admin/action_log_filter.rb b/app/models/admin/action_log_filter.rb
index edb391e2e86c3512e264ff8bb74db518d0fa6532..f89d452ef4f7bcd5f7d1aa5d5890d2638045a60f 100644
--- a/app/models/admin/action_log_filter.rb
+++ b/app/models/admin/action_log_filter.rb
@@ -95,7 +95,7 @@ class Admin::ActionLogFilter
       account = Account.find_or_initialize_by(id: value)
       Admin::ActionLog.where(target: [account, account.user].compact)
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 end
diff --git a/app/models/admin/appeal_filter.rb b/app/models/admin/appeal_filter.rb
index b163d2e56865772281fc802eda39fd7329b8c0c3..f5dcc0f54df515e66522ef2ac3b9e3663e793d1c 100644
--- a/app/models/admin/appeal_filter.rb
+++ b/app/models/admin/appeal_filter.rb
@@ -30,7 +30,7 @@ class Admin::AppealFilter
     when 'status'
       status_scope(value)
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 
@@ -43,7 +43,7 @@ class Admin::AppealFilter
     when 'pending'
       Appeal.pending
     else
-      raise "Unknown status: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
     end
   end
 end
diff --git a/app/models/admin/status_filter.rb b/app/models/admin/status_filter.rb
index d7a16f760dbe81726f9d783fcd5df35d546014b5..4d439e9a1ce23dbd7d4c881142baeb76fd21f33f 100644
--- a/app/models/admin/status_filter.rb
+++ b/app/models/admin/status_filter.rb
@@ -32,7 +32,7 @@ class Admin::StatusFilter
     when 'media'
       Status.joins(:media_attachments).merge(@account.media_attachments.reorder(nil)).group(:id).reorder('statuses.id desc')
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 end
diff --git a/app/models/announcement_filter.rb b/app/models/announcement_filter.rb
index 950852460d61a8adf160c4c779b8dcd02beaaa77..85c3b1d2cea9ae1bf339e0b08e4a4773fcd01d89 100644
--- a/app/models/announcement_filter.rb
+++ b/app/models/announcement_filter.rb
@@ -33,7 +33,7 @@ class AnnouncementFilter
     when 'unpublished'
       Announcement.unpublished
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 end
diff --git a/app/models/custom_emoji_filter.rb b/app/models/custom_emoji_filter.rb
index 414e1fcddd2bac7ad14d5e0e25af5ce51c05bd3f..ed7a8dda15c26324e2f3b0d94043ea4cd1ae48c1 100644
--- a/app/models/custom_emoji_filter.rb
+++ b/app/models/custom_emoji_filter.rb
@@ -39,7 +39,7 @@ class CustomEmojiFilter
     when 'shortcode'
       CustomEmoji.search(value.strip)
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 end
diff --git a/app/models/instance_filter.rb b/app/models/instance_filter.rb
index e7e5166a1ac676ae4ed65e4480b4c9072f08a951..1d94c919f9680b18d09a172b0d62a9535cc75099 100644
--- a/app/models/instance_filter.rb
+++ b/app/models/instance_filter.rb
@@ -36,7 +36,7 @@ class InstanceFilter
     when 'availability'
       availability_scope(value)
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 
@@ -47,7 +47,7 @@ class InstanceFilter
     when 'unavailable'
       Instance.joins(:unavailable_domain)
     else
-      raise "Unknown availability: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown availability: #{value}"
     end
   end
 end
diff --git a/app/models/invite_filter.rb b/app/models/invite_filter.rb
index 9685d4abb5ff1b09acdb102c875f4b4dfac70f5d..c1edb3871fe4ad6c04cf1b8e7f112a5fa6b645f8 100644
--- a/app/models/invite_filter.rb
+++ b/app/models/invite_filter.rb
@@ -31,7 +31,7 @@ class InviteFilter
     when 'expired'
       Invite.expired
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 end
diff --git a/app/models/relationship_filter.rb b/app/models/relationship_filter.rb
index 9135ff144c9a66ab9095c97fce61fa3fe37907ff..249fe3df8e1dfaf98cb81b7de6d8358ce6d0352c 100644
--- a/app/models/relationship_filter.rb
+++ b/app/models/relationship_filter.rb
@@ -53,7 +53,7 @@ class RelationshipFilter
     when 'activity'
       activity_scope(value)
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 
@@ -68,7 +68,7 @@ class RelationshipFilter
     when 'invited'
       Account.joins(user: :invite).merge(Invite.where(user: account.user)).eager_load(:account_stat).reorder(nil)
     else
-      raise "Unknown relationship: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown relationship: #{value}"
     end
   end
 
@@ -83,7 +83,7 @@ class RelationshipFilter
     when 'remote'
       Account.remote
     else
-      raise "Unknown location: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown location: #{value}"
     end
   end
 
@@ -94,7 +94,7 @@ class RelationshipFilter
     when 'primary'
       Account.where(moved_to_account_id: nil)
     else
-      raise "Unknown status: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
     end
   end
 
@@ -105,7 +105,7 @@ class RelationshipFilter
     when 'recent'
       params[:relationship] == 'invited' ? Account.recent : Follow.recent
     else
-      raise "Unknown order: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown order: #{value}"
     end
   end
 
@@ -114,7 +114,7 @@ class RelationshipFilter
     when 'dormant'
       AccountStat.where(last_status_at: nil).or(AccountStat.where(AccountStat.arel_table[:last_status_at].lt(1.month.ago)))
     else
-      raise "Unknown activity: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown activity: #{value}"
     end
   end
 end
diff --git a/app/models/report_filter.rb b/app/models/report_filter.rb
index dc444a5520f6b2f3a0eaff6febce7db68a17ab0f..c9b3bce2d128fc6cb34f1699eaa5d731297161f3 100644
--- a/app/models/report_filter.rb
+++ b/app/models/report_filter.rb
@@ -38,7 +38,7 @@ class ReportFilter
     when :target_origin
       target_origin_scope(value)
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 
@@ -49,7 +49,7 @@ class ReportFilter
     when :remote
       Report.where(target_account: Account.remote)
     else
-      raise "Unknown value: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown value: #{value}"
     end
   end
 end
diff --git a/app/models/trends/preview_card_filter.rb b/app/models/trends/preview_card_filter.rb
index 0a81146d4cb5f075c5b26115927d41b36478c808..f0214c3f0f61ab6b64e2238bbb24706039fa29b3 100644
--- a/app/models/trends/preview_card_filter.rb
+++ b/app/models/trends/preview_card_filter.rb
@@ -40,7 +40,7 @@ class Trends::PreviewCardFilter
     when 'locale'
       PreviewCardTrend.where(language: value)
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 
diff --git a/app/models/trends/preview_card_provider_filter.rb b/app/models/trends/preview_card_provider_filter.rb
index abfdd07e887141ec1931e99ec20e397f004b4e2e..219793f01e950f1f14d93a7aebbe2bbe21c65930 100644
--- a/app/models/trends/preview_card_provider_filter.rb
+++ b/app/models/trends/preview_card_provider_filter.rb
@@ -30,7 +30,7 @@ class Trends::PreviewCardProviderFilter
     when 'status'
       status_scope(value)
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 
@@ -43,7 +43,7 @@ class Trends::PreviewCardProviderFilter
     when 'pending_review'
       PreviewCardProvider.pending_review
     else
-      raise "Unknown status: #{value}"
+      raise Mastodon::InvalidParameterError, "Unknown status: #{value}"
     end
   end
 end
diff --git a/app/models/trends/status_filter.rb b/app/models/trends/status_filter.rb
index cb0f75d679fe91bfee8e44c389dfc761d1f6f770..de435a02661c107f740f101ff53b280d16dbb9f6 100644
--- a/app/models/trends/status_filter.rb
+++ b/app/models/trends/status_filter.rb
@@ -40,7 +40,7 @@ class Trends::StatusFilter
     when 'locale'
       StatusTrend.where(language: value)
     else
-      raise "Unknown filter: #{key}"
+      raise Mastodon::InvalidParameterError, "Unknown filter: #{key}"
     end
   end
 
diff --git a/lib/exceptions.rb b/lib/exceptions.rb
index 3c5ba226b19a5b5fdf661652beeee99ae06b9178..d3b92f4a09300f72dee66d3249b5f3de29342794 100644
--- a/lib/exceptions.rb
+++ b/lib/exceptions.rb
@@ -11,6 +11,7 @@ module Mastodon
   class RaceConditionError < Error; end
   class RateLimitExceededError < Error; end
   class SyntaxError < Error; end
+  class InvalidParameterError < Error; end
 
   class UnexpectedResponseError < Error
     attr_reader :response
diff --git a/spec/models/custom_emoji_filter_spec.rb b/spec/models/custom_emoji_filter_spec.rb
index d859f5c5f5067db3f6cdd32221dce22c51dfce3e..2b1b5dc542f467ca994ce6a7ec3d6d4abffadaa4 100644
--- a/spec/models/custom_emoji_filter_spec.rb
+++ b/spec/models/custom_emoji_filter_spec.rb
@@ -50,10 +50,10 @@ RSpec.describe CustomEmojiFilter do
       context 'else' do
         let(:params) { { else: 'else' } }
 
-        it 'raises RuntimeError' do
+        it 'raises Mastodon::InvalidParameterError' do
           expect do
             subject
-          end.to raise_error(RuntimeError, /Unknown filter: else/)
+          end.to raise_error(Mastodon::InvalidParameterError, /Unknown filter: else/)
         end
       end
     end