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

  1. Open the automation/script that references the blueprint and add the missing input(s) under use_blueprint.input (names are listed in the message)
  2. If many consumers are affected, give the input a default: in the blueprint itself and re-import it
  3. 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

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


AI-assisted analysis of home-assistant/core@58a3fdb3ea (2026-08-14). Data as JSON: /api/errors/e4b9f084a8012cdd. Report an issue: GitHub.