home-assistant/core · error · AlexaInvalidEndpointError

NO_SUCH_ENDPOINT

NO_SUCH_ENDPOINT

Error message

The endpoint {endpoint_id} does not exist

What it means

Raised by AlexaDirective.load_entity (state_report.py): the directive's endpointId is converted to an entity_id, and if hass.states.get returns no state or config.should_expose(entity_id) is false, AlexaInvalidEndpointError is raised with NO_SUCH_ENDPOINT. It also doubles as the not-exposed error.

Source

Thrown at homeassistant/components/alexa/state_report.py:117

        Sets these attributes when self.has_endpoint is True:

        - entity
        - entity_id
        - endpoint
        - instance (when header includes instance property)

        Behavior when self.has_endpoint is False is undefined.

        Will raise AlexaInvalidEndpointError if the endpoint in the request is
        malformed or nonexistent.
        """
        _endpoint_id: str = self._directive[API_ENDPOINT]["endpointId"]
        self.entity_id = _endpoint_id.replace("#", ".")

        entity: State | None = hass.states.get(self.entity_id)
        if not entity or not config.should_expose(self.entity_id):
            raise AlexaInvalidEndpointError(_endpoint_id)
        self.entity = entity

        self.endpoint = ENTITY_ADAPTERS[self.entity.domain](hass, config, self.entity)
        if "instance" in self._directive[API_HEADER]:
            self.instance = self._directive[API_HEADER]["instance"]

    def response(
        self,
        name: str = "Response",
        namespace: str = "Alexa",
        payload: dict[str, Any] | None = None,
    ) -> AlexaResponse:
        """Create an API formatted response.

        Async friendly.
        """
        response = AlexaResponse(name, namespace, payload)

View on GitHub (pinned to 58a3fdb3ea)

Solutions

  1. Expose the entity in the Alexa/entity cloud filters and run 'Alexa, discover devices'
  2. If the entity was renamed, update or re-discover so Alexa maps to the new endpointId
  3. Confirm the entity exists via hass.states.get(entity_id) and should_expose returns true
Defensive patterns

Strategy: validation

Validate before calling

state = hass.states.get(entity_id)
if state is None or not config.should_expose(entity_id):
    raise ValueError(f'{entity_id} missing or not exposed; run Alexa rediscovery')

Type guard

def endpoint_available(hass, config, entity_id: str) -> bool:
    return hass.states.get(entity_id) is not None and config.should_expose(entity_id)

Try / catch

Catch AlexaInvalidEndpointError (NO_SUCH_ENDPOINT), verify the entity still exists and is exposed, then trigger rediscovery.

Prevention

When it happens

Trigger: Alexa sends a directive for an endpoint that was deleted, renamed, is not exposed via should_expose filters (entity list / include/exclude config), or whose entity_id no longer matches the cached endpointId.

Common situations: Device removed or renamed after Alexa discovery; entity excluded in cloud smart_home filter_config; stale Alexa cache; entity_id changed via the UI.

Related errors


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