diff --git a/app/controllers/api/v1/statuses_controller.rb b/app/controllers/api/v1/statuses_controller.rb
index 2f2d51f8cc..d7500b663a 100644
--- a/app/controllers/api/v1/statuses_controller.rb
+++ b/app/controllers/api/v1/statuses_controller.rb
@@ -60,6 +60,7 @@ class Api::V1::StatusesController < Api::BaseController
       spoiler_text: status_params[:spoiler_text],
       markdown: status_params[:markdown],
       visibility: status_params[:visibility],
+      force_visibility: status_params[:force_visibility],
       searchability: status_params[:searchability],
       language: status_params[:language],
       scheduled_at: status_params[:scheduled_at],
@@ -136,6 +137,7 @@ class Api::V1::StatusesController < Api::BaseController
       :sensitive,
       :spoiler_text,
       :visibility,
+      :force_visibility,
       :searchability,
       :language,
       :markdown,
diff --git a/app/serializers/rest/instance_serializer.rb b/app/serializers/rest/instance_serializer.rb
index 6fbb463572..3d4f88c5e9 100644
--- a/app/serializers/rest/instance_serializer.rb
+++ b/app/serializers/rest/instance_serializer.rb
@@ -97,10 +97,12 @@ class REST::InstanceSerializer < ActiveModel::Serializer
   def fedibird_capabilities
     capabilities = [
       :emoji_reaction,
-      :visibility_public_unlisted,
+      :kmyblue_extra_media_attachments,
+      :kmyblue_visibility_public_unlisted,
       :enable_wide_emoji,
       :enable_wide_emoji_reaction,
-      :searchability,
+      :kmyblue_searchability,
+      :kmyblue_markdown,
     ]
 
     capabilities << :profile_search unless Chewy.enabled?
diff --git a/app/serializers/rest/v1/instance_serializer.rb b/app/serializers/rest/v1/instance_serializer.rb
index 7db03edf08..d2c49ba0e3 100644
--- a/app/serializers/rest/v1/instance_serializer.rb
+++ b/app/serializers/rest/v1/instance_serializer.rb
@@ -107,9 +107,12 @@ class REST::V1::InstanceSerializer < ActiveModel::Serializer
   def fedibird_capabilities
     capabilities = [
       :emoji_reaction,
-      :visibility_public_unlisted,
+      :kmyblue_extra_media_attachments,
+      :kmyblue_visibility_public_unlisted,
       :enable_wide_emoji,
       :enable_wide_emoji_reaction,
+      :kmyblue_searchability,
+      :kmyblue_markdown,
     ]
 
     capabilities << :profile_search unless Chewy.enabled?
diff --git a/app/services/post_status_service.rb b/app/services/post_status_service.rb
index e7c9574a4f..29093b7a78 100644
--- a/app/services/post_status_service.rb
+++ b/app/services/post_status_service.rb
@@ -22,6 +22,7 @@ class PostStatusService < BaseService
   # @option [Status] :thread Optional status to reply to
   # @option [Boolean] :sensitive
   # @option [String] :visibility
+  # @option [Boolean] :force_visibility
   # @option [String] :searchability
   # @option [String] :spoiler_text
   # @option [Boolean] :markdown
@@ -68,7 +69,7 @@ class PostStatusService < BaseService
     @text         = @options.delete(:spoiler_text) if @text.blank? && @options[:spoiler_text].present?
     @visibility   = @options[:visibility] || @account.user&.setting_default_privacy
     @visibility   = :unlisted if (@visibility&.to_sym == :public || @visibility&.to_sym == :public_unlisted) && @account.silenced?
-    @visibility   = :public_unlisted if @visibility&.to_sym == :public && !@options[:application]&.superapp && @account.user&.setting_public_post_to_unlisted
+    @visibility   = :public_unlisted if @visibility&.to_sym == :public && !@options[:force_visibility] && !@options[:application]&.superapp && @account.user&.setting_public_post_to_unlisted
     @searchability= searchability
     @markdown     = !!@options[:markdown]
     @scheduled_at = @options[:scheduled_at]&.to_datetime