diff --git a/frontend/src/metabase/dashboard/components/Dashboard/Dashboard.jsx b/frontend/src/metabase/dashboard/components/Dashboard/Dashboard.jsx
index 0e918e583225bc20da4b8a1fd10550d8e3e39481..0062bf36b465c7db00204d5acb0bd8dc7991a6ee 100644
--- a/frontend/src/metabase/dashboard/components/Dashboard/Dashboard.jsx
+++ b/frontend/src/metabase/dashboard/components/Dashboard/Dashboard.jsx
@@ -210,12 +210,13 @@ class Dashboard extends Component {
     const {
       addParameter,
       dashboard,
+      isDataApp,
       isEditing,
       isEditingParameter,
       isFullscreen,
       isNightMode,
       isSharing,
-      parameters,
+      parameters: allParameters,
       parameterValues,
       isNavbarOpen,
       showAddQuestionSidebar,
@@ -231,6 +232,17 @@ class Dashboard extends Component {
     const shouldRenderAsNightMode = isNightMode && isFullscreen;
     const dashboardHasCards = dashboard => dashboard.ordered_cards.length > 0;
 
+    const parameters = isDataApp
+      ? // Writeback hack for prototyping purposes
+        // We need ID parameters to configure custom destinations,
+        // but in the end we don't want to keep them visible to the user
+        // This lets us achieve the desired behavior
+        // when ID parameters are only visible in dashboard editing mode
+        allParameters.filter(parameter =>
+          isEditing ? parameter : parameter.type !== "id",
+        )
+      : allParameters;
+
     const parametersWidget = (
       <SyncedParametersList
         parameters={getValuePopulatedParameters(parameters, parameterValues)}
@@ -316,7 +328,7 @@ class Dashboard extends Component {
                       {...this.props}
                       isNightMode={shouldRenderAsNightMode}
                       onEditingChange={this.setEditing}
-                      isDataApp={this.props.isDataApp}
+                      isDataApp={isDataApp}
                     />
                   ) : (
                     <DashboardEmptyState