apache/superset · error · ReportScheduleInvalidError

Report Schedule parameters are invalid.

Error message

Report Schedule parameters are invalid.

What it means

ReportScheduleInvalidError is raised at the end of CreateReportCommand.validate when the run accumulated per-field validation exceptions (marshmallow-level field errors from validate_chart_dashboard, _validate_report_extra, _populate_subjects, etc.). The 'exceptions' list carries the detailed field messages; this error is the aggregation envelope.

Source

Thrown at superset/commands/report/create.py:170

        # Validate that each chart or dashboard only has one report with
        # the respective creation method.
        if (
            creation_method != ReportCreationMethod.ALERTS_REPORTS
            and not ReportScheduleDAO.validate_unique_creation_method(
                dashboard_id, chart_id
            )
        ):
            raise ReportScheduleCreationMethodUniquenessValidationError()

        if "validator_config_json" in self._properties:
            self._properties["validator_config_json"] = json.dumps(
                self._properties["validator_config_json"]
            )

        self._populate_subjects(exceptions)

        if exceptions:
            raise ReportScheduleInvalidError(exceptions=exceptions)

View on GitHub (pinned to f4587218dd)

Solutions

  1. Inspect the API 422 response body — the exceptions list names the exact invalid fields
  2. Fix each reported field (valid chart/dashboard id, well-formed recipients list, valid crontab)
  3. Re-run creation; validation is all-or-nothing so every exception must be cleared

Example fix

# before
response = client.post('/api/v1/report/', json={'chart_id': 999999, ...})  # nonexistent chart

# after
chart = client.get('/api/v1/chart/123').json  # verify target exists first
response = client.post('/api/v1/report/', json={'chart_id': chart['id'], ...})
Defensive patterns

Strategy: try-catch

Validate before calling

# pre-flight the common causes: target exists and extra is well-formed
assert client.get(f'/api/v1/chart/{chart_id}').status_code == 200
json.dumps(extra['recipients'])  # must serialize and contain valid addresses

Try / catch

try:
    CreateReportCommand(user, payload).run()
except ReportScheduleInvalidError as ex:
    # ex.exceptions carries per-field messages; surface them to the form
    for field_error in ex.exceptions:
        mark_invalid(field_error)

Prevention

When it happens

Trigger: POST /api/v1/report/ with any invalid field combination — a nonexistent chart_id/dashboard_id, malformed recipients in the extra JSON, invalid validator_config_json, or bad crontab — such that validate() appends to the exceptions list.

Common situations: Automation posting partial payloads (missing recipients, wrong notification type), typos in recipient addresses, chart moved between environments so its id no longer resolves, extra JSON missing the notification configuration block.

Related errors


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