{"record":{"id":"456bbf18348d3698","repo":"apache/superset","slug":"dashboard-parameters-are-invalid-456bbf","errorCode":null,"errorMessage":"Dashboard parameters are invalid.","messagePattern":"Dashboard parameters are invalid\\.","errorType":"exception","errorClass":"DashboardInvalidError","httpStatus":422,"severity":"error","filePath":"superset/commands/dashboard/update.py","lineNumber":134,"sourceCode":"        try:\n            security_manager.raise_for_editorship(self._model)\n        except SupersetSecurityException as ex:\n            raise DashboardForbiddenError() from ex\n\n        # Validate slug uniqueness\n        if not DashboardDAO.validate_update_slug_uniqueness(self._model_id, slug):\n            exceptions.append(DashboardSlugExistsValidationError())\n\n        compute_subjects(self._model, self._properties, exceptions)\n\n        # validate tags\n        try:\n            validate_tags(ObjectType.dashboard, self._model.tags, tag_ids)\n        except ValidationError as ex:\n            exceptions.append(ex)\n\n        if exceptions:\n            raise DashboardInvalidError(exceptions=exceptions)\n\n    @staticmethod\n    def _send_deactivated_report_email(\n        report: ReportSchedule, description: str\n    ) -> None:\n        html_content = textwrap.dedent(\n            f\"\"\"\n                <html>\n                <head>\n                    <style type=\"text/css\">\n                    table, th, td {{\n                        border-collapse: collapse;\n                        border-color: rgb(200, 212, 227);\n                        color: rgb(42, 63, 95);\n                        padding: 4px 8px;\n                    }}\n                    .image{{\n                        margin-bottom: 18px;","sourceCodeStart":116,"sourceCodeEnd":152,"githubUrl":"https://github.com/apache/superset/blob/f4587218dd19d046c3e4d00063e7d27f8a2ed354/superset/commands/dashboard/update.py#L116-L152","documentation":"DashboardInvalidError raised in DashboardUpdateCommand.validate (update.py:134) when one or more collected ValidationError items accumulated during validation. The sources visible here are DashboardSlugExistsValidationError (slug uniqueness check failed: DashboardDAO.validate_update_slug_uniqueness returned false) and errors appended by compute_subjects / validate_tags (invalid email-like subjects or tag references). exceptions= carries the list so the payload enumerates each problem.","triggerScenarios":"PUT /api/v1/dashboard/<id> with {\"slug\": \"taken\"} where another dashboard already uses that slug; or \"tags\" containing tag ids that do not exist / are not assignable; or metadata containing notification subjects that fail validation.","commonSituations":"Renaming a dashboard to a slug someone else took while editing; importing dashboards that collide on slug; referencing tag ids from a different environment; copy-pasting metadata JSON with stale entity ids.","solutions":["Read the exceptions array in the response — each entry names the failing field (slug, tags, subjects).","Change or clear the slug: PUT with a unique slug value, or omit slug entirely if you do not intend to change it.","Fix or drop the tags payload; verify ids via GET /api/v1/tag/.","Fix embedded notification subjects (email addresses) in json_metadata if compute_subjects flagged them."],"exampleFix":"# before\nPUT /api/v1/dashboard/42\n{\"slug\": \"sales\"}  # already taken by dashboard 7\n# -> DashboardInvalidError([DashboardSlugExistsValidationError])\n\n# after\n{\"slug\": \"sales-q3\"}","handlingStrategy":"validation","validationCode":"from superset.daos.dashboard import DashboardDAO\n\ndef update_payload_is_valid(model_id: int, slug, tag_ids) -> list:\n    problems = []\n    if slug is not None and not DashboardDAO.validate_update_slug_uniqueness(model_id, slug):\n        problems.append(f\"slug '{slug}' already in use\")\n    return problems","typeGuard":null,"tryCatchPattern":"from superset.commands.dashboard.exceptions import DashboardInvalidError\n\ntry:\n    UpdateDashboardCommand(model_id, properties).run()\nexcept DashboardInvalidError as ex:\n    for exc in ex.exceptions:  # enumerate each failing field for the form UI\n        highlight(exc.field or exc.normalized_name())","preventionTips":["Pre-check slug uniqueness before save; omit 'slug' from the payload when not changing it.","Validate tag ids exist (GET /api/v1/tag/) before submitting.","Parse the exceptions list in the response — it names every failing field at once."],"tags":["dashboard","validation","slug","tags","update"],"backgroundTag":null,"analyzedSha":"f4587218dd19d046c3e4d00063e7d27f8a2ed354","analyzedAt":"2026-08-14T22:39:27.425Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}