Skip to content

Unable to convert from multisig account back to regular #252

@banky

Description

@banky

The docs say: A multi-sig user can be converted back to a normal user by sending a ConvertToMultiSigUser via multi-sig. In this case, the set of authorized users can be set to empty and conversion to normal user will be performed. Here: https://hyperliquid.gitbook.io/hyperliquid-docs/hypercore/multi-sig

However, in practice it seems this functionality currently doesn't work. I have a multisig set up with one authorized user and I'm trying to remove the authorized user to convert my account to a normal one. This is my API request which is correctly signed by the authorized user:

~~~ REQUEST ~~~
POST  /exchange  HTTP/1.1
HOST   : api.hyperliquid-testnet.xyz
HEADERS:
	Accept: application/json
	Content-Type: application/json
BODY   :
{
   "action": {
      "type": "multiSig",
      "signatureChainId": "0x66eee",
      "signatures": [
         {
            "r": "0x2012cf93493fd244824a1695cfd2683d360e7e0c9c29c9f62bd66be4653eb2ae",
            "s": "0x4bd3c5861067a30d4f1129c949178d0402e096a425ba62622ff77cb448456c82",
            "v": 28
         }
      ],
      "payload": {
         "multiSigUser": "0x8e47a44eecc5eb73a69be26bad372a1ffebf08bd",
         "outerSigner": "0xd89155035ccd9458558d2706ba048199fbb68362",
         "action": {
            "type": "convertToMultiSigUser",
            "signatureChainId": "0x66eee",
            "hyperliquidChain": "Testnet",
            "signers": "{\"authorizedUsers\":[],\"threshold\":0}",
            "nonce": 1764907907674
         }
      }
   },
   "expiresAfter": null,
   "nonce": 1764907907674,
   "signature": {
      "r": "0xfe8d0c6acbd23270ca28e901a38c4cef8029a435474910d3ae9ffe1e7a7be255",
      "s": "0x18f308ebb8abe11dcb4c9e656e9567a9ffe76afbddaba1129bc304c8a71614ea",
      "v": 27
   },
   "vaultAddress": null
}

And the response:

------------------------------------------------------------------------------
~~~ RESPONSE ~~~
STATUS       : 200 OK
PROTO        : HTTP/1.1
RECEIVED AT  : 2025-12-04T23:11:48.425739-05:00
TIME DURATION: 750.364125ms
HEADERS      :
	Access-Control-Allow-Origin: *
	Access-Control-Expose-Headers: *
	Connection: keep-alive
	Content-Length: 57
	Content-Type: application/json
	Date: Fri, 05 Dec 2025 04:11:48 GMT
	Server: nginx/1.26.2
	Vary: origin, access-control-request-method, access-control-request-headers
	Via: 1.1 344d3cc6f132c3533d8a58d054dcf1da.cloudfront.net (CloudFront)
	X-Amz-Cf-Id: t_HGNImjhlPuNzSkth_juI7NQIcafRpkamdQ8tYyV89212L77l-CzQ==
	X-Amz-Cf-Pop: MIA3-C3
	X-Cache: Miss from cloudfront
BODY         :
{
   "status": "err",
   "response": "Invalid multi-sig threshold"
}

It's unclear what I'm supposed to pass for the threshold value here. Omitting threshold completely results in this error:

Unexpected error (code=148))

Any ideas what I can try? There is no example for revoking a multisig in the repo so maybe I'm missing something

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