diff --git a/src/metabase/api/dashboard.clj b/src/metabase/api/dashboard.clj
index d557b3c93af6da8386492f05d1cc16075e5664a0..db7b3074c850d6e4abcbef249bdf7326891540c9 100644
--- a/src/metabase/api/dashboard.clj
+++ b/src/metabase/api/dashboard.clj
@@ -590,12 +590,14 @@
    (let [dashboard (hydrate dashboard :resolved-params)]
      (when-not (get (:resolved-params dashboard) param-key)
        (throw (ex-info (tru "Dashboard does not have a parameter with the ID {0}" (pr-str param-key))
-                       {:resolved-params (keys (:resolved-params dashboard))})))
+                       {:resolved-params (keys (:resolved-params dashboard))
+                        :status-code     400})))
      (let [constraints (chain-filter-constraints dashboard constraint-param-key->value)
            field-ids   (param-key->field-ids dashboard param-key)]
        (when (empty? field-ids)
          (throw (ex-info (tru "Parameter {0} does not have any Fields associated with it" (pr-str param-key))
-                         {:param (get (:resolved-params dashboard) param-key)})))
+                         {:param       (get (:resolved-params dashboard) param-key)
+                          :status-code 400})))
        ;; TODO - we should combine these all into a single UNION ALL query against the data warehouse instead of doing a
        ;; separate query for each Field (for parameters that are mapped to more than one Field)
        (try
diff --git a/test/metabase/api/dashboard_test.clj b/test/metabase/api/dashboard_test.clj
index b3f1e362d6ad8ce3bd2acfa69a0628d7e8d95671..c3d24acc593d16edfb94540bc599afab229a4d3a 100644
--- a/test/metabase/api/dashboard_test.clj
+++ b/test/metabase/api/dashboard_test.clj
@@ -1457,6 +1457,14 @@
                 (is (= "You don't have permissions to do that."
                        (mt/user-http-request :rasta :get 403 url)))))))))))
 
+(deftest chain-filter-not-found-test
+  (mt/with-temp Dashboard [{dashboard-id :id}]
+   (testing "GET /api/dashboard/:id/params/:param-key/values returns 400 if param not found"
+     (mt/user-http-request :rasta :get 400 (format "dashboard/%d/params/non-existing-param/values" dashboard-id)))
+
+   (testing "GET /api/dashboard/:id/params/:param-key/search/:query returns 400 if param not found"
+     (mt/user-http-request :rasta :get 400 (format "dashboard/%d/params/non-existing-param/search/bar" dashboard-id)))))
+
 (deftest chain-filter-invalid-parameters-test
   (testing "GET /api/dashboard/:id/params/:param-key/values"
     (testing "If some Dashboard parameters do not have valid Field IDs, we should ignore them"