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
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions