{"record":{"id":"e86c1d81924e764b","repo":"home-assistant/core","slug":"err-e86c1d","errorCode":null,"errorMessage":"{err}","messagePattern":"\\{err\\}","errorType":"exception","errorClass":"ConfigEntryAuthFailed","httpStatus":null,"severity":"error","filePath":"homeassistant/components/aladdin_connect/coordinator.py","lineNumber":49,"sourceCode":"    ) -> None:\n        \"\"\"Initialize the coordinator.\"\"\"\n        super().__init__(\n            hass,\n            logger=_LOGGER,\n            config_entry=entry,\n            name=\"Aladdin Connect Coordinator\",\n            update_interval=SCAN_INTERVAL,\n        )\n        self.client = client\n\n    @override\n    async def _async_update_data(self) -> dict[str, GarageDoor]:\n        \"\"\"Fetch data from the Aladdin Connect API.\"\"\"\n        try:\n            doors = await self.client.get_doors()\n        except aiohttp.ClientResponseError as err:\n            if 400 <= err.status < 500:\n                raise ConfigEntryAuthFailed(err) from err\n            raise UpdateFailed(f\"Error communicating with API: {err}\") from err\n        except aiohttp.ClientError as err:\n            raise UpdateFailed(f\"Error communicating with API: {err}\") from err\n\n        return {door.unique_id: door for door in doors}\n","sourceCodeStart":31,"sourceCodeEnd":55,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/aladdin_connect/coordinator.py#L31-L55","documentation":"ConfigEntryAuthFailed(err) raised by the Aladdin Connect coordinator when self.client.get_doors() fails with aiohttp.ClientResponseError of status 400-499. A 4xx from the Aladdin API almost always means the bearer token was rejected or the request is unauthorized, so HA marks the entry for re-auth instead of retrying.","triggerScenarios":"Coordinator refresh hitting the API with an expired/invalid access token that the wrapper did not refresh, or a genuinely bad request (invalid door id) returning 4xx.","commonSituations":"Token revoked server-side; account credentials rotated; API contract change making a previously valid request 400/404.","solutions":["Follow HA's re-auth prompt for the Aladdin Connect entry.","Confirm login works in the official app.","If it was a transient 4xx (rare), reloading the integration re-runs setup and token validation.","Update HA / the aladdin-connect library if the API contract changed."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try:\n    doors = await client.get_doors()\nexcept aiohttp.ClientResponseError as err:\n    if 400 <= err.status < 500:\n        raise ConfigEntryAuthFailed(err) from err\n    raise UpdateFailed(f\"Error communicating with API: {err}\") from err\nexcept aiohttp.ClientError as err:\n    raise UpdateFailed(f\"Error communicating with API: {err}\") from err","preventionTips":["Map 4xx to auth failure and everything else to UpdateFailed in coordinators.","Re-authenticate when 401/403s appear rather than retrying them.","Keep the OAuth wrapper library current."],"tags":["oauth2","http-4xx","auth","coordinator"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T17:31:12.345Z"}