Skip to content

"Error: User agreement must be accepted again..." - what does that mean and how to get over this? #784

Closed

Description

@mmoser18

I was trying to use python-roborock to experiment with my Roborock S6 MaxV.
I installed the code and got it running (for this I had to add two more libraries (pyyaml and pyshark) before it would start up successfully) and then tried to login but only got the below error: "Error: User agreement must be accepted again..." ?!?

C:\Users\xyz\AppData\Roaming\Python\Python313\Scripts> .\roborock login --email "xyz@gmail.com"
Requesting code for xyz@gmail.com
A code has been sent to your email, please enter the code: 502730
INFO:roborock.web_api:Login failed for xyz@gmail.com with the following context: {'msg': 'user agreement version is not up-to-date', 'data': None, 'code': 3006}
ERROR:roborock.cli:Uncaught exception in command
Traceback (most recent call last):
  File "C:\Users\xyz\AppData\Roaming\Python\Python313\site-packages\roborock\cli.py", line 97, in run
    await func(*args, **kwargs)
  File "C:\Users\xyz\AppData\Roaming\Python\Python313\site-packages\roborock\cli.py", line 334, in login
    user_data = await client.code_login(code)
                ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "C:\Users\xyz\AppData\Roaming\Python\Python313\site-packages\roborock\web_api.py", line 431, in code_login
    raise RoborockInvalidUserAgreement(
        "User agreement must be accepted again - or you are attempting to use the Mi Home app account."
    )
roborock.exceptions.RoborockInvalidUserAgreement: User agreement must be accepted again - or you are attempting to use the Mi Home app account.
Error: User agreement must be accepted again - or you are attempting to use the Mi Home app account.
C:\Users\xyz\AppData\Roaming\Python\Python313\Scripts>

I replaced sensitive stuff (username and email) by "xyz" in the above.

What am I missing or any idea how can I get over this error? How or where would I need to "accept the user agreement"???

BTW: on page https://python-roborock.github.io/python-roborock/roborock.html#example-usage the link "https://python-roborock.github.io/python-roborock/examples/example.py" is dangling...

Activity

  1. changed the title [-]"Error: User agreement must be accepted again" - what does that mean and how to get over this?[/-] [+]"Error: User agreement must be accepted again..." - what does that mean and how to get over this?[/+] on Mar 13, 2026
  2. Lash-L commented on Mar 13, 2026

    @Lash-L
    Collaborator

    Open up the app and accept the agreement. Roborock won't let you auth until you do

  3. mmoser18 commented on Mar 14, 2026

    @mmoser18
    Author

    You mean the app on the mobile which I use to control my vacuum? In that I have of course already agreed long time ago. Consequently the corresponding dialog only offers to "revoke authorization", but not to agree, since I already did.
    Or what other app do you mean here?

  4. Lash-L commented on Mar 14, 2026

    @Lash-L
    Collaborator

    You may need to:

    Open your Roborock app.
    Open Profile > About Us > User Agreement & Privacy Policy.
    Hit Revoke authorization.
    Log back in and accept the policy

  5. mmoser18 commented on Mar 14, 2026

    @mmoser18
    Author

    I did so, i.e. I revoked the agreement, then I logged back in, agreed to the user agreement and got a verification code emailed. I entered that and verified that I was able to access my vacuum again in the mobile app.
    Next, I fired up python-roborock on my PC, I got again the message that a new verifcation code had been sent to me. I entered that and then I got the exact same error message that the "user agreement must be accepted again" (i.e. the exact same as shown in my initial append).
    So, it seems, I am exactly where I was before... :-(

  6. mmoser18 commented on Apr 10, 2026

    @mmoser18
    Author

    Upgraded to python-roborock v5.7.0 meanwhile. I revoked the license and re-agreed to it in the mobile app but still encounter the very same, i.e. after calling roborock I get:

    C:\Users\xxx\AppData\Roaming\Python\Python313\Scripts> .\roborock login --email "xyz@gmail.com"
    Requesting code for xyz@gmail.com
    A code has been sent to your email, please enter the code: 153230
    INFO:roborock.web_api:Login failed for xyz@gmail.com with the following context: {'msg': 'user agreement version is not up-to-date', 'data': None, 'code': 3006}
    ERROR:roborock.cli:Uncaught exception in command
    Traceback (most recent call last):
      File "C:\Users\xxx\AppData\Roaming\Python\Python313\site-packages\roborock\cli.py", line 97, in run
        await func(*args, **kwargs)
      File "C:\Users\xxx\AppData\Roaming\Python\Python313\site-packages\roborock\cli.py", line 334, in login
        user_data = await client.code_login(code)
                    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
      File "C:\Users\xxx\AppData\Roaming\Python\Python313\site-packages\roborock\web_api.py", line 429, in code_login
        raise RoborockInvalidUserAgreement(
            "User agreement must be accepted again - or you are attempting to use the Mi Home app account."
        )
    roborock.exceptions.RoborockInvalidUserAgreement: User agreement must be accepted again - or you are attempting to use the Mi Home app account.
    Error: User agreement must be accepted again - or you are attempting to use the Mi Home app account.
    C:\Users\xxx\AppData\Roaming\Python\Python313\Scripts>
    

    Note: I replaced my user-id and email with 'xxx' and 'xyz', resp., for privacy.

  7. mmoser18 commented on Jun 9, 2026

    @mmoser18
    Author

    Two months later (with several updates to roborock since - meanwhile installed version 5.14.2) but I am still stuck with this "User agreement must be accepted again..."-issue (I spare you the full console output, it is EXACTLY the same as above).

    Revoking and re-agreeing to the user agreement in the mobile app obviously is not the way to fix or circumvent this...
    How can I get over this obstacle? Anybody able and willing to help and describe what to do?

  8. xiaoyaner0201 commented on Sep 15, 2026

    @xiaoyaner0201
    Contributor

    This is a library bug, not an account state problem — which is why revoking and
    re-accepting the agreement in the app cannot fix it.

    The server's own message in your log says so:

    {'msg': 'user agreement version is not up-to-date', 'data': None, 'code': 3006}
    

    It is rejecting the agreement version number this library sends, not your
    acceptance of it. code_login_v4 hardcodes it:

    # Major and minor version are the user agreement version, we will need to see if this needs to be
    # dynamic https://usiot.roborock.com/api/v3/app/agreement/latest?country=US
    "majorVersion": 14,
    "minorVersion": 0,

    14 is not current on any server today, and the value differs per server and country:

    server latest majorVersion.minorVersion
    cniot 19.0
    usiot 16.0 (country=US)
    euiot 15.1
    ruiot 15.0

    You can check it yourself:

    curl -s "https://usiot.roborock.com/api/v3/app/agreement/latest?country=US" \
      | python3 -m json.tool

    Two things this explains:

    • Nothing you do in the app changes the constant this library sends, so the
      revoke-and-re-accept advice can never clear it. Two months of retries were not
      your mistake.
    • usiot with a non-US country still returns 14, which is likely why this
      affects some users and not others.

    I opened #960, which fetches the version from the endpoint already named in that
    comment and falls back to the old constants if the lookup fails. Verified on a
    cniot account that previously failed with 3006 on every attempt — it logs in
    and loads devices now.

    @mmoser18 if you want to unblock yourself before that merges, you can patch your
    local install directly:

    python -c "
    import pathlib, roborock.web_api as w
    p = pathlib.Path(w.__file__)
    s = p.read_text()
    s = s.replace('\"majorVersion\": 14,', '\"majorVersion\": 16,', 1)
    p.write_text(s)
    print('patched', p)
    "

    Use the number from the table that matches your server — 16 for a US account,
    15 for EU (and set minorVersion to 1 there).

  9. mmoser18 commented on Sep 15, 2026

    @mmoser18
    Author

    Hi and thanks for analyzing this. Your analysis seems quite reasonable to me and would definitely explain why this never worked so far.

    I thus patched my local installation (using the european major/minor version 15/1 as suggested) and gave it another try but this time I got a totally different error that seems to have to do with my Python installation. Since I am absolutely not a Python-guy: do you have any idea what this error re. "frozen runpy" is trying to convey to me? Is my python setup corrupted?

    C:\Users\mmo\AppData\Roaming\Python\Python313\Scripts>roborock login --email ..my email here... --password "...my password here..."
    Traceback (most recent call last):
      File "<frozen runpy>", line 203, in _run_module_as_main
      File "<frozen runpy>", line 88, in _run_code
      File "C:\Users\mmo\AppData\Roaming\Python\Python313\Scripts\roborock.exe\__main__.py", line 2, in <module>
        from roborock.cli import main
    ModuleNotFoundError: No module named 'roborock'
    
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions