Skip to content

SimpliSafe setup fails with 403 Forbidden from api/authCheck after authorization code is returned #183003

Description

@JustinLTW

The problem

The SimpliSafe integration is unable to initialize because SimpliSafe returns HTTP 403 Forbidden from /v1/api/authCheck.

The integration was previously configured and working. It began failing to set up with a 403 response from api/authCheck while Home Assistant was using the existing stored refresh token.

I removed the integration and attempted to add it again from scratch.

The fresh authorization flow appears to complete successfully:

  • Home Assistant generates a new SimpliSafe authorization URL.
  • SimpliSafe login succeeds.
  • SMS MFA succeeds.
  • The browser reaches the com.simplisafe.mobile callback URL and returns a new authorization code.
  • I paste that fresh authorization code into Home Assistant.

Home Assistant then displays "Unknown error occurred."

The log shows that API.async_from_auth() proceeds to _async_post_init(), which calls api/authCheck. SimpliSafe immediately responds with HTTP 403 Forbidden.

I have repeated the authorization process using fresh Home Assistant-generated URLs and fresh one-time authorization codes. The result is consistently the same.

The official SimpliSafe mobile app continues to work normally with the same account.

What version of Home Assistant Core has the issue?

core-2026.9.3

What was the last working version of Home Assistant Core?

No response

What type of installation are you running?

Home Assistant OS

Integration causing the issue

SimpliSafe

Link to integration documentation on our website

https://www.home-assistant.io/integrations/simplisafe

Diagnostics information

No response

Example YAML snippet

Anything in the logs that might be useful for us?

File "/usr/src/homeassistant/homeassistant/components/simplisafe/config_flow.py", line 117, in async_step_user
    simplisafe = await API.async_from_auth(
                 ^^^^^^^^^^^^^^^^^^^^^^^^^^
    ...<3 lines>...
    )
    ^
File "/usr/local/lib/python3.14/site-packages/simplipy/api.py", line 147, in async_from_auth
    await api._async_post_init()
File "/usr/local/lib/python3.14/site-packages/simplipy/api.py", line 202, in _async_post_init
    auth_check_resp = await self._async_api_request("get", "api/authCheck")
                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
File "/usr/local/lib/python3.14/site-packages/simplipy/api.py", line 251, in _async_api_request
    resp.raise_for_status()
    ~~~~~~~~~~~~~~~~~~~~~^^
File "/usr/local/lib/python3.14/site-packages/aiohttp/client_reqrep.py", line 655, in raise_for_status
    raise ClientResponseError(
    ...<5 lines>...
    )
aiohttp.client_exceptions.ClientResponseError: 403, message='Forbidden', url='https://api.simplisafe.com/v1/api/authCheck'

Additional information

The SimpliSafe integration was previously configured and working. It began failing with HTTP 403 Forbidden from /v1/api/authCheck.

I removed the integration and attempted to add it again from scratch. The SimpliSafe authorization flow completes successfully: login succeeds, SMS MFA succeeds, and the browser returns a fresh com.simplisafe.mobile callback authorization code.

After entering that fresh authorization code into Home Assistant, Home Assistant displays "Unknown error occurred."

The log shows the setup reaching API.async_from_auth(), then _async_post_init(), which calls /v1/api/authCheck. SimpliSafe returns HTTP 403 Forbidden.

The official SimpliSafe mobile app continues to work normally with the same account.

I repeated the setup using fresh Home Assistant-generated authorization URLs and fresh one-time authorization codes, including after clearing SimpliSafe browser site data and bypassing the biometric/passkey login path. Each attempt fails at the same /v1/api/authCheck request with HTTP 403.

This appears similar to:
#170547
#109609

Issue #170547 contains the same 403 Forbidden response from /v1/api/authCheck but was closed without an apparent linked fix.

This appears different from:
#178577

In #178577, the authentication flow fails before an authorization code is returned. In this case, a fresh callback authorization code is successfully returned and the failure occurs afterward during api/authCheck.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Type

No type

Fields

Priority

None yet

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions