{"record":{"id":"bc3c87d1a56fa880","repo":"home-assistant/core","slug":"caldav-client-error","errorCode":null,"errorMessage":"CalDAV client error","messagePattern":"CalDAV client error","errorType":"exception","errorClass":"ConfigEntryNotReady","httpStatus":null,"severity":"error","filePath":"homeassistant/components/caldav/__init__.py","lineNumber":53,"sourceCode":"        password=entry.data[CONF_PASSWORD],\n        ssl_verify_cert=entry.data[CONF_VERIFY_SSL],\n        timeout=TIMEOUT,\n    )\n    try:\n        await hass.async_add_executor_job(client.principal)\n    except AuthorizationError as err:\n        if err.reason == \"Unauthorized\":\n            raise ConfigEntryAuthFailed(\"Credentials error from CalDAV server\") from err\n        # AuthorizationError can be raised if the url is incorrect or\n        # on some other unexpected server response.\n        _LOGGER.warning(\"Unexpected CalDAV server response: %s\", err)\n        return False\n    except requests.Timeout as err:\n        raise ConfigEntryNotReady(\"Timeout connecting to CalDAV server\") from err\n    except requests.ConnectionError as err:\n        raise ConfigEntryNotReady(\"Connection error from CalDAV server\") from err\n    except DAVError as err:\n        raise ConfigEntryNotReady(\"CalDAV client error\") from err\n\n    entry.runtime_data = client\n\n    await hass.config_entries.async_forward_entry_setups(entry, PLATFORMS)\n\n    return True\n\n\nasync def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:\n    \"\"\"Unload a config entry.\"\"\"\n    return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)\n","sourceCodeStart":35,"sourceCodeEnd":65,"githubUrl":"https://github.com/home-assistant/core/blob/58a3fdb3ea0538617f0a07efcfba6294de64fd59/homeassistant/components/caldav/__init__.py#L35-L65","documentation":"ConfigEntryNotReady raised when client.principal() raises a DAVError that is not an AuthorizationError/Timeout/ConnectionError — a generic caldav library failure such as a malformed DAV response, wrong URL path, or unsupported server reply. The message is the generic 'CalDAV client error'.","triggerScenarios":"The server responds but the response cannot be parsed as expected CalDAV: pointing the URL at a non-CalDAV resource (e.g. the web UI or an HTML page), a server returning an unexpected multi-status body, or caldav library version incompatibilities with the server dialect.","commonSituations":"Using the base Nextcloud/Radicale web URL instead of the DAV endpoint, ISP-hosted calendars exposing odd DAV dialects, or caldav library updates changing response parsing expectations.","solutions":["Point the entry at the real CalDAV principal/calendar endpoint (e.g. .../remote.php/dav for Nextcloud, .../.well-known/caldav resolved URL)","Enable debug logging for the caldav integration to see the underlying DAVError reason and the failing request","Update/align the caldav library version with what the integration pins (check requirements)","If the server is nonstandard, test the same URL with a desktop CalDAV client to confirm it speaks CalDAV"],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"except DAVError as err:\n    raise ConfigEntryNotReady(\"CalDAV client error\") from err","preventionTips":["Use the documented CalDAV endpoint URL for your server product","Verify the URL works in a desktop CalDAV client first","Keep the caldav library version aligned with the integration's pinned requirement"],"tags":["homeassistant","caldav","dav","config-entry"],"backgroundTag":null,"analyzedSha":"58a3fdb3ea0538617f0a07efcfba6294de64fd59","analyzedAt":"2026-08-14T20:54:38.818Z","schemaVersion":2},"datasetVersion":"2026-08-15T22:17:37.221Z"}