home-assistant/core · error · MissingInput
Missing input {', '.join(sorted(input_names))}
Error message
Missing input {', '.join(sorted(input_names))} What it means
MissingInput is raised by BlueprintInputs.validate() when the configuration using the blueprint (use_blueprint:) does not supply values for inputs that have no default. It fires at config-validation time, before substitution, so the automation/script using the blueprint fails to load.
Source
Thrown at homeassistant/components/blueprint/models.py:172
def inputs_with_default(self) -> dict[str, Any]:
"""Return the inputs and fallback to defaults."""
no_input = set(self.blueprint.inputs) - set(self.inputs)
inputs_with_default = dict(self.inputs)
for inp in no_input:
blueprint_input = self.blueprint.inputs[inp]
if isinstance(blueprint_input, dict) and CONF_DEFAULT in blueprint_input:
inputs_with_default[inp] = blueprint_input[CONF_DEFAULT]
return inputs_with_default
def validate(self) -> None:
"""Validate the inputs."""
missing = set(self.blueprint.inputs) - set(self.inputs_with_default)
if missing:
raise MissingInput(self.blueprint.domain, self.blueprint.name, missing)
# In future we can see if entities are correct domain, areas exist etc
# using the new selector helper.
@callback
def async_substitute(self) -> dict:
"""Get the blueprint value with the inputs substituted."""
processed = yaml_util.substitute(self.blueprint.data, self.inputs_with_default)
combined = {**processed, **self.config_with_inputs}
# From config_with_inputs
combined.pop(CONF_USE_BLUEPRINT)
# From blueprint
combined.pop(CONF_BLUEPRINT)
return combined
class DomainBlueprints:
"""Blueprints for a specific domain."""View on GitHub (pinned to 58a3fdb3ea)
Solutions
- Open the automation/script that references the blueprint and add the missing input(s) under use_blueprint.input (names are listed in the message)
- If many consumers are affected, give the input a default: in the blueprint itself and re-import it
- Use Developer Tools > YAML > reload automations (or restart) to re-validate
Example fix
# before
action:
- use_blueprint:
path: motion_light.yaml
input:
light: light.hall
# after
action:
- use_blueprint:
path: motion_light.yaml
input:
light: light.hall
motion_sensor: binary_sensor.hall_motion Defensive patterns
Strategy: validation
Validate before calling
def all_required_inputs_provided(blueprint, config_with_blueprint: dict) -> bool:
provided = set(config_with_blueprint["use_blueprint"].get("input", {}))
with_defaults = set(blueprint.inputs_with_default)
return set(blueprint.inputs) <= provided | with_defaults Try / catch
from homeassistant.components.blueprint.errors import MissingInput
try:
inputs = await manager.async_inputs_from_config(config)
except MissingInput as err:
# surface the missing names to the UI for the user to fill in Prevention
- Give optional blueprint inputs a default: so existing consumers survive new versions
- When updating a blueprint, re-test one consuming automation via YAML reload
When it happens
Trigger: An automation whose 'use_blueprint: path: ... input:' block omits a required input; also triggered when a blueprint author later removes a default from an input that existing automations relied on, and those automations are reloaded.
Common situations: Blueprint updated upstream and re-imported with a new required input; user manually edited the automation YAML and dropped an input line; blueprint author removed a default value.
Related errors
- Invalid blueprint: Missing input definition for {', '.join(m
- Invalid blueprint inputs: {humanize_error(config_with_bluepr
- err
- No valid blueprint found in the topic. Blueprint syntax bloc
- Invalid blueprint: {msg_or_exc}
AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14).
Data as JSON: /api/errors/e4b9f084a8012cdd.
Report an issue: GitHub.