apache/superset · error · DashboardInvalidError

Dashboard parameters are invalid.

Error message

Dashboard parameters are invalid.

What it means

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.

Source

Thrown at superset/commands/dashboard/update.py:134

        try:
            security_manager.raise_for_editorship(self._model)
        except SupersetSecurityException as ex:
            raise DashboardForbiddenError() from ex

        # Validate slug uniqueness
        if not DashboardDAO.validate_update_slug_uniqueness(self._model_id, slug):
            exceptions.append(DashboardSlugExistsValidationError())

        compute_subjects(self._model, self._properties, exceptions)

        # validate tags
        try:
            validate_tags(ObjectType.dashboard, self._model.tags, tag_ids)
        except ValidationError as ex:
            exceptions.append(ex)

        if exceptions:
            raise DashboardInvalidError(exceptions=exceptions)

    @staticmethod
    def _send_deactivated_report_email(
        report: ReportSchedule, description: str
    ) -> None:
        html_content = textwrap.dedent(
            f"""
                <html>
                <head>
                    <style type="text/css">
                    table, th, td {{
                        border-collapse: collapse;
                        border-color: rgb(200, 212, 227);
                        color: rgb(42, 63, 95);
                        padding: 4px 8px;
                    }}
                    .image{{
                        margin-bottom: 18px;

View on GitHub (pinned to f4587218dd)

Solutions

  1. Read the exceptions array in the response — each entry names the failing field (slug, tags, subjects).
  2. Change or clear the slug: PUT with a unique slug value, or omit slug entirely if you do not intend to change it.
  3. Fix or drop the tags payload; verify ids via GET /api/v1/tag/.
  4. Fix embedded notification subjects (email addresses) in json_metadata if compute_subjects flagged them.

Example fix

# before
PUT /api/v1/dashboard/42
{"slug": "sales"}  # already taken by dashboard 7
# -> DashboardInvalidError([DashboardSlugExistsValidationError])

# after
{"slug": "sales-q3"}
Defensive patterns

Strategy: validation

Validate before calling

from superset.daos.dashboard import DashboardDAO

def update_payload_is_valid(model_id: int, slug, tag_ids) -> list:
    problems = []
    if slug is not None and not DashboardDAO.validate_update_slug_uniqueness(model_id, slug):
        problems.append(f"slug '{slug}' already in use")
    return problems

Try / catch

from superset.commands.dashboard.exceptions import DashboardInvalidError

try:
    UpdateDashboardCommand(model_id, properties).run()
except DashboardInvalidError as ex:
    for exc in ex.exceptions:  # enumerate each failing field for the form UI
        highlight(exc.field or exc.normalized_name())

Prevention

When it happens

Trigger: 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.

Common situations: 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.

Related errors


AI-assisted analysis of apache/superset@f4587218dd (2026-08-14). Data as JSON: /api/errors/456bbf18348d3698. Report an issue: GitHub.