> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chainstack.com/llms.txt
> Use this file to discover all available pages before exploring further.

# multiSig | Hyperliquid exchange

> Submits or signs a multi-signature action for a multi-sig account. Used to propose or approve actions that require multiple signatures.

<Info>
  You can only use this endpoint on the official Hyperliquid public API. It is not available through Chainstack, as the open-source node implementation does not support it yet. See [Hyperliquid methods](/docs/hyperliquid-methods) for the full availability breakdown.
</Info>

<Note>
  This endpoint requires signature authentication. See our comprehensive [Authentication via Signatures guide](/docs/hyperliquid-authentication-guide) for implementation details.
</Note>

Submits or signs a multi-signature action for a multi-sig account. Used to propose or approve actions that require multiple signatures.

## Parameters

### Required parameters

* `action` (object, required) — The action object containing:
  * `type` (string) — Must be `"multiSig"`
  * `signatureChainId` (string) — Chain ID for signature
  * `payload` (object) — The action payload to sign
* `nonce` (number, required) — Current timestamp in milliseconds (must be recent)
* `signature` (object, required) — EIP-712 signature of the action

### Optional parameters

* `vaultAddress` (string, optional) — Address when trading on behalf of a vault or subaccount

## Returns

Returns an object with the action status:

* `status` — `"ok"` if request processed
* `response` — Contains action result data

## Example request

<CodeGroup>
  ```shell cURL theme={"system"}
  curl -X POST https://api.hyperliquid.xyz/exchange \
    -H "Content-Type: application/json" \
    -d '{
      "action": {"type": "multiSig"},
      "nonce": 1234567890123,
      "signature": {...}
    }'
  ```

  ```python Python (hyperliquid-python-sdk) theme={"system"}
  # pip install hyperliquid-python-sdk eth-account
  import time
  import eth_account
  from hyperliquid.exchange import Exchange
  from hyperliquid.utils import constants

  # The leader (outer signer) collects the inner signatures and submits the action.
  leader = eth_account.Account.from_key("0xLEADER_PRIVATE_KEY")
  exchange = Exchange(leader, constants.MAINNET_API_URL)

  multi_sig_user = "0xMULTI_SIG_ACCOUNT_ADDRESS"
  nonce = int(time.time() * 1000)

  # inner_action is the action the multi-sig account performs (for example, an order).
  inner_action = {"type": "scheduleCancel", "time": None}

  # signatures collected from each authorized signer of the multi-sig account.
  signatures = [
      # sign_multi_sig_inner_action(...) output per signer
  ]

  result = exchange.multi_sig(
      multi_sig_user=multi_sig_user,
      inner_action=inner_action,
      signatures=signatures,
      nonce=nonce,
  )
  print(result)
  ```

  ```typescript TypeScript (@nktkas/hyperliquid) theme={"system"}
  // npm install @nktkas/hyperliquid viem
  import { ExchangeClient, HttpTransport } from "@nktkas/hyperliquid";
  import { privateKeyToAccount } from "viem/accounts";

  const multiSigUser = "0xMULTI_SIG_ACCOUNT_ADDRESS"; // the multi-sig account address
  const signers = [
    privateKeyToAccount("0xLEADER_PRIVATE_KEY"), // leader — signs the wrapper
    privateKeyToAccount("0xOTHER_SIGNER_PRIVATE_KEY"),
  ] as const;

  const transport = new HttpTransport(); // public mainnet endpoint
  const client = new ExchangeClient({ transport, signers, multiSigUser });

  // The client wraps each action in a multiSig action automatically.
  const result = await client.order({ orders: [/* ... */], grouping: "na" });
  console.log(result);
  ```
</CodeGroup>

## Use case

* **Multi-sig action** — Submits or signs a multi-signature action for a multi-sig account. Used to propose or approve actions that require multiple signatures.

<Warning>
  Always ensure your system clock is synchronized. Nonce must be within a reasonable time window of the current server time or the request will be rejected.
</Warning>


## OpenAPI

````yaml openapi/hyperliquid_node_api/hypercore_exchange/exchange_multi_sig.json post /exchange
openapi: 3.0.0
info:
  title: Hyperliquid Exchange API
  version: 1.0.0
  description: >-
    API for trading operations on Hyperliquid exchange. **IMPORTANT**: All
    exchange endpoints require EIP-712 signatures for authentication. The
    examples shown will not work without proper signing. See the [Hyperliquid
    Python SDK](https://github.com/hyperliquid-dex/hyperliquid-python-sdk) for
    implementation examples.
servers:
  - url: https://api.hyperliquid.xyz
security: []
paths:
  /exchange:
    post:
      tags:
        - hyperliquid exchange
      summary: Multi-sig action
      operationId: multiSig
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              properties:
                action:
                  type: object
                  properties:
                    type:
                      type: string
                      default: multiSig
                      enum:
                        - multiSig
                      description: Action type
                    signatureChainId:
                      type: string
                      description: EIP-712 signature chain ID
                      default: '0xa4b1'
                    signatures:
                      type: array
                      description: Array of EIP-712 signatures from authorized signers
                      items:
                        type: object
                        properties:
                          r:
                            type: string
                          s:
                            type: string
                          v:
                            type: integer
                    payload:
                      type: object
                      description: Multi-sig payload containing the inner action
                      properties:
                        multiSigUser:
                          type: string
                          description: Address of the multi-sig user
                        outerSigner:
                          type: string
                          description: Address of the signer submitting the transaction
                        action:
                          type: object
                          description: >-
                            The inner action to execute (e.g., order, cancel,
                            etc.)
                  required:
                    - type
                    - signatureChainId
                    - signatures
                    - payload
                nonce:
                  type: integer
                  description: Current timestamp in milliseconds
                signature:
                  type: object
                  description: EIP-712 signature of the action with r, s, v components
                  properties:
                    r:
                      type: string
                      description: ECDSA signature r component (hex string)
                      example: >-
                        0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef
                    s:
                      type: string
                      description: ECDSA signature s component (hex string)
                      example: >-
                        0xfedcba0987654321fedcba0987654321fedcba0987654321fedcba0987654321
                    v:
                      type: integer
                      description: ECDSA recovery id (27 or 28)
                      example: 27
                  required:
                    - r
                    - s
                    - v
                vaultAddress:
                  type: string
                  description: >-
                    Address when trading on behalf of a vault or subaccount
                    (optional)
                  nullable: true
              required:
                - action
                - nonce
                - signature
            example:
              action:
                type: multiSig
                signatureChainId: '0xa4b1'
                signatures:
                  - r: >-
                      0x0000000000000000000000000000000000000000000000000000000000000000
                    s: >-
                      0x0000000000000000000000000000000000000000000000000000000000000000
                    v: 27
                payload:
                  multiSigUser: '0x1234567890abcdef1234567890abcdef12345678'
                  outerSigner: '0xabcdef1234567890abcdef1234567890abcdef12'
                  action:
                    type: noop
              nonce: 1705234567890
              signature:
                r: >-
                  0x0000000000000000000000000000000000000000000000000000000000000000
                s: >-
                  0x0000000000000000000000000000000000000000000000000000000000000000
                v: 27
              vaultAddress: null
      responses:
        '200':
          description: Action result
          content:
            application/json:
              schema:
                type: object
                properties:
                  status:
                    type: string
                    description: Request status
                  response:
                    type: object
                    description: Action response data

````