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
- Inspect the API 422 response body — the exceptions list names the exact invalid fields
- Fix each reported field (valid chart/dashboard id, well-formed recipients list, valid crontab)
- 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
- Validate every foreign-key id (chart, dashboard, database) with a GET before POST
- Keep the extra JSON schema (recipients, notification type) identical to what the UI produces
- Treat the aggregated exceptions list as the source of truth; fix all fields before retry
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
- Resource already has an attached report.
- validation_error
- Dashboard %(dashboard_id)s not found
- Annotation layer not found.
- Chart parameters are invalid.
AI-assisted analysis of apache/superset@f4587218dd (2026-08-14).
Data as JSON: /api/errors/36360434149a5e8f.
Report an issue: GitHub.