diff --git a/homeassistant/components/switchbot/config_flow.py b/homeassistant/components/switchbot/config_flow.py
index 06b95c6f8aaa549dd3e82b60c33d92ccf92372b3..bb69da5223995e0396c68f50a82ab29dbda72885 100644
--- a/homeassistant/components/switchbot/config_flow.py
+++ b/homeassistant/components/switchbot/config_flow.py
@@ -8,6 +8,7 @@ from typing import Any
 from switchbot import (
     SwitchbotAccountConnectionError,
     SwitchBotAdvertisement,
+    SwitchbotApiError,
     SwitchbotAuthenticationError,
     SwitchbotLock,
     SwitchbotModel,
@@ -33,6 +34,7 @@ from homeassistant.const import (
 )
 from homeassistant.core import callback
 from homeassistant.data_entry_flow import AbortFlow
+from homeassistant.helpers.aiohttp_client import async_get_clientsession
 
 from .const import (
     CONF_ENCRYPTION_KEY,
@@ -175,14 +177,19 @@ class SwitchbotConfigFlow(ConfigFlow, domain=DOMAIN):
         description_placeholders = {}
         if user_input is not None:
             try:
-                key_details = await self.hass.async_add_executor_job(
-                    SwitchbotLock.retrieve_encryption_key,
+                key_details = await SwitchbotLock.async_retrieve_encryption_key(
+                    async_get_clientsession(self.hass),
                     self._discovered_adv.address,
                     user_input[CONF_USERNAME],
                     user_input[CONF_PASSWORD],
                 )
-            except SwitchbotAccountConnectionError as ex:
-                raise AbortFlow("cannot_connect") from ex
+            except (SwitchbotApiError, SwitchbotAccountConnectionError) as ex:
+                _LOGGER.debug(
+                    "Failed to connect to SwitchBot API: %s", ex, exc_info=True
+                )
+                raise AbortFlow(
+                    "api_error", description_placeholders={"error_detail": str(ex)}
+                ) from ex
             except SwitchbotAuthenticationError as ex:
                 _LOGGER.debug("Authentication failed: %s", ex, exc_info=True)
                 errors = {"base": "auth_failed"}
diff --git a/homeassistant/components/switchbot/manifest.json b/homeassistant/components/switchbot/manifest.json
index 401d85e7376a52c8c9b7ccf96ab1a415cd1470fb..ba4782c8b637be2008cdebb81a7bf089d9168c66 100644
--- a/homeassistant/components/switchbot/manifest.json
+++ b/homeassistant/components/switchbot/manifest.json
@@ -39,5 +39,5 @@
   "documentation": "https://www.home-assistant.io/integrations/switchbot",
   "iot_class": "local_push",
   "loggers": ["switchbot"],
-  "requirements": ["PySwitchbot==0.45.0"]
+  "requirements": ["PySwitchbot==0.46.0"]
 }
diff --git a/homeassistant/components/switchbot/strings.json b/homeassistant/components/switchbot/strings.json
index 8eab1ec6f1a34ea20b7f98946e7df6b8f047699e..a20b4939f8f67ae016f9123d72cef187b697662e 100644
--- a/homeassistant/components/switchbot/strings.json
+++ b/homeassistant/components/switchbot/strings.json
@@ -46,7 +46,7 @@
       "already_configured_device": "[%key:common::config_flow::abort::already_configured_device%]",
       "no_devices_found": "No supported SwitchBot devices found in range; If the device is in range, ensure the scanner has active scanning enabled, as SwitchBot devices cannot be discovered with passive scans. Active scans can be disabled once the device is configured. If you need clarification on whether the device is in-range, download the diagnostics for the integration that provides your Bluetooth adapter or proxy and check if the MAC address of the SwitchBot device is present.",
       "unknown": "[%key:common::config_flow::error::unknown%]",
-      "cannot_connect": "[%key:common::config_flow::error::cannot_connect%]",
+      "api_error": "Error while communicating with SwitchBot API: {error_detail}",
       "switchbot_unsupported_type": "Unsupported Switchbot Type."
     }
   },
diff --git a/requirements_all.txt b/requirements_all.txt
index b0e43eaa1b91ef21911382e5918d25ce60f7da34..d2931470798faf9736199859d63321e2c25044c4 100644
--- a/requirements_all.txt
+++ b/requirements_all.txt
@@ -90,7 +90,7 @@ PyQRCode==1.2.1
 PyRMVtransport==0.3.3
 
 # homeassistant.components.switchbot
-PySwitchbot==0.45.0
+PySwitchbot==0.46.0
 
 # homeassistant.components.switchmate
 PySwitchmate==0.5.1
diff --git a/requirements_test_all.txt b/requirements_test_all.txt
index 5064bd69ec502330d31ec625e51dd6d0df87fba7..b26c115c981a5c9cd9a599fb9bd382d4bad5d52a 100644
--- a/requirements_test_all.txt
+++ b/requirements_test_all.txt
@@ -78,7 +78,7 @@ PyQRCode==1.2.1
 PyRMVtransport==0.3.3
 
 # homeassistant.components.switchbot
-PySwitchbot==0.45.0
+PySwitchbot==0.46.0
 
 # homeassistant.components.syncthru
 PySyncThru==0.7.10
diff --git a/tests/components/switchbot/test_config_flow.py b/tests/components/switchbot/test_config_flow.py
index a62a100f55af2ca02ca15fe59ad67b406e18e404..182e9457f223ba78b3a186236ba921dc0f761a2e 100644
--- a/tests/components/switchbot/test_config_flow.py
+++ b/tests/components/switchbot/test_config_flow.py
@@ -487,7 +487,7 @@ async def test_user_setup_wolock_auth(hass: HomeAssistant) -> None:
     assert result["errors"] == {}
 
     with patch(
-        "homeassistant.components.switchbot.config_flow.SwitchbotLock.retrieve_encryption_key",
+        "homeassistant.components.switchbot.config_flow.SwitchbotLock.async_retrieve_encryption_key",
         side_effect=SwitchbotAuthenticationError("error from api"),
     ):
         result = await hass.config_entries.flow.async_configure(
@@ -510,7 +510,7 @@ async def test_user_setup_wolock_auth(hass: HomeAssistant) -> None:
             return_value=True,
         ),
         patch(
-            "homeassistant.components.switchbot.config_flow.SwitchbotLock.retrieve_encryption_key",
+            "homeassistant.components.switchbot.config_flow.SwitchbotLock.async_retrieve_encryption_key",
             return_value={
                 CONF_KEY_ID: "ff",
                 CONF_ENCRYPTION_KEY: "ffffffffffffffffffffffffffffffff",
@@ -560,8 +560,8 @@ async def test_user_setup_wolock_auth_switchbot_api_down(hass: HomeAssistant) ->
     assert result["errors"] == {}
 
     with patch(
-        "homeassistant.components.switchbot.config_flow.SwitchbotLock.retrieve_encryption_key",
-        side_effect=SwitchbotAccountConnectionError,
+        "homeassistant.components.switchbot.config_flow.SwitchbotLock.async_retrieve_encryption_key",
+        side_effect=SwitchbotAccountConnectionError("Switchbot API down"),
     ):
         result = await hass.config_entries.flow.async_configure(
             result["flow_id"],
@@ -572,7 +572,8 @@ async def test_user_setup_wolock_auth_switchbot_api_down(hass: HomeAssistant) ->
         )
         await hass.async_block_till_done()
     assert result["type"] is FlowResultType.ABORT
-    assert result["reason"] == "cannot_connect"
+    assert result["reason"] == "api_error"
+    assert result["description_placeholders"] == {"error_detail": "Switchbot API down"}
 
 
 async def test_user_setup_wolock_or_bot(hass: HomeAssistant) -> None: