diff --git a/src/metabase/api/alert.clj b/src/metabase/api/alert.clj
index 486768a0b0edf5f8b1187782db05f83a6b104895..5744649b2c4f7b23fc9e3e3486b8a346e08cbfc9 100644
--- a/src/metabase/api/alert.clj
+++ b/src/metabase/api/alert.clj
@@ -32,12 +32,12 @@
   "Fetch alerts which the current user has created or will receive, or all alerts if the user is an admin.
   The optional `user_id` will return alerts created by the corresponding user, but is ignored for non-admin users."
   [archived user_id]
-  {archived [:maybe ms/BooleanString]
+  {archived [:maybe ms/BooleanValue]
    user_id  [:maybe ms/PositiveInt]}
   (let [user-id (if api/*is-superuser?*
                   user_id
                   api/*current-user-id*)]
-    (as-> (pulse/retrieve-alerts {:archived? (Boolean/parseBoolean archived)
+    (as-> (pulse/retrieve-alerts {:archived? archived
                                   :user-id   user-id}) <>
       (filter mi/can-read? <>)
       (t2/hydrate <> :can_write))))
@@ -53,10 +53,10 @@
   "Fetch all alerts for the given question (`Card`) id"
   [id archived]
   {id       [:maybe ms/PositiveInt]
-   archived [:maybe ms/BooleanString]}
+   archived [:maybe ms/BooleanValue]}
   (-> (if api/*is-superuser?*
-        (pulse/retrieve-alerts-for-cards {:card-ids [id], :archived? (Boolean/parseBoolean archived)})
-        (pulse/retrieve-user-alerts-for-card {:card-id id, :user-id api/*current-user-id*, :archived? (Boolean/parseBoolean archived)}))
+        (pulse/retrieve-alerts-for-cards {:card-ids [id], :archived? archived})
+        (pulse/retrieve-user-alerts-for-card {:card-id id, :user-id api/*current-user-id*, :archived?  archived}))
       (t2/hydrate :can_write)))
 
 (defn- only-alert-keys [request]
diff --git a/src/metabase/api/collection.clj b/src/metabase/api/collection.clj
index be37b98f3c6c32e6018a10764bcf1e2f7f5a157c..2b998d039452ec6bfcb326acace390d2c570be46 100644
--- a/src/metabase/api/collection.clj
+++ b/src/metabase/api/collection.clj
@@ -856,14 +856,14 @@
   [id models archived pinned_state sort_column sort_direction]
   {id             ms/PositiveInt
    models         [:maybe Models]
-   archived       [:maybe ms/BooleanString]
+   archived       [:maybe ms/BooleanValue]
    pinned_state   [:maybe (into [:enum] valid-pinned-state-values)]
    sort_column    [:maybe (into [:enum] valid-sort-columns)]
    sort_direction [:maybe (into [:enum] valid-sort-directions)]}
   (let [model-kwds (set (map keyword (u/one-or-many models)))]
     (collection-children (api/read-check Collection id)
                          {:models       model-kwds
-                          :archived?    (Boolean/parseBoolean archived)
+                          :archived?    archived
                           :pinned-state (keyword pinned_state)
                           :sort-info    [(or (some-> sort_column normalize-sort-choice) :name)
                                          (or (some-> sort_direction normalize-sort-choice) :asc)]})))
@@ -910,7 +910,7 @@
   `snippets`, you can pass the `?namespace=` parameter."
   [models archived namespace pinned_state sort_column sort_direction]
   {models         [:maybe Models]
-   archived       [:maybe ms/BooleanString]
+   archived       [:maybe ms/BooleanValue]
    namespace      [:maybe ms/NonBlankString]
    pinned_state   [:maybe (into [:enum] valid-pinned-state-values)]
    sort_column    [:maybe (into [:enum] valid-sort-columns)]
@@ -923,7 +923,7 @@
     (collection-children
      root-collection
      {:models       model-kwds
-      :archived?    (Boolean/parseBoolean archived)
+      :archived?    archived
       :pinned-state (keyword pinned_state)
       :sort-info    [(or (some-> sort_column normalize-sort-choice) :name)
                      (or (some-> sort_direction normalize-sort-choice) :asc)]})))
diff --git a/src/metabase/api/database.clj b/src/metabase/api/database.clj
index 18bc5f58950e0a7dc69bfcb93404a1280b1d6881..4399622aa6d27d3e4e719c5a067127183b90a966 100644
--- a/src/metabase/api/database.clj
+++ b/src/metabase/api/database.clj
@@ -500,13 +500,13 @@
   and tables, with no additional metadata."
   [id include_hidden include_editable_data_model remove_inactive]
   {id                          ms/PositiveInt
-   include_hidden              [:maybe ms/BooleanString]
-   include_editable_data_model [:maybe ms/BooleanString]
-   remove_inactive             [:maybe ms/BooleanString]}
+   include_hidden              [:maybe ms/BooleanValue]
+   include_editable_data_model [:maybe ms/BooleanValue]
+   remove_inactive             [:maybe ms/BooleanValue]}
   (db-metadata id
-               (Boolean/parseBoolean include_hidden)
-               (Boolean/parseBoolean include_editable_data_model)
-               (Boolean/parseBoolean remove_inactive)))
+               include_hidden
+               include_editable_data_model
+               remove_inactive))
 
 
 ;;; --------------------------------- GET /api/database/:id/autocomplete_suggestions ---------------------------------
diff --git a/src/metabase/api/native_query_snippet.clj b/src/metabase/api/native_query_snippet.clj
index b4ae3f155589b80a738a253f368fb0557bc9c0ba..4ddfa4692c2834739473dab4ba8786f1f0ba474b 100644
--- a/src/metabase/api/native_query_snippet.clj
+++ b/src/metabase/api/native_query_snippet.clj
@@ -24,9 +24,9 @@
 (api/defendpoint GET "/"
   "Fetch all snippets"
   [archived]
-  {archived [:maybe ms/BooleanString]}
+  {archived [:maybe ms/BooleanValue]}
   (let [snippets (t2/select NativeQuerySnippet
-                            :archived (Boolean/parseBoolean archived)
+                            :archived archived
                             {:order-by [[:%lower.name :asc]]})]
     (t2/hydrate (filter mi/can-read? snippets) :creator)))
 
diff --git a/src/metabase/api/pulse.clj b/src/metabase/api/pulse.clj
index 87b3f9279ac130fb9634a9fa63b86bd133707550..4c38d308afb97863eb450785a2bd5b7af78ac0d2 100644
--- a/src/metabase/api/pulse.clj
+++ b/src/metabase/api/pulse.clj
@@ -83,11 +83,11 @@
   This may include subscriptions which the current user does not have collection permissions for, in which case
   some sensitive metadata (the list of cards and recipients) is stripped out."
   [archived dashboard_id creator_or_recipient]
-  {archived             [:maybe ms/BooleanString]
+  {archived             [:maybe ms/BooleanValue]
    dashboard_id         [:maybe ms/PositiveInt]
-   creator_or_recipient [:maybe ms/BooleanString]}
-  (let [creator-or-recipient (Boolean/parseBoolean creator_or_recipient)
-        archived?            (Boolean/parseBoolean archived)
+   creator_or_recipient [:maybe ms/BooleanValue]}
+  (let [creator-or-recipient creator_or_recipient
+        archived?            archived
         pulses               (->> (pulse/retrieve-pulses {:archived?    archived?
                                                           :dashboard-id dashboard_id
                                                           :user-id      (when creator-or-recipient api/*current-user-id*)})
diff --git a/src/metabase/api/timeline.clj b/src/metabase/api/timeline.clj
index 9b1d47e9b77735f20ca644dfd6cada95710cf7d7..8b376181bd93c1461f420cda948def47bc928ce9 100644
--- a/src/metabase/api/timeline.clj
+++ b/src/metabase/api/timeline.clj
@@ -41,8 +41,8 @@
   "Fetch a list of [[Timelines]]. Can include `archived=true` to return archived timelines."
   [include archived]
   {include  [:maybe Include]
-   archived [:maybe ms/BooleanString]}
-  (let [archived? (Boolean/parseBoolean archived)
+   archived [:maybe ms/BooleanValue]}
+  (let [archived? archived
         timelines (->> (t2/select Timeline
                          {:where    [:and
                                      [:= :archived archived?]
@@ -60,10 +60,10 @@
   [id include archived start end]
   {id       ms/PositiveInt
    include  [:maybe Include]
-   archived [:maybe ms/BooleanString]
+   archived [:maybe ms/BooleanValue]
    start    [:maybe ms/TemporalString]
    end      [:maybe ms/TemporalString]}
-  (let [archived? (Boolean/parseBoolean archived)
+  (let [archived? archived
         timeline  (api/read-check (t2/select-one Timeline :id id))]
     (cond-> (t2/hydrate timeline :creator [:collection :can_write])
       ;; `collection_id` `nil` means we need to assoc 'root' collection
diff --git a/src/metabase/api/user.clj b/src/metabase/api/user.clj
index c4aaf8c4cc4af471b252005ec4a2b7b01fcf8ee9..0625f1ffcd9dc4905fb8ae4e0a828cf6c8942755 100644
--- a/src/metabase/api/user.clj
+++ b/src/metabase/api/user.clj
@@ -188,13 +188,13 @@
   {status              [:maybe :string]
    query               [:maybe :string]
    group_id            [:maybe ms/PositiveInt]
-   include_deactivated [:maybe ms/BooleanString]}
+   include_deactivated [:maybe ms/BooleanValue]}
   (or
    api/*is-superuser?*
    (if group_id
      (validation/check-manager-of-group group_id)
      (validation/check-group-manager)))
-  (let [include_deactivated (Boolean/parseBoolean include_deactivated)
+  (let [include_deactivated include_deactivated
         group-id-clause     (when group_id [group_id])
         clauses             (user-clauses status query group-id-clause include_deactivated)]
     {:data (cond-> (t2/select
diff --git a/src/metabase/util/malli/schema.clj b/src/metabase/util/malli/schema.clj
index b4a5147d1940a34b40fda8c2f3f400e57a38eb79..dddbd11359088c12f2ad43028349e6081a8c8f1a 100644
--- a/src/metabase/util/malli/schema.clj
+++ b/src/metabase/util/malli/schema.clj
@@ -230,13 +230,6 @@
      [:fn #(u/ignore-exceptions (<= 0 (Integer/parseInt %)))]]
     (deferred-tru "value must be a valid integer greater than or equal to zero.")))
 
-(def BooleanString
-  "Schema for a string that is a valid representation of a boolean (either `true` or `false`).
-   Defendpoint uses this to coerce the value for this schema to a boolean."
-  (mu/with-api-error-message
-    [:enum "true" "false" "TRUE" "FALSE"]
-    (deferred-tru "value must be a valid boolean string (''true'' or ''false'').")))
-
 (def TemporalString
   "Schema for a string that can be parsed by date2/parse."
   (mu/with-api-error-message
diff --git a/test/metabase/util/malli/schema_test.clj b/test/metabase/util/malli/schema_test.clj
index 4fba0bd9b9ca42df48fb9f8109161b5dd71748ad..7b1e432ee055fc5dfd4e0d849f8f566599c823ae 100644
--- a/test/metabase/util/malli/schema_test.clj
+++ b/test/metabase/util/malli/schema_test.clj
@@ -57,9 +57,6 @@
            {:schema        ms/IntString
             :failed-cases  [:a "a" "1.5"]
             :success-cases ["1"]}
-           {:schema        ms/BooleanString
-            :failed-cases  [:false :true true "f" "t"]
-            :success-cases ["true" "false"]}
            {:schema        ms/TemporalString
             :failed-cases  ["random string"]
             :success-cases ["2019-10-28T13:14:15" "2019-10-28"]}