{
  "openapi": "3.1.0",
  "info": {
    "title": "Derive v3 API",
    "version": "0.2.0",
    "description": "JSON-RPC 2.0 methods, served over WebSocket and HTTP POST."
  },
  "servers": [
    {
      "url": "https://api.derive.xyz/v3",
      "description": "Production (HTTP POST base)"
    },
    {
      "url": "https://testnet.api.derive.xyz/v3",
      "description": "Testnet (HTTP POST base)"
    }
  ],
  "tags": [
    {
      "name": "Subaccounts",
      "description": "List, inspect, and label subaccounts, portfolios, positions, and collateral."
    },
    {
      "name": "Session Keys",
      "description": "Register, edit, and list delegated signing keys."
    },
    {
      "name": "Account",
      "description": "Wallet-level account information and settings."
    },
    {
      "name": "Orderbook",
      "description": "Place, replace, cancel, and query orders, trigger orders, and algos."
    },
    {
      "name": "RFQ",
      "description": "Request-for-quote: send RFQs, quote, and execute block trades."
    },
    {
      "name": "Liquidations",
      "description": "Open a Dutch auction against a breaching subaccount, quote the auctions running right now, bid on them, and review past ones."
    },
    {
      "name": "Vault Shareholders",
      "description": "Deposit into and withdraw from vaults, and track shares, requests, and performance."
    },
    {
      "name": "Vault Curators",
      "description": "Create and operate curated vaults: settle deposit and withdrawal requests, and manage vault metadata."
    },
    {
      "name": "History",
      "description": "Per-account historical records: orders, trades, transfers, and settlements."
    },
    {
      "name": "Market Maker Protection",
      "description": "Configure, read, and reset market-maker protection."
    },
    {
      "name": "Transfers & Withdrawals",
      "description": "Move collateral between subaccounts, to other wallets, and on-chain."
    },
    {
      "name": "Onchain Actions",
      "description": "L1 onchain actions submitted via OnchainActionManager: register deposit addresses, list pending deposits, and inspect onchain action history."
    },
    {
      "name": "System",
      "description": "Rate limits, transaction lookups, and live incidents."
    },
    {
      "name": "Market Data",
      "description": "Instruments, currencies, tickers, and market-wide feeds."
    },
    {
      "name": "Maker Scoring",
      "description": "Maker programs, score breakdowns, and detailed scoring snapshots."
    },
    {
      "name": "Referrals",
      "description": "Referral codes and program performance."
    },
    {
      "name": "Other",
      "description": "Uncategorized."
    }
  ],
  "paths": {
    "/private/change_subaccount_label": {
      "post": {
        "tags": [
          "Subaccounts"
        ],
        "summary": "private/change_subaccount_label",
        "operationId": "private_change_subaccount_label",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateChangeSubaccountLabelResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Updates the human-readable label for a subaccount. The label must be at most 16 characters, otherwise an invalid-params error is returned. Requires a signed session key with account-info scope; on success it echoes back the subaccount ID and the new label.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ChangeSubaccountLabelRequest"
              }
            }
          }
        }
      }
    },
    "/private/delete_subaccount": {
      "post": {
        "tags": [
          "Subaccounts"
        ],
        "summary": "private/delete_subaccount",
        "operationId": "private_delete_subaccount",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DeleteSubaccountResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Permanently deletes one of the caller's subaccounts via a signed action. The subaccount must be fully wound down: no balances or debt, no open orders, RFQs, or quotes, not a vault, not under auction, and not the wallet's fallback subaccount. Deletion never moves value; subaccount ids are never reused. This is an owner-or-admin operation (session keys need the admin scope).",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DeleteSubaccountRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_all_portfolios": {
      "post": {
        "tags": [
          "Subaccounts"
        ],
        "summary": "private/get_all_portfolios",
        "operationId": "private_get_all_portfolios",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Subaccount"
                  }
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the complete portfolio (same shape as get_subaccount) for every subaccount owned by the given wallet, including valuations, margin figures, open orders, positions, and collaterals. If an individual subaccount's portfolio cannot be built, it is returned as a placeholder entry with failed_to_fetch set to true rather than failing the whole request.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetAllPortfoliosRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_collaterals": {
      "post": {
        "tags": [
          "Subaccounts"
        ],
        "summary": "private/get_collaterals",
        "operationId": "private_get_collaterals",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateGetCollateralsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the subaccount ID and the list of its collateral balances, including each asset's amount and current value valued against live feed data. A lighter alternative to get_subaccount when only collateral holdings are needed.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetCollateralsRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_margin": {
      "post": {
        "tags": [
          "Subaccounts"
        ],
        "summary": "private/get_margin",
        "operationId": "private_get_margin",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetMarginResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Calculates net initial and maintenance margin for a subaccount before and after an optional simulated state change (position and/or collateral deltas), and whether that change would pass the margin requirement. Values are net margin — mark-to-market value minus the requirement — so positive means healthy. Does not take open-order margin into account.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrivateGetMarginRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_positions": {
      "post": {
        "tags": [
          "Subaccounts"
        ],
        "summary": "private/get_positions",
        "operationId": "private_get_positions",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateGetPositionsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the subaccount ID and the list of its active positions, including size, mark price, average price, unrealized and realized PnL, and Greeks where applicable, valued against live feed data at request time. A lighter alternative to get_subaccount when only positions are needed.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetPositionsRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_subaccount": {
      "post": {
        "tags": [
          "Subaccounts"
        ],
        "summary": "private/get_subaccount",
        "operationId": "private_get_subaccount",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Subaccount"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the complete portfolio for a single subaccount: its label, manager and risk-universe identifiers, margin type and liquidation status, aggregate valuation and margin figures (positions, collaterals, initial and maintenance margin, open-order margin) as decimal strings, plus the full lists of open orders, positions, and collateral balances. Margin, mark price, and Greek values are computed from live feed data at request time.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetSubaccountRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_subaccounts": {
      "post": {
        "tags": [
          "Subaccounts"
        ],
        "summary": "private/get_subaccounts",
        "operationId": "private_get_subaccounts",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateGetSubaccountsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the wallet address and the sorted list of subaccount IDs owned by that wallet. Yields an empty list if the wallet has no subaccounts.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetSubaccountsRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_margin": {
      "post": {
        "tags": [
          "Subaccounts"
        ],
        "summary": "public/get_margin",
        "operationId": "public_get_margin",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetMarginResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Calculates net initial and maintenance margin for a fully simulated portfolio under a chosen margin type (SM or PM2; market selects the currency a PM2 manager must cover), optionally with a further simulated state change layered on top. Values are net margin — mark-to-market value minus the requirement — so positive means healthy. Does not take open-order margin into account.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicGetMarginRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_subaccounts": {
      "post": {
        "tags": [
          "Subaccounts"
        ],
        "summary": "public/get_subaccounts",
        "operationId": "public_get_subaccounts",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateGetSubaccountsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the wallet address and the sorted list of all subaccount IDs owned by that wallet. Yields an empty list if the wallet has no subaccounts. Public endpoint, no authentication required.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicGetSubaccountsRequest"
              }
            }
          }
        }
      }
    },
    "/private/edit_session_key": {
      "post": {
        "tags": [
          "Session Keys"
        ],
        "summary": "private/edit_session_key",
        "operationId": "private_edit_session_key",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SessionKey"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Updates an existing session key's label, IP allowlist, and/or off-chain scopes for a given wallet; it cannot change on-chain (protocol) scopes, for which you must re-register with private/set_session_key. Editing only the label needs account-info permission, while changing the IP allowlist or off-chain scopes requires admin/owner authorization. Returns the updated session key details.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EditSessionKeyRequest"
              }
            }
          }
        }
      }
    },
    "/private/session_keys": {
      "post": {
        "tags": [
          "Session Keys"
        ],
        "summary": "private/session_keys",
        "operationId": "private_session_keys",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateSessionKeysResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns every session key registered to the given wallet, including expired and not-yet-activated keys, each with its public address, scopes, expiry, label, IP allowlist, and permitted subaccounts.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SessionKeysRequest"
              }
            }
          }
        }
      }
    },
    "/private/set_session_key": {
      "post": {
        "tags": [
          "Session Keys"
        ],
        "summary": "private/set_session_key",
        "operationId": "private_set_session_key",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateSetSessionKeyResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Authorizes a new session key for a wallet from a signed action, granting it a set of on-chain (protocol) scopes and off-chain scopes with an expiry, an optional label, an optional IP allowlist, and an optional list of subaccounts it may act on (defaults to all of the wallet's subaccounts). Send the signed action fields (nonce, signer, signature, signature expiry, and module) alongside the requested scopes; the endpoint returns the registered key's public address and its granted scopes, expiry, allowlist, label, and subaccounts.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetSessionKeyRequest"
              }
            }
          }
        }
      }
    },
    "/private/set_session_key_debug": {
      "post": {
        "tags": [
          "Session Keys"
        ],
        "summary": "private/set_session_key_debug",
        "operationId": "private_set_session_key_debug",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetSessionKeyDebugResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Takes the same params as private/set_session_key and rebuilds the session-key Action without executing anything, returning the EIP-712 encoded_data, encoded_data_hashed, action_hash, typed_data_hash, domain_separator, action_typehash, module, owner and expected_signer, plus the decoded session key, expiry, protocol scopes and subaccounts. Byte-compare these against your local computation to find why a signature is rejected. Requires a logged-in session.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetSessionKeyRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_wallets_from_session_key": {
      "post": {
        "tags": [
          "Session Keys"
        ],
        "summary": "public/get_wallets_from_session_key",
        "operationId": "public_get_wallets_from_session_key",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicGetWalletsFromSessionKeyResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Public lookup that returns the wallet addresses a given session key is registered to, sorted by expiry, with expired keys omitted. An optional scope filter narrows results to keys holding that off-chain scope; returns an error if no matching, unexpired keys exist.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetWalletsFromSessionKeyRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_account": {
      "post": {
        "tags": [
          "Account"
        ],
        "summary": "private/get_account",
        "operationId": "private_get_account",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateGetAccountResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns account-level information for a given wallet address: the list of its subaccount IDs, WebSocket rate limits (matching, non-matching, perp, and option messages per second) and any per-endpoint overrides, cancel-on-disconnect and RFQ-maker flags, the account creation timestamp, and a fee_info block with fee discounts and per-instrument maker/taker fee overrides expressed as decimals. Returns an account-not-found error if the wallet has never been registered.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetAccountRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/cancel",
        "operationId": "private_cancel",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels one resting order identified by order_id, subaccount_id and instrument_name. Requires any trade scope on the session; returns the cancelled order with its final status.",
        "x-rate-limit-class": "matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelOrderRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_algo_order": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/cancel_algo_order",
        "operationId": "private_cancel_algo_order",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels a single active algo order identified by order_id and subaccount_id, stopping any further child-order execution. Requires any trade scope; returns the cancelled order.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelAlgoOrderRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_all": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/cancel_all",
        "operationId": "private_cancel_all",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelAllResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels every open order on the given subaccount. Optional cancel_trigger_orders and cancel_algo_orders flags additionally clear the subaccount's trigger and algo orders in the same call. Requires any trade scope; returns \"ok\" on success.",
        "x-rate-limit-class": "endpoint",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelAllRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_all_algo_orders": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/cancel_all_algo_orders",
        "operationId": "private_cancel_all_algo_orders",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelAllAlgoOrdersResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels every active algo order on the given subaccount. Requires any trade scope; returns \"ok\" on success.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelAllAlgoOrdersRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_all_trigger_orders": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/cancel_all_trigger_orders",
        "operationId": "private_cancel_all_trigger_orders",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelAllTriggerOrdersResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels every pending trigger order on the given subaccount. Requires any trade scope; returns \"ok\" on success.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelAllTriggerOrdersRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_by_instrument": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/cancel_by_instrument",
        "operationId": "private_cancel_by_instrument",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelByInstrumentResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels every open order for a subaccount on a single instrument. Requires any trade scope; returns the number of orders cancelled.",
        "x-rate-limit-class": "matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelByInstrumentRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_by_label": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/cancel_by_label",
        "operationId": "private_cancel_by_label",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelByLabelResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels a subaccount's open orders that carry the given client label, optionally scoped to a single instrument_name. When an instrument is supplied the call is acknowledged with the number of orders cancelled; without one it runs as a bulk fire-and-forget cancel and returns a -1 sentinel count. Requires any trade scope.",
        "x-rate-limit-class": "custom",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelByLabelRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_by_nonce": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/cancel_by_nonce",
        "operationId": "private_cancel_by_nonce",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelByNonceResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels a single order identified by its signing nonce, instrument_name and subaccount_id. The owning wallet is taken from the authenticated session rather than the request. Requires any trade scope; returns the cancelled order.",
        "x-rate-limit-class": "matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelByNonceRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_trigger_order": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/cancel_trigger_order",
        "operationId": "private_cancel_trigger_order",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels a single pending trigger order identified by order_id and subaccount_id. Requires any trade scope; returns the cancelled order.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelTriggerOrderRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_algo_orders": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/get_algo_orders",
        "operationId": "private_get_algo_orders",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Order"
                  }
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns all active algo orders (e.g. time-sliced execution orders) for the given subaccount as a flat list. Read-only query.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetAlgoOrdersRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_open_orders": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/get_open_orders",
        "operationId": "private_get_open_orders",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AggregatedOrdersResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns all currently open orders for the given subaccount, including each order's instrument, direction, prices, amounts and status. Only orders resting on the order book are returned: pending trigger orders that have not yet fired are available from get_trigger_orders, and active algo orders from get_algo_orders. Once a trigger order fires, the resulting order appears here if it rests on the book rather than filling immediately; algo orders execute as IOC slices and so never rest here. Read-only query.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetOpenOrdersRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_order": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/get_order",
        "operationId": "private_get_order",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Order"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns one order (active or completed) by order_id and subaccount_id; the subaccount filter enforces ownership. Returns the order or an order-does-not-exist error.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetOrderRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_trigger_orders": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/get_trigger_orders",
        "operationId": "private_get_trigger_orders",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/AggregatedTriggerOrdersResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns all pending trigger (conditional) orders for the given subaccount that have not yet fired. Read-only query.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetTriggerOrdersRequest"
              }
            }
          }
        }
      }
    },
    "/private/order": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/order",
        "operationId": "private_order",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderCreatedResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Submits a signed limit or market order for a subaccount, specifying instrument, direction, amount, limit price and max fee, plus optional flags like time-in-force, reduce-only, post-only and MMP. The same endpoint also creates trigger orders (via trigger_type/trigger_price) and algo orders (via algo_type), though the two cannot be combined in one request. Requires a signed order payload and Orderbook trade scope for the instrument's asset; returns the created order with its assigned id and current status.",
        "x-rate-limit-class": "matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOrderRequest"
              }
            }
          }
        }
      }
    },
    "/private/order_debug": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/order_debug",
        "operationId": "private_order_debug",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderDebugResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Takes the same params as private/order and rebuilds the order Action without executing anything, returning the EIP-712 encoded_data, encoded_data_hashed, action_hash, typed_data_hash, domain_separator, action_typehash, module, owner and expected_signer, plus the decoded order action data. Byte-compare these against your local computation to find why a signature is rejected. Requires a logged-in session; no trade scope needed.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateOrderRequest"
              }
            }
          }
        }
      }
    },
    "/private/order_quote": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/order_quote",
        "operationId": "private_order_quote",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderQuoteResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Dry-run pricing helper that estimates the outcome of a prospective order without placing it, returning projected fill price and amount, fees, pre/post initial margin, realized PnL, resulting order status and (where relevant) liquidation price and max tradable amount. All monetary values are returned as decimal strings. The private variant requires account-level authentication.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderQuoteRequest"
              }
            }
          }
        }
      }
    },
    "/private/replace": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "private/replace",
        "operationId": "private_replace",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ReplaceOrderResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Atomically cancels a resting order (identified by order_id_to_cancel or nonce_to_cancel) and submits a replacement order in a single request. The payload is a full new-order specification plus the cancel target and an optional expected_filled_amount guard. Requires a signed order payload and Orderbook trade scope; returns both the cancelled and the newly created order.",
        "x-rate-limit-class": "matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceOrderRequest"
              }
            }
          }
        }
      }
    },
    "/public/order_quote": {
      "post": {
        "tags": [
          "Orderbook"
        ],
        "summary": "public/order_quote",
        "operationId": "public_order_quote",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OrderQuoteResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Public dry-run variant of order_quote that estimates fill price, fees, margin impact, projected order status and realized PnL for a prospective order without placing it, returning all values as decimal strings. Unlike private/order_quote it bypasses session scope checks, so it can be used to preview costs without account authentication.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/OrderQuoteRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_batch_quotes": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/cancel_batch_quotes",
        "operationId": "private_cancel_batch_quotes",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelBatchResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels all open quotes on a subaccount that match the supplied filters (any combination of quote_id, rfq_id, label, and nonce, applied together) in a single atomic operation. Omitting the optional filters targets all of the subaccount's open quotes. Returns the list of cancelled quote ids. Requires an RFQ trade scope.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelBatchQuotesRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_batch_rfqs": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/cancel_batch_rfqs",
        "operationId": "private_cancel_batch_rfqs",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelBatchRfqsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels all open RFQs on a subaccount that match the supplied filters (any combination of rfq_id, label, and nonce, applied together), cascade-cancelling their quotes. Omitting the optional filters targets all of the subaccount's open RFQs. Returns the set of cancelled RFQs. Requires an RFQ trade scope.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelBatchRfqsRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_quote": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/cancel_quote",
        "operationId": "private_cancel_quote",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels one open quote owned by the subaccount, identified by quote_id (optionally further constrained by rfq_id, label, or nonce). Returns the cancelled quote, or a quote-not-found error if it does not exist or is no longer open. Requires an RFQ trade scope.",
        "x-rate-limit-class": "endpoint",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelQuoteRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_rfq": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/cancel_rfq",
        "operationId": "private_cancel_rfq",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/CancelRfqResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Cancels one open RFQ owned by the given subaccount and cascade-cancels any quotes makers have submitted against it, notifying those makers. Identify the RFQ by its rfq_id. Returns \"ok\" on success. Requires an RFQ trade scope.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelRfqRequest"
              }
            }
          }
        }
      }
    },
    "/private/execute_quote": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/execute_quote",
        "operationId": "private_execute_quote",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteExecuteResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Taker-side call that accepts a specific maker quote and settles the trade atomically. You reference the rfq_id and quote_id and supply the taker's priced legs, direction, max fee, and EIP-712 signature (signer, signature, nonce, expiry), with an optional taker-protection flag. The signature is verified and the taker fill, maker quote, and RFQ are updated together in one atomic step. Requires trade scope for every instrument in the legs.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ExecuteQuoteRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_maker_rfq_history": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/get_maker_rfq_history",
        "operationId": "private_get_maker_rfq_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RFQPollResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Maker-side history of RFQs the subaccount was eligible to quote, i.e. RFQs open to all makers or naming the maker's wallet as a counterparty, including ones the maker never quoted. Returns filled, cancelled and expired RFQs only; use private/poll_rfqs for open ones. Supports filtering by rfq_id, status, an originating RFQ subaccount, and an RFQ creation-time window, with pagination. Without from_timestamp, the window covers the 30 days before to_timestamp (or before now). Newest RFQs first. Returns the same public RFQ view as private/poll_rfqs, with fill rates unset. An RFQ appears here a few seconds after it leaves private/poll_rfqs.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetMakerRfqHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_quotes": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/get_quotes",
        "operationId": "private_get_quotes",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteGetResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns a paginated, merged view of a subaccount's quotes, combining currently open quotes with the archived history of filled, cancelled, and expired ones. Supports filtering by quote_id, rfq_id, status, and a from/to timestamp window, with page and page_size controls. Each entry includes priced legs, direction, fees, liquidity role, and fill percentage.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetQuotesRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_rfqs": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/get_rfqs",
        "operationId": "private_get_rfqs",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RFQGetResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns a paginated, merged view of a subaccount's RFQs, combining currently open RFQs with the archived history of filled, cancelled, and expired ones. Supports filtering by rfq_id, status, and a from/to timestamp window, with page and page_size controls. Each entry includes legs, status, timestamps, cost bounds, and fill percentage.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetRfqsRequest"
              }
            }
          }
        }
      }
    },
    "/private/poll_quotes": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/poll_quotes",
        "operationId": "private_poll_quotes",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuotePollResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Taker-side call that lists the maker quotes received against RFQs owned by the subaccount. Supports filtering by quote_id, rfq_id, status, and a timestamp window, with pagination. Returns public quote views (including the maker's wallet) without any signing material.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PollQuotesRequest"
              }
            }
          }
        }
      }
    },
    "/private/poll_rfqs": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/poll_rfqs",
        "operationId": "private_poll_rfqs",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RFQPollResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Maker-side call that lists the RFQs a subaccount is eligible to quote, i.e. RFQs that are open to all makers or that name the maker's wallet as a counterparty. Supports filtering by rfq_id, status, an originating RFQ subaccount, and a timestamp window, with pagination. Returns public RFQ views without taker-private signing material.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PollRfqsRequest"
              }
            }
          }
        }
      }
    },
    "/private/replace_quote": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/replace_quote",
        "operationId": "private_replace_quote",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteReplaceResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Maker-side call that atomically cancels an existing quote and submits a new signed quote for the same RFQ in one operation. You provide the new priced legs, direction, max fee, and EIP-712 signature, plus the quote to cancel (by quote_id or nonce_to_cancel). Returns the cancellation result together with the newly created quote. Requires trade scope for every instrument quoted.",
        "x-rate-limit-class": "endpoint",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ReplaceQuoteRequest"
              }
            }
          }
        }
      }
    },
    "/private/rfq_get_best_quote": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/rfq_get_best_quote",
        "operationId": "private_rfq_get_best_quote",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RfqGetBestQuoteResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Taker-side dry run that evaluates a prospective RFQ (its legs and intended direction) without creating anything. Returns the best available maker quote if one exists, along with the expected fee, validity, projected liquidation prices, and realized-PnL estimate for taking it.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RfqGetBestQuoteRequest"
              }
            }
          }
        }
      }
    },
    "/private/send_quote": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/send_quote",
        "operationId": "private_send_quote",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Quote"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Maker-side call that submits a priced, signed quote in response to an existing RFQ. You provide the priced legs, direction, max fee, an EIP-712 signature (signer, signature, nonce, expiry), and optional label or MMP flag. The quote's signature is verified and validated against the referenced RFQ before it is stored. Returns the created quote. Requires trade scope for every instrument quoted.",
        "x-rate-limit-class": "endpoint",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendQuoteRequest"
              }
            }
          }
        }
      }
    },
    "/private/send_rfq": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "private/send_rfq",
        "operationId": "private_send_rfq",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Rfq"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Taker-side call that opens a new RFQ for a multi-leg structure on a subaccount, inviting makers to quote it. You supply the legs (instrument, amount, and direction per leg) plus optional limits such as min/max total cost, a partial-fill step, a label, and a list of specific counterparties to restrict who can see it. Returns the created RFQ including its assigned id and validity window. Requires trade scope for every instrument in the legs.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SendRfqRequest"
              }
            }
          }
        }
      }
    },
    "/public/execute_quote_debug": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "public/execute_quote_debug",
        "operationId": "public_execute_quote_debug",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteExecuteDebugResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Public signing-preview helper that returns the taker's EIP-712 encoding artifacts (encoded data and hashes) plus the maker-side encoded legs and legs hash for a quote execution a client is about to sign. It does not verify signatures, persist anything, or execute the trade; use it to construct and check the exact payload before calling private/execute_quote.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicExecuteQuoteDebugRequest"
              }
            }
          }
        }
      }
    },
    "/public/send_quote_debug": {
      "post": {
        "tags": [
          "RFQ"
        ],
        "summary": "public/send_quote_debug",
        "operationId": "public_send_quote_debug",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/QuoteSendDebugResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Public signing-preview helper that returns the EIP-712 encoding artifacts (encoded data, its hash, the action hash, and the typed-data hash) for a maker quote a client is about to sign. It does not verify signatures, persist anything, or place a quote; use it to construct and check the exact payload to sign before calling private/send_quote.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicSendQuoteDebugRequest"
              }
            }
          }
        }
      }
    },
    "/private/liquidate": {
      "post": {
        "tags": [
          "Liquidations"
        ],
        "summary": "private/liquidate",
        "operationId": "private_liquidate",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateLiquidateResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Bids on an open liquidation auction. Names the bidder's own subaccount, the account being auctioned, the fraction of it to absorb as a whole percent (a multiple of 0.01), and a signed limit price. The limit is compared against the discounted price of the whole remaining account — the quote's estimated_bid_price — not against the cash the bid actually moves, and it is negative for an insolvent auction where the security module pays the bidder. The realized fill is capped at the auction's current maximum proportion, so it can land below the requested percent. Quote the auction first with public/get_live_auctions or the auctions.watch channel: both the price and the fraction on offer move with wall-clock and with the account's mark.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrivateLiquidateRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_liquidation_history": {
      "post": {
        "tags": [
          "Liquidations"
        ],
        "summary": "public/get_liquidation_history",
        "operationId": "public_get_liquidation_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/LiquidationHistoryResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns a paginated history of liquidation auctions, newest first, for a single subaccount or across all of them, optionally bounded by a start/end timestamp window over the auction start. Each entry gives the auctioned subaccount, whether the auction was solvent or insolvent, the fee charged at start, the start and end timestamps, and the bids that filled it with the fraction of the account each absorbed and the cash it moved.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetLiquidationHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_live_auctions": {
      "post": {
        "tags": [
          "Liquidations"
        ],
        "summary": "public/get_live_auctions",
        "operationId": "public_get_live_auctions",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicGetLiveAuctionsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns every liquidation auction open right now, each priced for a maximal bid at the moment of the response: the cash a bid would cost, the largest fraction of the account it could take, the account's mark-to-market value, the expected discount profit, and the balances on offer. Takes no parameters. This is the polling counterpart to the auctions.watch channel and carries the same values; both a solvent auction's price and the fraction on offer move with wall-clock and with the account's mark, so a quote is only good for the instant it was taken.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyRequest"
              }
            }
          }
        }
      }
    },
    "/public/margin_watch": {
      "post": {
        "tags": [
          "Liquidations"
        ],
        "summary": "public/margin_watch",
        "operationId": "public_margin_watch",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicMarginWatchResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Calculates the mark-to-market value and initial/maintenance margin for a given subaccount, with per-position and per-collateral breakdowns, computed from live feed data at request time. Margins are reported on the margin basis actually in effect: when a delayed-liquidation override is active the response's is_delayed_liquidation flag is true and the reported margins use the temporarily lowered requirements. A maintenance margin below zero means the subaccount is flagged for liquidation.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MarginWatchRequest"
              }
            }
          }
        }
      }
    },
    "/public/start_auction": {
      "post": {
        "tags": [
          "Liquidations"
        ],
        "summary": "public/start_auction",
        "operationId": "public_start_auction",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicStartAuctionResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Opens a Dutch-auction liquidation against a subaccount whose maintenance margin is breached. Permissionless: it takes only the target subaccount and needs no signer, nonce or session-key scope, and the engine validates the breach before opening. Fails if an auction is already running on that account. The liquidation keeper calls this automatically, so it is rarely needed by hand.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicStartAuctionRequest"
              }
            }
          }
        }
      }
    },
    "/private/cancel_all_vault_requests": {
      "post": {
        "tags": [
          "Vault Shareholders"
        ],
        "summary": "private/cancel_all_vault_requests",
        "operationId": "private_cancel_all_vault_requests",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultCancelResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Submits a signed cancel action that drains all of the caller's pending deposit and withdraw requests for a given vault and posts the corresponding on-chain operation. Input is the vault subaccount; any subaccount the caller owns may sign. Requires the user-cancel permission.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CancelVaultRequestRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_live_vault_requests": {
      "post": {
        "tags": [
          "Vault Shareholders"
        ],
        "summary": "private/get_live_vault_requests",
        "operationId": "private_get_live_vault_requests",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultipleVaultRequestsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the caller's currently-pending vault deposit and withdraw requests, read live from the vault queue. Not paginated (the live queue is bounded); settled and terminal history is served by get_vault_request_history. The wallet parameter must match the authenticated connection.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetLiveVaultRequestsRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_shareholder_vaults": {
      "post": {
        "tags": [
          "Vault Shareholders"
        ],
        "summary": "private/get_shareholder_vaults",
        "operationId": "private_get_shareholder_vaults",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultIdsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the subaccount ids of the vaults in which the given wallet holds shares. The wallet parameter must match the authenticated connection. Read-only.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetShareholderVaultsRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_vault_request_history": {
      "post": {
        "tags": [
          "Vault Shareholders"
        ],
        "summary": "private/get_vault_request_history",
        "operationId": "private_get_vault_request_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedVaultRequestHistory"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the caller's full vault action history (deposits, withdrawals, force-withdrawals, and cancels) across every status — enqueued, requested, applied, cancelled, rejected, or expired — with one row per action at its latest state. Paginated by page and page_size; monetary amounts, prices, and share counts are decimal strings. The wallet parameter must match the authenticated connection.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetVaultRequestHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_vault_shares": {
      "post": {
        "tags": [
          "Vault Shareholders"
        ],
        "summary": "private/get_vault_shares",
        "operationId": "private_get_vault_shares",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultSharesResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the caller's share balance for every vault it holds shares in, each paired with the full enriched vault row (the same shape as public/get_vault). The wallet parameter must match the authenticated connection. Read-only.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetVaultSharesRequest"
              }
            }
          }
        }
      }
    },
    "/private/request_vault_deposit": {
      "post": {
        "tags": [
          "Vault Shareholders"
        ],
        "summary": "private/request_vault_deposit",
        "operationId": "private_request_vault_deposit",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultRequestAckResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Submits a signed deposit action from the user's source subaccount and enqueues it in the vault's pending-deposit queue for the curator to settle. Inputs are the target vault subaccount, the deposit asset, and the amount as a decimal string. Returns an acknowledgement with the queued request; requires the user-deposit permission.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RequestVaultDepositRequest"
              }
            }
          }
        }
      }
    },
    "/private/request_vault_withdraw": {
      "post": {
        "tags": [
          "Vault Shareholders"
        ],
        "summary": "private/request_vault_withdraw",
        "operationId": "private_request_vault_withdraw",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultRequestAckResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Submits a signed withdraw action that enqueues a request to burn a given number of vault shares and redeem the proceeds to the user's subaccount. Inputs are the vault subaccount and the share quantity to burn (decimal string). Returns an acknowledgement with the queued request; requires the user-withdraw permission.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RequestVaultWithdrawRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_vault": {
      "post": {
        "tags": [
          "Vault Shareholders"
        ],
        "summary": "public/get_vault",
        "operationId": "public_get_vault",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Vault"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the full vault record — on-chain state plus curator metadata — for one vault subaccount id. Unauthenticated and read-only.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetVaultRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_vault_action_history": {
      "post": {
        "tags": [
          "Vault Shareholders"
        ],
        "summary": "public/get_vault_action_history",
        "operationId": "public_get_vault_action_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedVaultActionHistory"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns a vault's finalized deposit, withdrawal, fee-accrual, and cancel events — including NAV, share price, high-water mark, and the fee-share split across management, performance, curator, and protocol — at the vault level (per-holder position details are omitted). Inputs are the vault subaccount, an optional event_type filter, and pagination. Amounts and prices are decimal strings. Unauthenticated.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetVaultActionHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_vault_performance_history": {
      "post": {
        "tags": [
          "Vault Shareholders"
        ],
        "summary": "public/get_vault_performance_history",
        "operationId": "public_get_vault_performance_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultPerformanceHistoryResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns a time series of a vault's mark-to-market performance (NAV, share price, total and curator shares, high-water mark, optional benchmark) sampled hourly and downsampled to the requested resolution (1h, 8h, 24h, or 1wk). Supports optional from/to unix-second bounds and a limit (newest first, default 1000, capped at 10000). Values are decimal strings, with live prices nullable. Unauthenticated.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetVaultPerformanceHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_vaults": {
      "post": {
        "tags": [
          "Vault Shareholders"
        ],
        "summary": "public/get_vaults",
        "operationId": "public_get_vaults",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns every vault in the system, each paired with its subaccount id, paginated by page and page_size. Unauthenticated and read-only.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetVaultsRequest"
              }
            }
          }
        }
      }
    },
    "/private/burn_vault_shares": {
      "post": {
        "tags": [
          "Vault Curators"
        ],
        "summary": "private/burn_vault_shares",
        "operationId": "private_burn_vault_shares",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultSettleResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Curator-only endpoint that settles a pending withdraw request by signing a burn approval at a quoted share price (USD per share). Takes the request id and the user's withdraw-action hash, burns the shares, and returns the settlement result. Requires the curator mint-and-burn permission.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/BurnSharesRequest"
              }
            }
          }
        }
      }
    },
    "/private/create_vault": {
      "post": {
        "tags": [
          "Vault Curators"
        ],
        "summary": "private/create_vault",
        "operationId": "private_create_vault",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultCreateResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Registers a new vault on-chain from a signed action; the signing wallet becomes the vault's curator and seeds the initial deposit from its funding subaccount. Inputs set the deposit asset, initial deposit amount, initial share price, management/performance fee rates (in basis points), max slippage, redemption cooldown, an optional benchmark asset for the high-water mark, and the max sequencer fee authorized. Requires the vault curator-create permission.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/CreateVaultRequest"
              }
            }
          }
        }
      }
    },
    "/private/force_burn": {
      "post": {
        "tags": [
          "Vault Curators"
        ],
        "summary": "private/force_burn",
        "operationId": "private_force_burn",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultForceBurnResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Curator-signed endpoint that builds an on-chain action to forcibly redeem a given holder's entire share balance at the current mark-to-market share price. Inputs are the vault subaccount the curator signs on, the EIP-712 envelope (nonce, signer, signature, expiry), and the holder's wallet address. Requires the curator mint-and-burn permission; the protocol re-verifies the curator signature.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/ForceBurnRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_curated_vaults": {
      "post": {
        "tags": [
          "Vault Curators"
        ],
        "summary": "private/get_curated_vaults",
        "operationId": "private_get_curated_vaults",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultIdsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the subaccount ids of the vaults curated by the given wallet. The wallet parameter must match the authenticated connection. Read-only.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetCuratedVaultsRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_live_burn_requests": {
      "post": {
        "tags": [
          "Vault Curators"
        ],
        "summary": "private/get_live_burn_requests",
        "operationId": "private_get_live_burn_requests",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultipleVaultRequestsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Curator-only endpoint that returns a FIFO page of a vault's pending withdraw (burn) requests. Inputs are the vault subaccount and a page limit. Requires the curator mint-and-burn permission.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetLiveBurnRequestsRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_live_mint_requests": {
      "post": {
        "tags": [
          "Vault Curators"
        ],
        "summary": "private/get_live_mint_requests",
        "operationId": "private_get_live_mint_requests",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/MultipleVaultRequestsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Curator-only endpoint that returns a FIFO page of a vault's pending deposit (mint) requests. Inputs are the vault subaccount and a page limit. Requires the curator mint-and-burn permission.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetLiveMintRequestsRequest"
              }
            }
          }
        }
      }
    },
    "/private/mint_vault_shares": {
      "post": {
        "tags": [
          "Vault Curators"
        ],
        "summary": "private/mint_vault_shares",
        "operationId": "private_mint_vault_shares",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultSettleResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Curator-only endpoint that settles a pending deposit request by signing a mint approval at a quoted share price (USD per share). Takes the request id and the user's deposit-action hash, mints the corresponding shares, and returns the settlement result. Requires the curator mint-and-burn permission.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MintSharesRequest"
              }
            }
          }
        }
      }
    },
    "/private/reject_deposit_request": {
      "post": {
        "tags": [
          "Vault Curators"
        ],
        "summary": "private/reject_deposit_request",
        "operationId": "private_reject_deposit_request",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/VaultRequestAckResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Curator-only endpoint that removes a queued deposit request off-chain (no on-chain settlement), recording the rejection with an optional short reason. Takes the request id and returns an acknowledgement. Requires the curator mint-and-burn permission.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RejectDepositRequestRequest"
              }
            }
          }
        }
      }
    },
    "/private/update_vault_info": {
      "post": {
        "tags": [
          "Vault Curators"
        ],
        "summary": "private/update_vault_info",
        "operationId": "private_update_vault_info",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OffchainAckResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Applies an off-chain patch to a vault the caller curates, updating any of its display name, description, advisory mark-to-market cap (a USD decimal), or whitelist-only flag. Only the fields supplied are changed. The caller must own the vault's subaccount (i.e. be its curator); description length is capped.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateVaultInfoRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_deposit_history": {
      "post": {
        "tags": [
          "History"
        ],
        "summary": "private/get_deposit_history",
        "operationId": "private_get_deposit_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DepositHistoryResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns settled deposits for a single subaccount or an entire wallet (specify exactly one), optionally bounded by a start/end timestamp window. Each entry reports the deposited amount as a decimal, the fee routed to the security module (the net credited amount is amount minus fee), and the resolved settlement batch and status. A deposit that could not reach its target is credited to the wallet's fallback subaccount instead: it reports `is_fallback: true` and the rejection that caused it in `fallback_error_code`, `fallback_error_message` and `fallback_error_data`.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetDepositHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_erc20_transfer_history": {
      "post": {
        "tags": [
          "History"
        ],
        "summary": "private/get_erc20_transfer_history",
        "operationId": "private_get_erc20_transfer_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferHistoryResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns settled spot (ERC-20) transfers involving a single subaccount or an entire wallet (specify exactly one), optionally bounded by a start/end timestamp window. Each entry reports the transfer amount and fee as decimals along with direction — the sender sees the gross amount plus fee, the receiver sees the net credit — plus the resolved settlement batch and status.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetErc20TransferHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_funding_history": {
      "post": {
        "tags": [
          "History"
        ],
        "summary": "private/get_funding_history",
        "operationId": "private_get_funding_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PerpSettlementHistoryResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns a paginated history of perpetual funding (settlement) events for a single subaccount or an entire wallet (specify exactly one), optionally bounded by a start/end timestamp window and filtered by perpetual instrument name. The response includes the funding events with their instrument name and settled amounts, plus pagination info with total count and page count.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetFundingHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_interest_history": {
      "post": {
        "tags": [
          "History"
        ],
        "summary": "private/get_interest_history",
        "operationId": "private_get_interest_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterestHistoryResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns realized interest settlements per subaccount, for a single subaccount or an entire wallet (specify exactly one), optionally bounded by a start/end timestamp window. Each entry gives the settled interest as a decimal, where a negative value was paid (borrowed) and a positive value was received (supplied).",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetInterestHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_option_settlement_history": {
      "post": {
        "tags": [
          "History"
        ],
        "summary": "private/get_option_settlement_history",
        "operationId": "private_get_option_settlement_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OptionSettlementHistoryResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns option settlement (expiry) events for a single subaccount or an entire wallet (specify exactly one). Each settlement includes the reconstructed option instrument name, the settled amount and value for that expired position, and the realized settlement PnL against the position's cost basis, with and without trading fees.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetOptionSettlementHistoryParams"
              }
            }
          }
        }
      }
    },
    "/private/get_order_history": {
      "post": {
        "tags": [
          "History"
        ],
        "summary": "private/get_order_history",
        "operationId": "private_get_order_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedOrdersResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns a paginated history of orders for a single subaccount or for an entire wallet (specify exactly one), optionally bounded by a from/to timestamp window. Only orders in a terminal state (filled, cancelled, expired) are recorded here, one record per order. Trigger and algo orders appear once they terminate, carrying their accumulated filled amount; while they are still live — including partially executed algo orders and trigger orders that have not yet fired — read them from get_trigger_orders and get_algo_orders instead. Each page includes the order records plus pagination info with the total count and number of pages.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetOrderHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_trade_history": {
      "post": {
        "tags": [
          "History"
        ],
        "summary": "private/get_trade_history",
        "operationId": "private_get_trade_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PaginatedTradesResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns a paginated history of executed trades for a single subaccount or an entire wallet (specify exactly one), with optional filters for a time window, order id, instrument name, or quote id. The response includes the trade records and pagination info with total count and page count.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetTradeHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_withdrawal_history": {
      "post": {
        "tags": [
          "History"
        ],
        "summary": "private/get_withdrawal_history",
        "operationId": "private_get_withdrawal_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/WithdrawalHistoryResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns settled withdrawals for a single subaccount or an entire wallet (specify exactly one), optionally bounded by a start/end timestamp window. Each entry reports the withdrawn amount as a decimal, the fee routed to the security module (the net amount sent to the recipient is amount minus fee), and the resolved settlement batch and status.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetWithdrawalHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_mmp_config": {
      "post": {
        "tags": [
          "Market Maker Protection"
        ],
        "summary": "private/get_mmp_config",
        "operationId": "private_get_mmp_config",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/MmpConfigResult"
                  }
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the market maker protection (MMP) settings for a subaccount, optionally filtered to a single currency. Each entry reports the amount and delta limits (as decimal strings), the rolling interval and freeze duration (in milliseconds), and the current freeze state, including whether MMP is currently frozen and the timestamp at which it unfreezes.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MmpScopeRequest"
              }
            }
          }
        }
      }
    },
    "/private/reset_mmp": {
      "post": {
        "tags": [
          "Market Maker Protection"
        ],
        "summary": "private/reset_mmp",
        "operationId": "private_reset_mmp",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/ResetMmpResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Clears an active market maker protection freeze and resets the rolling MMP window for a subaccount, optionally scoped to a single currency. Use this to resume quoting after MMP has frozen a subaccount. Requires a trading-scoped session key and returns \"ok\" on success.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/MmpScopeRequest"
              }
            }
          }
        }
      }
    },
    "/private/set_mmp_config": {
      "post": {
        "tags": [
          "Market Maker Protection"
        ],
        "summary": "private/set_mmp_config",
        "operationId": "private_set_mmp_config",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SetMmpConfigResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Creates or fully replaces the market maker protection settings for a subaccount and currency. Accepts an amount limit and delta limit (as decimals) plus the rolling interval and freeze duration in milliseconds; omitted limits default to zero. Requires a trading-scoped session key and echoes the applied configuration back.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/SetMmpConfigRequest"
              }
            }
          }
        }
      }
    },
    "/private/transfer_positions": {
      "post": {
        "tags": [
          "Transfers & Withdrawals"
        ],
        "summary": "private/transfer_positions",
        "operationId": "private_transfer_positions",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferPositionsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Atomically transfers one or more derivative positions between a maker and a taker subaccount using matched, signed transfer quotes. Each side supplies its subaccount, signer, nonce, signature, expiry, max fee, direction, and priced legs (instrument, amount, price); the two quotes must mirror each other. Requires a session key with transfer permission and returns the resulting operation details.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransferPositionsRequest"
              }
            }
          }
        }
      }
    },
    "/private/transfer_positions_debug": {
      "post": {
        "tags": [
          "Transfers & Withdrawals"
        ],
        "summary": "private/transfer_positions_debug",
        "operationId": "private_transfer_positions_debug",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferPositionsDebugResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Takes the same params as private/transfer_positions and rebuilds both the maker and taker Actions without executing anything, returning for each side the EIP-712 encoded_data, encoded_data_hashed, action_hash, typed_data_hash, domain_separator, action_typehash, module, owner and expected_signer, plus the decoded action data (the maker's priced legs, and the taker's order_hash committing to them). Byte-compare these against your local computation to find why a signature is rejected. Requires a logged-in session; no transfer scope needed.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/TransferPositionsRequest"
              }
            }
          }
        }
      }
    },
    "/private/transfer_spot": {
      "post": {
        "tags": [
          "Transfers & Withdrawals"
        ],
        "summary": "private/transfer_spot",
        "operationId": "private_transfer_spot",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateTransferSpotResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Submits a signed transfer of a single spot asset from one subaccount to another subaccount you own. You specify the source and destination subaccounts (or set new_subaccount_manager to create a new destination subaccount under a manager), the asset and its sub_id, the amount, a nonce, signer, signature with expiry, and the maximum USD sequencer fee. Requires a session key with a transfer permission and returns the operation id and uuid.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrivateTransferSpotRequest"
              }
            }
          }
        }
      }
    },
    "/private/transfer_spot_debug": {
      "post": {
        "tags": [
          "Transfers & Withdrawals"
        ],
        "summary": "private/transfer_spot_debug",
        "operationId": "private_transfer_spot_debug",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferSpotDebugResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Takes the same params as private/transfer_spot and rebuilds the transfer Action without executing anything, returning the EIP-712 encoded_data, encoded_data_hashed, action_hash, typed_data_hash, domain_separator, action_typehash, module, owner and expected_signer, plus the decoded transfer action data. Byte-compare these against your local computation to find why a signature is rejected. Requires a logged-in session; no transfer scope needed.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrivateTransferSpotRequest"
              }
            }
          }
        }
      }
    },
    "/private/transfer_spot_external": {
      "post": {
        "tags": [
          "Transfers & Withdrawals"
        ],
        "summary": "private/transfer_spot_external",
        "operationId": "private_transfer_spot_external",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateTransferSpotExternalResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Submits a signed transfer of a single spot asset to a subaccount belonging to a different owner. Alongside the standard transfer fields (asset, sub_id, amount, nonce, signer, signature, expiry, max USD fee) you give the recipient's wallet address and either an existing destination subaccount or 0 to create a new one under new_subaccount_manager; the max fee must cover both the transfer and any subaccount-creation cost. Requires a session key permitted to transfer to a different owner and returns the operation id and uuid.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrivateTransferSpotExternalRequest"
              }
            }
          }
        }
      }
    },
    "/private/transfer_spot_external_debug": {
      "post": {
        "tags": [
          "Transfers & Withdrawals"
        ],
        "summary": "private/transfer_spot_external_debug",
        "operationId": "private_transfer_spot_external_debug",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TransferSpotExternalDebugResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Takes the same params as private/transfer_spot_external and rebuilds the external transfer Action without executing anything, returning the EIP-712 encoded_data, encoded_data_hashed, action_hash, typed_data_hash, domain_separator, action_typehash, module, owner and expected_signer, plus the decoded transfer action data including the recipient address. Byte-compare these against your local computation to find why a signature is rejected. Requires a logged-in session; no transfer scope needed.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrivateTransferSpotExternalRequest"
              }
            }
          }
        }
      }
    },
    "/private/update_whitelisted_recipients": {
      "post": {
        "tags": [
          "Transfers & Withdrawals"
        ],
        "summary": "private/update_whitelisted_recipients",
        "operationId": "private_update_whitelisted_recipients",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateWhitelistedRecipientsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Adds and/or removes recipient wallet addresses on an account's transfer whitelist via a signed, wallet-level action. Provide the owner wallet, signer, nonce, signature with expiry, and the add and remove address lists. This is an owner-or-admin operation (session keys need the admin scope); it returns the operation id, uuid, and the full whitelist after the update is applied.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWhitelistedRecipientsRequest"
              }
            }
          }
        }
      }
    },
    "/private/update_whitelisted_recipients_debug": {
      "post": {
        "tags": [
          "Transfers & Withdrawals"
        ],
        "summary": "private/update_whitelisted_recipients_debug",
        "operationId": "private_update_whitelisted_recipients_debug",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/UpdateWhitelistedRecipientsDebugResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Takes the same params as private/update_whitelisted_recipients and rebuilds the whitelist Action without executing anything, returning the EIP-712 encoded_data, encoded_data_hashed, action_hash, typed_data_hash, domain_separator, action_typehash, module, owner and expected_signer, plus the decoded add and remove address lists. Byte-compare these against your local computation to find why a signature is rejected. Requires a logged-in session.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/UpdateWhitelistedRecipientsRequest"
              }
            }
          }
        }
      }
    },
    "/private/withdraw": {
      "post": {
        "tags": [
          "Transfers & Withdrawals"
        ],
        "summary": "private/withdraw",
        "operationId": "private_withdraw",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PrivateWithdrawResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Submits a signed request to withdraw a spot asset out of a subaccount. You provide the subaccount id, asset name, amount in underlying units, a nonce, the signer, an EIP-712 signature with its expiry, and the maximum sequencer fee (in USD) you authorise; setting force_batch controls whether the withdrawal is batched. Requires a session key with withdraw permission, and returns the accepted operation id and its uuid for tracking.",
        "x-rate-limit-class": "proven",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PrivateWithdrawRequest"
              }
            }
          }
        }
      }
    },
    "/public/withdraw_debug": {
      "post": {
        "tags": [
          "Transfers & Withdrawals"
        ],
        "summary": "public/withdraw_debug",
        "operationId": "public_withdraw_debug",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {}
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Dry-run helper that returns the EIP-712 typed data and hashes that would be computed for the given withdrawal parameters, so clients can verify their own signing and hashing before submitting. Takes the same inputs as private/withdraw (subaccount, signer, nonce, amount, max fee, expiry, asset) but performs no state change and needs no signature.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicWithdrawDebugRequest"
              }
            }
          }
        }
      }
    },
    "/private/get_withdraw_addresses": {
      "post": {
        "tags": [
          "Onchain Actions"
        ],
        "summary": "private/get_withdraw_addresses",
        "operationId": "private_get_withdraw_addresses",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetWithdrawAddressesResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Lists the account's withdraw addresses from private/register_withdraw_address: its EVM ones (their recipient is the wallet) and every withdraw address on its whitelisted_recipients. Each entry gives the destination chain id, the address kind (evm or solana), the recipient as registered and whether it is whitelisted, which session keys need before they can withdraw to it. A Solana address that was registered but never whitelisted is not listed.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetWithdrawAddressesParams"
              }
            }
          }
        }
      }
    },
    "/private/register_bridge_deposit": {
      "post": {
        "tags": [
          "Onchain Actions"
        ],
        "summary": "private/register_bridge_deposit",
        "operationId": "private_register_bridge_deposit",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PendingDepositBridgeOrigin"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Reports a Li.Fi bridge into one of the caller's deposit addresses the moment its source transaction is sent, so public/get_pending_deposits shows it as `bridging` at once with the quoted amount, before Li.Fi indexes it. Takes the source chain and transaction, the quote's transactionId, the deposit address, the source and delivered tokens and the quoted toAmount. Idempotent per source transaction. Display only: nothing is credited from it, and a registration Li.Fi never confirms expires.",
        "x-rate-limit-class": "endpoint",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterBridgeDepositParams"
              }
            }
          }
        }
      }
    },
    "/private/register_withdraw_address": {
      "post": {
        "tags": [
          "Onchain Actions"
        ],
        "summary": "private/register_withdraw_address",
        "operationId": "private_register_withdraw_address",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegisterWithdrawAddressResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the Ethereum withdraw address that forwards a withdrawal of a forwarded token to a recipient on its home chain, and records it so the forwarder watches it. Takes the wallet, the destination chain id (a key of the route file's withdraw_forwarding section; Solana is 101, devnet 103) and the recipient. On an EVM chain the recipient must be the account wallet; on Solana it must be a base58 wallet address, which is screened. Repeated calls return the same address; new registrations are rate limited per rolling window. Withdraw to the returned address with private/withdraw. Session keys without unbounded Admin scope must first add it with private/update_whitelisted_recipients.",
        "x-rate-limit-class": "endpoint",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterWithdrawAddressParams"
              }
            }
          }
        }
      }
    },
    "/public/get_onchain_action_history": {
      "post": {
        "tags": [
          "Onchain Actions"
        ],
        "summary": "public/get_onchain_action_history",
        "operationId": "public_get_onchain_action_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetOnchainActionHistoryResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the lifecycle of onchain actions submitted via `OnchainActionManager.sol`. Public endpoint.\n\nOnchain actions are either applied directly or with a `fallback` flag. Each onchain action is affected by the `fallback` flag uniquely:\n\n- Deposits: sequencer moved the deposit into the `fallback_subaccount`\n- SetSessionKey: no-op\n- Admin actions: no-op\n\nThe onchain action can have several states:\n\n- `applied`: action was successfully applied by the sequencer\n- `applied_with_fallback`: action was applied by the sequencer with fallback=true\n- `instant_fallback`: action failed its initial attempt, will be re-submitted with fallback=true\n- `retry_then_fallback`: action failed its initial attempt, will be re-submitted with fallback=false until the retry budget is exceeded, then re-submitted with fallback=true\n- `never_escalate`: action failed its initial attempt but will retry until successful, never with fallback=true\n\nA failed attempt is recorded in `error_code`, `error_message` and `error_data`, and kept once the action is applied. `error_code` is a catalogued error code; `error_data` carries the specifics, and is null for an internal error.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetOnchainActionHistoryParams"
              }
            }
          }
        }
      }
    },
    "/public/get_pending_deposits": {
      "post": {
        "tags": [
          "Onchain Actions"
        ],
        "summary": "public/get_pending_deposits",
        "operationId": "public_get_pending_deposits",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetPendingDepositsResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns deposits queued on L1 but not yet applied by the sequencer, indexed for a wallet and keyed by (tx_hash, log_index). Once a deposit is applied it moves to private/get_deposit_history; this endpoint covers the window in between. Public because a first-time depositor has no account (and thus no session key) until their deposit is applied.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetPendingDepositsParams"
              }
            }
          }
        }
      }
    },
    "/public/register_deposit_address": {
      "post": {
        "tags": [
          "Onchain Actions"
        ],
        "summary": "public/register_deposit_address",
        "operationId": "public_register_deposit_address",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RegisterDepositAddressResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "A pre-requisite before using the `standard` deposit method as opposed to `direct` contract calls. Returns the deterministic on-chain deposit address for a wallet and records it so incoming deposits are watched and credited. Pass the wallet and optionally an existing subaccount id; when creating a new subaccount (subaccount omitted or 0) a non-zero manager_id is required. Repeated calls return the same cached address and keep it alive, while new registrations are rate limited per rolling window; unused addresses are dropped after 7 days.",
        "x-rate-limit-class": "endpoint",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/RegisterDepositAddressParams"
              }
            }
          }
        }
      }
    },
    "/public/decode_action": {
      "post": {
        "tags": [
          "System"
        ],
        "summary": "public/decode_action",
        "operationId": "public_decode_action",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/DecodeActionResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Runs a hex-encoded Action.data payload through the exchange's own ABI decoder and returns either the decoded fields or the exact reason the bytes were rejected, naming the 32-byte word and the field that broke. Reach for this first when a request fails signature verification (14014): every other route encodes Action.data server-side, so a client whose encoder emits a bad word never sees a decode error - the hashes simply disagree. This is the only route a client's own bytes reach the decoder. Needs no auth and executes nothing.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/DecodeActionRequest"
              }
            }
          }
        }
      }
    },
    "/public/getRateLimits": {
      "post": {
        "tags": [
          "System"
        ],
        "summary": "public/getRateLimits",
        "operationId": "public_getRateLimits",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/RateLimitResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the caller's current remaining rate-limit allowances for the active connection, broken out into matching-request, non-matching-request, and per-endpoint buckets. On WebSocket connections it also includes the remaining connection allowance.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_live_incidents": {
      "post": {
        "tags": [
          "System"
        ],
        "summary": "public/get_live_incidents",
        "operationId": "public_get_live_incidents",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetLiveIncidentsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns every incident the exchange operators have declared and not yet resolved, each with its label, message, severity (low, medium or high), whether it was raised manually or by an automated monitor, and when it was raised. Takes no parameters. Incidents are recorded and resolved by operators in ClickHouse; a resolved incident disappears from this list.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetLiveIncidentsParams"
              }
            }
          }
        }
      }
    },
    "/public/get_time": {
      "post": {
        "tags": [
          "System"
        ],
        "summary": "public/get_time",
        "operationId": "public_get_time",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "integer"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the current server time in milliseconds since the UNIX epoch. Takes no parameters and requires no authentication. Use it to align the timestamps and nonces bound into signed actions with the server clock.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_transaction": {
      "post": {
        "tags": [
          "System"
        ],
        "summary": "public/get_transaction",
        "operationId": "public_get_transaction",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetTransactionResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Looks up the settlement lifecycle of a previously submitted operation by its operation UUID (op_uuid). Returns the operation's serialized data along with its batch status, settlement transaction hash, and any error log; the status is null until the operation has been picked up for settlement.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetTransactionParams"
              }
            }
          }
        }
      }
    },
    "/public/get_all_currencies": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_all_currencies",
        "operationId": "public_get_all_currencies",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Currency"
                  }
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns detailed metadata for every configured currency, including supported instrument types, risk managers, spot price and 24h-ago price, SRM/portfolio margin collateral discounts, lending borrow/supply APYs, open-interest caps and utilization per manager, and protocol asset addresses. Currencies that exist but have no configured assets are omitted. Public endpoint, no authentication required.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_all_instruments": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_all_instruments",
        "operationId": "public_get_all_instruments",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetAllInstrumentsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns a paginated, name-descending list of full instrument definitions filtered by `instrument_type`, optional `currency` and optional `risk_universe_id`, with `page`/`page_size` (max 1000) controls and pagination metadata. For options, `expired` selects the listing: `false` returns live options, `true` returns only expired options. An option enters the expired listing up to a minute before it expires, so it does not drop out of both listings at expiry. Perps and spot ignore `expired`. An empty listing returns `instrument_not_found`; a page past the end returns the last page. An option's `settlement_price` here can lag settlement by a few minutes; `public/get_instrument` returns it at once. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetAllInstrumentsRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_all_live_instruments": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_all_live_instruments",
        "operationId": "public_get_all_live_instruments",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "type": "string"
                  }
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns a sorted list of the names of every currently live instrument (active and within its scheduled activation window). Takes no parameters and returns names only, not full definitions. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_currency": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_currency",
        "operationId": "public_get_currency",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Currency"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the full detail record for one currency named by the required `currency` parameter: supported instrument types, risk managers, current and 24h spot price, margin collateral discounts, lending APYs and totals, per-manager open-interest caps and current OI, and protocol asset addresses. Returns a not-found error for unknown currencies. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetCurrencyRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_funding_rate_history": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_funding_rate_history",
        "operationId": "public_get_funding_rate_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/FundingRateHistoryResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns funding-rate OHLC candles for a perpetual instrument (`instrument_name`) over an optional `start_timestamp`/`end_timestamp` window (UTC milliseconds) at a `period` granularity (defaults to 1h; 60s up to 1w supported). Each candle carries open/high/low/close per-hour rates plus a `funding_rate` mirroring the close. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetFundingRateHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_index_chart_data": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_index_chart_data",
        "operationId": "public_get_index_chart_data",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/IndexCandle"
                  }
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns spot index OHLC candles for a `currency` between required `start_timestamp` and `end_timestamp` (UTC seconds) at the given `period` granularity (1m up to 1w). Each candle includes open/high/low/close and a `price` mirroring the close. The requested range is clamped to a maximum number of buckets. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetIndexChartDataRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_instrument": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_instrument",
        "operationId": "public_get_instrument",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/Instrument"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the full public definition of one instrument named by `instrument_name`: type, activation window and active status, tick size, min/max/step amounts, maker/taker/base fee rates, pro-rata matching parameters, base/quote currencies, and type-specific details (option, perp, or spot). Expired options remain queryable by `instrument_name`. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetInstrumentRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_interest_rate_history": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_interest_rate_history",
        "operationId": "public_get_interest_rate_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/InterestRateHistoryResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns lending borrow/supply APY OHLC candles for a `currency`'s pool over an optional time window (UTC milliseconds) at a `period` of 1h or larger (defaults to 1h; sub-hour periods are rejected). An optional `risk_universe_id` restricts to one pool; otherwise every universe's candles are returned, each tagged and carrying pool total supply/borrow. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetInterestRateHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_latest_signed_feeds": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_latest_signed_feeds",
        "operationId": "public_get_latest_signed_feeds",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetLatestSignedFeedsResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the most recent oracle-signed feed data — spot, forward, volatility (SVI), rate, perp, and perpetual funding-rate feeds — each with signer addresses and signatures for on-chain submission. Optional `currency` and `expiry` filters narrow the result (use `expiry` 0 for the non-expiry feeds: spot, perp and funding); both default to all. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetLatestSignedFeedsRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_option_settlement_prices": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_option_settlement_prices",
        "operationId": "public_get_option_settlement_prices",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OptionSettlementPricesResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the settlement price for each settled option expiry of a `currency`, with the expiry date (YYYYMMDD), unix expiry timestamp, and price. Only already-settled expiries are returned. Unknown currencies return a not-found error. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetOptionSettlementPricesRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_perp_impact_twap": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_perp_impact_twap",
        "operationId": "public_get_perp_impact_twap",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PerpImpactTwapResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns TWAPs of the perp mid, ask impact and bid impact prices minus spot for a `currency` between `start_time` and `end_time` (unix seconds).",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetPerpImpactTwapRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_risk_universes": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_risk_universes",
        "operationId": "public_get_risk_universes",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/RiskUniverse"
                  }
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns every risk universe (the isolated risk-containment boundaries trades never cross), each with its display name and description, its managers — at most one Standard (`SM`) and one Portfolio (`PM2`), each listing the derivative instruments it risk-prices and the collateral assets it accepts with their margin discounts and deposit metadata — and its Security Module. The one call that answers which universe and manager to choose: pick a universe, pick a manager in it, and pass its `manager_id` when depositing to a new subaccount (the accepted collateral entries carry the `asset` address for the deposit). The no-margin fallback universe (id 0) is included; it custodies dead-lettered deposits and lists no tradeable instruments. Public endpoint, no authentication required.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/EmptyRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_ticker": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_ticker",
        "operationId": "public_get_ticker",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/TickerSlimSnapshot"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the latest ticker snapshot for a single instrument named by `instrument_name`. The payload matches the data of a `ticker_slim.{instrument}.{interval}` subscription update (mark/index prices, best bid/ask, sizes, greeks, and related fields). Returns an error if no ticker is available. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetTickerRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_tickers": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_tickers",
        "operationId": "public_get_tickers",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetTickersResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns a map of instrument name to latest ticker snapshot for an `instrument_type`. Options require both `currency` and an 8-digit `expiry_date` (YYYYMMDD); perps and spot accept an optional `currency` (omit to fetch all currencies) and reject `expiry_date`. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetTickersRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_trade_history": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_trade_history",
        "operationId": "public_get_trade_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/PublicTradesResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns paginated, anonymized trades with optional filters: `trade_id` (a UUID, which overrides all other filters), `instrument_name`, `instrument_type` (erc20/option/perp), `currency`, `subaccount_id`, `batch_status` (a batch-status name; unset returns trades in every batch state), and `from_timestamp`/`to_timestamp`. Without `trade_id`, `subaccount_id` or `instrument_name`, or whenever `batch_status` is set, the window is limited to the 30 days ending at `to_timestamp` (or now). Each trade is enriched with its settlement status and transaction hash. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetPublicTradeHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_tradingview_chart_data": {
      "post": {
        "tags": [
          "Market Data"
        ],
        "summary": "public/get_tradingview_chart_data",
        "operationId": "public_get_tradingview_chart_data",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/TradingviewCandle"
                  }
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns traded-price OHLCV candles for an `instrument_name` between required `start_timestamp` and `end_timestamp` (UTC seconds) at the given `period` (1m up to 1w), aggregated from executed trade history. Each candle includes open/high/low/close prices plus USD and contract volume, formatted for charting. Public endpoint.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetTradingviewChartDataRequest"
              }
            }
          }
        }
      }
    },
    "/public/get_maker_program_scores": {
      "post": {
        "tags": [
          "Maker Scoring"
        ],
        "summary": "public/get_maker_program_scores",
        "operationId": "public_get_maker_program_scores",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetMakerProgramScoresResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns the wallet-level score breakdown for one maker-program epoch, including square-rooted coverage and quality components, traded-volume multiplier, holder boost, volume, and epoch totals. Scores, trades, program configuration, and the temporary enrolled-wallet set are read from ClickHouse.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetMakerProgramScoresParams"
              }
            }
          }
        }
      }
    },
    "/public/get_maker_programs": {
      "post": {
        "tags": [
          "Maker Scoring"
        ],
        "summary": "public/get_maker_programs",
        "operationId": "public_get_maker_programs",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/ProgramResponse"
                  }
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns every maker-program epoch, including historical epochs, with its asset and currency scope, minimum eligible notional, timestamps, and reward-token amounts. Takes no parameters and reads the configuration from ClickHouse.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetMakerProgramsParams"
              }
            }
          }
        }
      }
    },
    "/public/get_all_referral_codes": {
      "post": {
        "tags": [
          "Referrals"
        ],
        "summary": "public/get_all_referral_codes",
        "operationId": "public_get_all_referral_codes",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "type": "array",
                  "items": {
                    "$ref": "#/components/schemas/Referrer"
                  }
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns every registered referral code along with the owner's wallet address and, when configured, the wallet that receives referral rewards. Takes no parameters.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetAllReferralCodesParams"
              }
            }
          }
        }
      }
    },
    "/public/get_referral_performance": {
      "post": {
        "tags": [
          "Referrals"
        ],
        "summary": "public/get_referral_performance",
        "operationId": "public_get_referral_performance",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/GetReferralPerformanceResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "description": "Returns broker-program referral performance for a referral code, identified either by the code itself or by the referrer's wallet, over a requested time window (start_ms to end_ms, capped at 28 days). The response includes total notional volume, referred fees, fee rewards, builder fees collected, the applicable fee-share percentage, and a per-role/currency/instrument-type breakdown, all as decimal strings.",
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetReferralPerformanceParams"
              }
            }
          }
        }
      }
    },
    "/private/get_subaccount_value_history": {
      "post": {
        "tags": [
          "Other"
        ],
        "summary": "private/get_subaccount_value_history",
        "operationId": "private_get_subaccount_value_history",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/SubaccountValueHistoryResult"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/GetSubaccountValueHistoryRequest"
              }
            }
          }
        }
      }
    },
    "/public/set_socialization_feed_data": {
      "post": {
        "tags": [
          "Other"
        ],
        "summary": "public/set_socialization_feed_data",
        "operationId": "public_set_socialization_feed_data",
        "responses": {
          "200": {
            "description": "Success",
            "content": {
              "application/json": {
                "schema": {
                  "$ref": "#/components/schemas/OperationAckResponse"
                }
              }
            }
          },
          "default": {
            "description": "JSON-RPC error (see Error Codes)"
          }
        },
        "x-rate-limit-class": "non_matching",
        "requestBody": {
          "required": true,
          "content": {
            "application/json": {
              "schema": {
                "$ref": "#/components/schemas/PublicSetSocializationFeedDataRequest"
              }
            }
          }
        }
      }
    }
  },
  "components": {
    "schemas": {
      "AccountFeeInfo": {
        "type": "object",
        "required": [
          "base_fee_discount",
          "rfq_maker_discount",
          "rfq_taker_discount"
        ],
        "properties": {
          "base_fee_discount": {
            "type": "string"
          },
          "option_maker_fee": {
            "type": [
              "string",
              "null"
            ]
          },
          "option_taker_fee": {
            "type": [
              "string",
              "null"
            ]
          },
          "perp_maker_fee": {
            "type": [
              "string",
              "null"
            ]
          },
          "perp_taker_fee": {
            "type": [
              "string",
              "null"
            ]
          },
          "rfq_maker_discount": {
            "type": "string"
          },
          "rfq_taker_discount": {
            "type": "string"
          },
          "spot_maker_fee": {
            "type": [
              "string",
              "null"
            ]
          },
          "spot_taker_fee": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "Action": {
        "description": "EIP-712 typed-data Action struct that you sign; its fields are defined below.",
        "type": "object",
        "required": [
          "data",
          "expiry",
          "module",
          "nonce",
          "owner",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "data": {
            "description": "ABI-encoded action data (`bytes`).",
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint8",
              "minimum": 0.0
            }
          },
          "expiry": {
            "description": "Unix timestamp after which the action is invalid (`uint256`).",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "module": {
            "description": "Module address that will process this action (`address`).",
            "$ref": "#/components/schemas/Address"
          },
          "nonce": {
            "description": "Replay-protection nonce (`uint256`), interpreted as a UTC-**nanosecond** timestamp: it must fall within the nonce validity window (one day) of the action's timestamp.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "owner": {
            "description": "Owner of the subaccount (`address`).",
            "$ref": "#/components/schemas/Address"
          },
          "signer": {
            "description": "Address that signed this action (`address`).",
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "description": "Subaccount identifier (`uint256`).",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "Address": {
        "description": "20-byte Ethereum address as a 0x-prefixed lowercase hex string.",
        "type": "string",
        "maxLength": 42,
        "minLength": 42,
        "pattern": "^0x[0-9a-fA-F]{40}$"
      },
      "AddressKind": {
        "type": "string",
        "enum": [
          "evm",
          "solana"
        ]
      },
      "AggregatedOrdersResult": {
        "type": "object",
        "required": [
          "orders",
          "subaccount_id"
        ],
        "properties": {
          "orders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Order"
            }
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "AggregatedTriggerOrdersResult": {
        "type": "object",
        "required": [
          "orders",
          "subaccount_id"
        ],
        "properties": {
          "orders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Order"
            }
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "AlgoType": {
        "type": "string",
        "enum": [
          "twap"
        ]
      },
      "AssetEntry": {
        "description": "A non-spot asset (option or perp) and its per-universe risk.",
        "type": "object",
        "required": [
          "address",
          "name",
          "universes"
        ],
        "properties": {
          "address": {
            "description": "EIP-55 checksummed protocol asset address.",
            "type": "string"
          },
          "name": {
            "description": "Registered asset name (e.g. \"ETH-OPTION\", \"ETH-PERP\").",
            "type": "string"
          },
          "universes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AssetUniverse"
            }
          }
        }
      },
      "AssetType": {
        "description": "Asset type of the instrument: `\"option\"`, `\"perp\"`, or `\"erc20\"`.",
        "type": "string",
        "enum": [
          "option",
          "perp",
          "erc20"
        ]
      },
      "AssetUniverse": {
        "description": "Per-`(asset, universe)` risk for an option/perp asset: open interest, plus the SRM's perp margin rates on a perp.",
        "type": "object",
        "required": [
          "oi",
          "risk_universe_id"
        ],
        "properties": {
          "oi": {
            "$ref": "#/components/schemas/OpenInterestStats"
          },
          "risk_universe_id": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "risk_universe_name": {
            "description": "Display name of the universe (uppercase, e.g. \"PRIME\"); absent until set by the exchange.",
            "type": [
              "string",
              "null"
            ]
          },
          "srm_perp_margin_requirements": {
            "description": "Absent on an option asset, and where no SRM in this universe prices the currency.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/SrmPerpMarginRequirements"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "AuctionBidEvent": {
        "description": "One executed bid within an auction. Amounts are decimal strings.",
        "type": "object",
        "required": [
          "amounts_liquidated",
          "bidder_id",
          "cash_received",
          "discount_pnl",
          "operation_id",
          "percent_liquidated",
          "positions_realized_pnl",
          "positions_realized_pnl_excl_fees",
          "realized_pnl",
          "realized_pnl_excl_fees",
          "risk_universe_id",
          "timestamp",
          "tx_hash",
          "unit_price"
        ],
        "properties": {
          "amounts_liquidated": {
            "description": "Change in each of the liquidated account's balances from this bid, keyed by instrument name: a long position taken reads negative, a short one positive. Includes the slice of the account's cash; the bid's own price is `cash_received`, not an entry here. The bidder received the negation.",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "bidder_id": {
            "description": "The subaccount that won this slice.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "cash_received": {
            "description": "Cash the liquidated account received for the slice: what the bidder paid in the solvent phase, and negative in the insolvent phase, where the security module pays the bidder instead.",
            "type": "string"
          },
          "discount_pnl": {
            "description": "Always \"0\" — see the module TODO.",
            "type": "string"
          },
          "operation_id": {
            "description": "Stable uuid of the bid operation: the `op_uuid` `private/liquidate` returned to the bidder.",
            "type": "string"
          },
          "percent_liquidated": {
            "description": "Fraction of the account this bid took; \"1\" is the whole account.",
            "type": "string"
          },
          "positions_realized_pnl": {
            "description": "Always empty — see the module TODO.",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "positions_realized_pnl_excl_fees": {
            "description": "Always empty — see the module TODO.",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "realized_pnl": {
            "description": "Always \"0\" — see the module TODO.",
            "type": "string"
          },
          "realized_pnl_excl_fees": {
            "description": "Always \"0\" — see the module TODO.",
            "type": "string"
          },
          "risk_universe_id": {
            "description": "Risk universe of both parties; a bid must come from the liquidatee's.",
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "timestamp": {
            "description": "When the sequencer applied the bid, unix ms.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "tx_hash": {
            "description": "Settling L1 transaction; empty until the bid's batch settles.",
            "type": "string"
          },
          "unit_price": {
            "description": "Price the bid filled at for the whole account; `cash_received` is this times `percent_liquidated`. Negative in the insolvent phase.",
            "type": "string"
          }
        }
      },
      "AuctionHistory": {
        "description": "One auction phase and the bids that filled it.",
        "type": "object",
        "required": [
          "auction_id",
          "auction_type",
          "bids",
          "fee",
          "risk_universe_id",
          "start_timestamp",
          "subaccount_id",
          "tx_hash"
        ],
        "properties": {
          "auction_id": {
            "description": "`{subaccount_id}-{start_time_sec}` — see the module docs.",
            "type": "string"
          },
          "auction_type": {
            "$ref": "#/components/schemas/AuctionType"
          },
          "bids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AuctionBidEvent"
            }
          },
          "end_timestamp": {
            "description": "When the auction ended, unix ms; `null` while still live.",
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "fee": {
            "description": "Liquidation fee charged at auction start; \"0\" for a phase opened by conversion to insolvent.",
            "type": "string"
          },
          "risk_universe_id": {
            "description": "Risk universe of the liquidated subaccount.",
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "start_timestamp": {
            "description": "Auction/phase clock start, unix ms.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_id": {
            "description": "The liquidated (auctioned) subaccount.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "tx_hash": {
            "description": "Settling L1 transaction of the op that opened the auction; empty until that batch settles.",
            "type": "string"
          }
        }
      },
      "AuctionType": {
        "description": "Which phase of the auction this entry describes.",
        "type": "string",
        "enum": [
          "solvent",
          "insolvent"
        ]
      },
      "BatchStatus": {
        "description": "Batch lifecycle status — the single source of lifecycle truth for every operation in the batch (individual ops carry no status of their own). Each stage has a healthy variant and a corresponding `...Error` variant meaning that stage failed. Serialized as the variant name (string) in API responses.",
        "type": "string",
        "enum": [
          "Batching",
          "Executing",
          "Da",
          "Proving",
          "Settling",
          "Settled",
          "BatchingError",
          "ExecutingError",
          "DaError",
          "ProvingError",
          "SettlingError",
          "SettledError"
        ]
      },
      "BurnSharesRequest": {
        "description": "Fields common to every signed vault action. They appear alongside each endpoint's action-specific parameters in the same request object.",
        "type": "object",
        "required": [
          "nonce",
          "request_id",
          "share_price",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id",
          "withdraw_hash"
        ],
        "properties": {
          "nonce": {
            "type": "string"
          },
          "request_id": {
            "$ref": "#/components/schemas/VaultRequestId"
          },
          "share_price": {
            "description": "Quoted share price in USD per share, as a decimal string (e.g. `\"1\"`).",
            "type": "string",
            "format": "decimal"
          },
          "signature": {
            "description": "0x-prefixed hex of the 65-byte EOA signature.",
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "description": "The subaccount the action is signed on; which subaccount applies depends on the specific method — see that method's reference.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "withdraw_hash": {
            "description": "0x-prefixed hex of the 32-byte user withdraw-action hash.",
            "type": "string"
          }
        }
      },
      "CancelAlgoOrderRequest": {
        "type": "object",
        "required": [
          "order_id",
          "subaccount_id"
        ],
        "properties": {
          "order_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelAllAlgoOrdersRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelAllAlgoOrdersResponse": {
        "description": "The literal string `\"ok\"` returned on success.",
        "type": "string",
        "enum": [
          "ok"
        ]
      },
      "CancelAllRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "cancel_algo_orders": {
            "default": null,
            "type": [
              "boolean",
              "null"
            ]
          },
          "cancel_trigger_orders": {
            "default": null,
            "type": [
              "boolean",
              "null"
            ]
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelAllResponse": {
        "description": "The literal string `\"ok\"` returned on success.",
        "type": "string",
        "enum": [
          "ok"
        ]
      },
      "CancelAllTriggerOrdersRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelAllTriggerOrdersResponse": {
        "description": "The literal string `\"ok\"` returned on success.",
        "type": "string",
        "enum": [
          "ok"
        ]
      },
      "CancelBatchQuotesRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "label": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "nonce": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "quote_id": {
            "description": "Optional UUID v4 string",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "rfq_id": {
            "description": "Optional UUID v4 string",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "CancelBatchResult": {
        "type": "object",
        "required": [
          "cancelled_ids"
        ],
        "properties": {
          "cancelled_ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        }
      },
      "CancelBatchRfqsRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "label": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "nonce": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "rfq_id": {
            "description": "Optional UUID v4 string",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "CancelBatchRfqsResponse": {
        "type": "object",
        "required": [
          "cancelled_ids"
        ],
        "properties": {
          "cancelled_ids": {
            "type": "array",
            "items": {
              "type": "string",
              "format": "uuid"
            }
          }
        }
      },
      "CancelByInstrumentRequest": {
        "type": "object",
        "required": [
          "instrument_name",
          "subaccount_id"
        ],
        "properties": {
          "instrument_name": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelByInstrumentResponse": {
        "type": "object",
        "required": [
          "cancelled_orders"
        ],
        "properties": {
          "cancelled_orders": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelByLabelRequest": {
        "type": "object",
        "required": [
          "label",
          "subaccount_id"
        ],
        "properties": {
          "instrument_name": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "label": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelByLabelResponse": {
        "type": "object",
        "required": [
          "cancelled_orders"
        ],
        "properties": {
          "cancelled_orders": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelByNonceRequest": {
        "type": "object",
        "required": [
          "instrument_name",
          "nonce",
          "subaccount_id"
        ],
        "properties": {
          "instrument_name": {
            "type": "string"
          },
          "nonce": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelByNonceResponse": {
        "type": "object",
        "required": [
          "cancelled_orders"
        ],
        "properties": {
          "cancelled_orders": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelOrderRequest": {
        "type": "object",
        "required": [
          "instrument_name",
          "order_id",
          "subaccount_id"
        ],
        "properties": {
          "instrument_name": {
            "type": "string"
          },
          "order_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelQuoteRequest": {
        "type": "object",
        "required": [
          "quote_id",
          "subaccount_id"
        ],
        "properties": {
          "label": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "nonce": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "quote_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "rfq_id": {
            "description": "Optional UUID v4 string",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "CancelReason": {
        "type": "string",
        "enum": [
          "",
          "user_request",
          "mmp_trigger",
          "insufficient_margin",
          "signed_max_fee_too_low",
          "cancel_on_disconnect",
          "ioc_or_market_partial_fill",
          "session_key_deregistered",
          "subaccount_withdrawn",
          "compliance",
          "trigger_failed",
          "validation_failed",
          "algo_completed"
        ]
      },
      "CancelRfqRequest": {
        "type": "object",
        "required": [
          "rfq_id",
          "subaccount_id"
        ],
        "properties": {
          "rfq_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "CancelRfqResponse": {
        "description": "The literal string `\"ok\"` returned on success.",
        "type": "string",
        "enum": [
          "ok"
        ]
      },
      "CancelTriggerOrderRequest": {
        "type": "object",
        "required": [
          "order_id",
          "subaccount_id"
        ],
        "properties": {
          "order_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "CancelVaultRequestRequest": {
        "description": "Fields common to every signed vault action. They appear alongside each endpoint's action-specific parameters in the same request object.",
        "type": "object",
        "required": [
          "nonce",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id",
          "vault_subaccount_id"
        ],
        "properties": {
          "nonce": {
            "type": "string"
          },
          "signature": {
            "description": "0x-prefixed hex of the 65-byte EOA signature.",
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "description": "The subaccount the action is signed on; which subaccount applies depends on the specific method — see that method's reference.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "vault_subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "ChangeSubaccountLabelRequest": {
        "type": "object",
        "required": [
          "label",
          "subaccount_id"
        ],
        "properties": {
          "label": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "Collateral": {
        "type": "object",
        "required": [
          "amount",
          "amount_step",
          "asset_name",
          "asset_type",
          "average_price",
          "average_price_excl_fees",
          "creation_timestamp",
          "cumulative_interest",
          "currency",
          "delta",
          "delta_currency",
          "initial_margin",
          "maintenance_margin",
          "mark_price",
          "mark_value",
          "open_orders_margin",
          "pending_interest",
          "realized_pnl",
          "realized_pnl_excl_fees",
          "total_fees",
          "unrealized_pnl",
          "unrealized_pnl_excl_fees"
        ],
        "properties": {
          "amount": {
            "type": "string"
          },
          "amount_step": {
            "type": "string"
          },
          "asset_name": {
            "type": "string"
          },
          "asset_type": {
            "type": "string"
          },
          "average_price": {
            "type": "string"
          },
          "average_price_excl_fees": {
            "type": "string"
          },
          "creation_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "cumulative_interest": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "delta": {
            "type": "string"
          },
          "delta_currency": {
            "type": "string"
          },
          "initial_margin": {
            "type": "string"
          },
          "maintenance_margin": {
            "type": "string"
          },
          "mark_price": {
            "type": "string"
          },
          "mark_value": {
            "type": "string"
          },
          "open_orders_margin": {
            "type": "string"
          },
          "pending_interest": {
            "type": "string"
          },
          "realized_pnl": {
            "type": "string"
          },
          "realized_pnl_excl_fees": {
            "type": "string"
          },
          "total_fees": {
            "type": "string"
          },
          "unrealized_pnl": {
            "type": "string"
          },
          "unrealized_pnl_excl_fees": {
            "type": "string"
          }
        }
      },
      "CreateOrderRequest": {
        "description": "`private/order` params.",
        "type": "object",
        "required": [
          "amount",
          "direction",
          "instrument_name",
          "limit_price",
          "max_fee",
          "nonce",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "algo_duration_sec": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "algo_num_slices": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "algo_type": {
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/AlgoType"
              },
              {
                "type": "null"
              }
            ]
          },
          "amount": {
            "description": "Order amount in units of the base, as a decimal string (e.g. `\"1.5\"`) or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "client": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "extra_fee": {
            "description": "Optional extra fee per unit of volume, as a decimal string or JSON number. Defaults to zero.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "instrument_name": {
            "type": "string"
          },
          "is_atomic_signing": {
            "default": null,
            "type": [
              "boolean",
              "null"
            ]
          },
          "label": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "limit_price": {
            "description": "Limit price in quote currency, as a decimal string (e.g. `\"3100.5\"`) or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "max_fee": {
            "description": "Max fee per unit of volume in quote currency, as a decimal string or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "mmp": {
            "description": "Tags the order for market maker protection. Only tagged orders are cancelled by cancel on disconnect.",
            "default": null,
            "type": [
              "boolean",
              "null"
            ]
          },
          "nonce": {
            "type": "string"
          },
          "order_type": {
            "default": "limit",
            "$ref": "#/components/schemas/OrderType"
          },
          "reduce_only": {
            "default": null,
            "type": [
              "boolean",
              "null"
            ]
          },
          "referral_code": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "reject_post_only": {
            "default": null,
            "type": [
              "boolean",
              "null"
            ]
          },
          "reject_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "int64"
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "time_in_force": {
            "default": "gtc",
            "$ref": "#/components/schemas/TimeInForce"
          },
          "trigger_price": {
            "description": "Trigger price as a decimal string or JSON number; omit for non-trigger orders.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "trigger_price_type": {
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/TriggerPriceType"
              },
              {
                "type": "null"
              }
            ]
          },
          "trigger_type": {
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/TriggerType"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "CreateVaultRequest": {
        "description": "Fields common to every signed vault action. They appear alongside each endpoint's action-specific parameters in the same request object.",
        "type": "object",
        "required": [
          "cooldown_sec",
          "deposit_spot_asset",
          "initial_deposit",
          "initial_share_price_usd",
          "management_fee_bps",
          "manager_id",
          "max_fee_usd",
          "max_slippage_bps",
          "nonce",
          "performance_fee_bps",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "benchmark_asset": {
            "description": "Spot asset to denominate the high-water mark in. Omit (or null) for the feed-less USD default; set it to charge performance fees only on outperformance measured against that asset.",
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/Address"
              },
              {
                "type": "null"
              }
            ]
          },
          "cooldown_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "deposit_spot_asset": {
            "$ref": "#/components/schemas/Address"
          },
          "initial_deposit": {
            "description": "Initial deposit in the vault's deposit asset, as a USD decimal string (e.g. `\"15000\"`).",
            "type": "string",
            "format": "decimal"
          },
          "initial_share_price_usd": {
            "description": "Initial share price the vault is seeded at, in USD, as a decimal string (e.g. `\"1\"` or `\"100\"`). Must lie within the protocol's permitted range.",
            "type": "string",
            "format": "decimal"
          },
          "management_fee_bps": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "manager_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "max_fee_usd": {
            "description": "Maximum sequencer fee the signer authorises, in USD, as a decimal string (e.g. `\"1.5\"`).",
            "type": "string",
            "format": "decimal"
          },
          "max_slippage_bps": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "nonce": {
            "type": "string"
          },
          "performance_fee_bps": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signature": {
            "description": "0x-prefixed hex of the 65-byte EOA signature.",
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "description": "The subaccount the action is signed on; which subaccount applies depends on the specific method — see that method's reference.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "Currency": {
        "description": "A currency's spot price and its assets grouped by type. Managers risking the currency are listed per universe under `managers`; asset-level risk — OI, lending, and discounts — lives under each asset's `universes`.",
        "type": "object",
        "required": [
          "currency",
          "managers",
          "market_type",
          "spot",
          "spot_price"
        ],
        "properties": {
          "currency": {
            "type": "string"
          },
          "managers": {
            "description": "Managers risk-pricing this currency, one entry per universe where at least one manager covers it.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/UniverseManagers"
            }
          },
          "market_type": {
            "description": "Which instrument/collateral classes the currency is enabled for.",
            "$ref": "#/components/schemas/MarketType"
          },
          "option": {
            "description": "The option asset for this currency, if one is registered.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/AssetEntry"
              },
              {
                "type": "null"
              }
            ]
          },
          "perp": {
            "description": "The perp asset for this currency, if one is registered.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/AssetEntry"
              },
              {
                "type": "null"
              }
            ]
          },
          "spot": {
            "description": "Every spot asset registered to this currency (e.g. lending \"USDC\" and non-lending \"USDC-NL\").",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SpotAssetEntry"
            }
          },
          "spot_price": {
            "type": "string"
          },
          "spot_price_24h": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "DailyTradingStatistics": {
        "type": "object",
        "required": [
          "c",
          "h",
          "l",
          "n",
          "oi",
          "p",
          "pr",
          "v"
        ],
        "properties": {
          "c": {
            "description": "Number of contracts traded during last 24 hours",
            "type": "string",
            "format": "decimal"
          },
          "h": {
            "description": "Highest trade price during last 24h",
            "type": "string",
            "format": "decimal"
          },
          "l": {
            "description": "Lowest trade price during last 24h",
            "type": "string",
            "format": "decimal"
          },
          "n": {
            "description": "Number of trades during last 24h",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "oi": {
            "description": "Current total open interest",
            "type": "string",
            "format": "decimal"
          },
          "p": {
            "description": "Options: 24hr percent change in premium; Perps: 24hr percent change in mark price",
            "type": "string",
            "format": "decimal"
          },
          "pr": {
            "description": "Premium volume traded during last 24 hours",
            "type": "string",
            "format": "decimal"
          },
          "v": {
            "description": "Notional volume traded during last 24 hours",
            "type": "string",
            "format": "decimal"
          }
        }
      },
      "DecodableActionType": {
        "description": "Which action codec to run the bytes through. A module address is not enough on its own: the RFQ module signs two different layouts, and the vault module signs seven.",
        "type": "string",
        "enum": [
          "order",
          "rfq_maker",
          "rfq_taker",
          "transfer",
          "external_transfer",
          "withdrawal",
          "liquidation",
          "set_session_key",
          "update_whitelisted_recipients",
          "delete_subaccount",
          "vault_deposit",
          "vault_withdraw",
          "vault_cancel",
          "vault_create",
          "vault_mint_shares",
          "vault_burn_shares",
          "vault_force_burn"
        ]
      },
      "DecodeActionRequest": {
        "type": "object",
        "required": [
          "action_type",
          "encoded_data"
        ],
        "properties": {
          "action_type": {
            "description": "Which action layout the bytes are meant to be.",
            "$ref": "#/components/schemas/DecodableActionType"
          },
          "encoded_data": {
            "description": "ABI-encoded action data (the `Action.data` bytes), 0x-prefixed hex. Same value the `*_debug` routes return as `encoded_data`.",
            "type": "string"
          }
        }
      },
      "DecodeActionResponse": {
        "type": "object",
        "required": [
          "action_type",
          "decoded"
        ],
        "properties": {
          "action_type": {
            "description": "Echoed back so a batch of probes stays attributable.",
            "$ref": "#/components/schemas/DecodableActionType"
          },
          "decoded": {
            "description": "The decoded fields. Decimal values are at the protocol's 1e12 scale — the wire carries 1e18, and the codec rejects anything that does not convert exactly."
          }
        }
      },
      "DeleteSubaccountRequest": {
        "type": "object",
        "required": [
          "nonce",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "nonce": {
            "type": "string"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "DeleteSubaccountResponse": {
        "type": "object",
        "required": [
          "op_uuid",
          "operation_id"
        ],
        "properties": {
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "DepositBridgeOrigin": {
        "description": "Where a credited deposit came from. Named apart from `PendingDepositBridgeOrigin` because schemars shares one namespace and would emit an order-dependent name.",
        "type": "object",
        "required": [
          "rail",
          "source_chain_id",
          "source_tx_hash"
        ],
        "properties": {
          "rail": {
            "description": "Bridge protocol: `lifi` or `layerzero`.",
            "type": "string"
          },
          "source_address": {
            "description": "Their wallet on that chain, lower-cased; absent when the rail gave none.",
            "type": [
              "string",
              "null"
            ]
          },
          "source_chain_id": {
            "description": "Chain the user sent from.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "source_tx_hash": {
            "description": "Their transaction on that chain.",
            "type": "string"
          }
        }
      },
      "DepositEntry": {
        "description": "`amount` and `fee` are decimal strings (e.g. `\"1.1\"`); the net credited amount is `amount - fee`. `operation_id`/`batch_uuid` are stable uuids.",
        "type": "object",
        "required": [
          "amount",
          "asset",
          "batch_status",
          "batch_uuid",
          "fee",
          "is_fallback",
          "new_subaccount",
          "operation_id",
          "subaccount_id",
          "timestamp",
          "wallet"
        ],
        "properties": {
          "action_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "amount": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "asset": {
            "type": "string"
          },
          "batch_status": {
            "$ref": "#/components/schemas/BatchStatus"
          },
          "batch_uuid": {
            "type": "string"
          },
          "bridge_origin": {
            "description": "Absent for a plain L1 deposit, a bridge sent outside Derive's own quotes, or a sweep that credited several bridges at once.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/DepositBridgeOrigin"
              },
              {
                "type": "null"
              }
            ]
          },
          "fallback_error_code": {
            "description": "Error code for the deposit's failure to reach its target subaccount.",
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "fallback_error_data": {
            "description": "Null for an internal error, whose text stays internal.",
            "type": [
              "string",
              "null"
            ]
          },
          "fallback_error_message": {
            "description": "Null for an internal error, whose text stays internal.",
            "type": [
              "string",
              "null"
            ]
          },
          "fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "is_fallback": {
            "description": "The deposit could not reach its target, so it was credited to the wallet's fallback subaccount instead.",
            "type": "boolean"
          },
          "l1_sender": {
            "description": "Who sent those funds on L1: the depositor's wallet, an exchange, or a bridge's relayer. Absent exactly when `l1_tx_hash` is.",
            "type": [
              "string",
              "null"
            ]
          },
          "l1_tx_hash": {
            "description": "The L1 transaction that moved the funds into the escrow. Absent when no tracked L1 row backs the deposit, or when one action credited several transfers at once.",
            "type": [
              "string",
              "null"
            ]
          },
          "new_subaccount": {
            "type": "boolean"
          },
          "operation_id": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "timestamp": {
            "description": "Unix milliseconds.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "tx_hash": {
            "description": "The settlement batch's commit, `null` until the batch settles. Not the deposit's own L1 transaction: that is `l1_tx_hash`.",
            "type": [
              "string",
              "null"
            ]
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "DepositHistoryResult": {
        "type": "object",
        "required": [
          "deposits"
        ],
        "properties": {
          "deposits": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/DepositEntry"
            }
          }
        }
      },
      "Direction": {
        "type": "string",
        "enum": [
          "buy",
          "sell"
        ]
      },
      "EditSessionKeyRequest": {
        "type": "object",
        "required": [
          "public_session_key",
          "wallet"
        ],
        "properties": {
          "ip_whitelist": {
            "default": null,
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "label": {
            "description": "Send `null` to clear the label; omit the field to leave it unchanged.",
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "offchain_scopes": {
            "default": null,
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "public_session_key": {
            "type": "string"
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "EmptyRequest": {
        "description": "This method takes no parameters; send an empty object `{}`.\n\nBraced rather than a unit struct so schemars emits `{\"type\": \"object\"}`: a unit struct emits `null`, which contradicts the line above and forced every generated client to cast around the params type.",
        "type": "object"
      },
      "Erc20Details": {
        "type": "object",
        "required": [
          "decimals"
        ],
        "properties": {
          "decimals": {
            "type": "integer",
            "format": "uint8",
            "minimum": 0.0
          },
          "underlying_erc20": {
            "description": "On-chain ERC20 token deposited into the spot asset (informational).",
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "ExecuteQuoteRequest": {
        "type": "object",
        "required": [
          "direction",
          "legs",
          "max_fee",
          "nonce",
          "quote_id",
          "rfq_id",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "client": {
            "default": "",
            "type": "string"
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "enable_taker_protection": {
            "default": false,
            "type": "boolean"
          },
          "label": {
            "default": "",
            "type": "string"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PricedLegParamsAndResponse"
            }
          },
          "max_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "nonce": {
            "type": "string"
          },
          "quote_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "referral_code": {
            "default": "",
            "type": "string"
          },
          "rfq_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "int64"
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "ExpirySettlementPrice": {
        "description": "One settled expiry and its settlement price.",
        "type": "object",
        "required": [
          "expiry_date",
          "utc_expiry_sec"
        ],
        "properties": {
          "expiry_date": {
            "description": "Expiry date in `YYYYMMDD` format.",
            "type": "string"
          },
          "price": {
            "description": "Settlement price. Only settled expiries are returned, so never null.",
            "type": [
              "string",
              "null"
            ]
          },
          "utc_expiry_sec": {
            "description": "UTC timestamp of expiry, unix seconds.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "ExternalTransferActionDataResponse": {
        "type": "object",
        "required": [
          "amount",
          "asset",
          "max_fee_usd",
          "new_subaccount_manager",
          "recipient_address",
          "sub_id",
          "to_subaccount_id"
        ],
        "properties": {
          "amount": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "asset": {
            "type": "string"
          },
          "max_fee_usd": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "new_subaccount_manager": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "recipient_address": {
            "type": "string"
          },
          "sub_id": {
            "type": "string"
          },
          "to_subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "ForceBurnRequest": {
        "description": "Fields common to every signed vault action. They appear alongside each endpoint's action-specific parameters in the same request object.",
        "type": "object",
        "required": [
          "holder",
          "nonce",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "holder": {
            "description": "The shareholder being exited.",
            "$ref": "#/components/schemas/Address"
          },
          "nonce": {
            "type": "string"
          },
          "signature": {
            "description": "0x-prefixed hex of the 65-byte EOA signature.",
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "description": "The subaccount the action is signed on; which subaccount applies depends on the specific method — see that method's reference.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "ForwardFeedDataResponse": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "deadline",
          "expiry",
          "fwd_diff",
          "signatures",
          "spot_aggregate_latest",
          "spot_aggregate_start",
          "timestamp"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "expiry": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "fwd_diff": {
            "type": "string"
          },
          "signatures": {
            "$ref": "#/components/schemas/OracleSignatureDataResponse"
          },
          "spot_aggregate_latest": {
            "type": "string"
          },
          "spot_aggregate_start": {
            "type": "string"
          },
          "timestamp": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "ForwardedToken": {
        "type": "object",
        "required": [
          "bridge_type",
          "symbol",
          "token"
        ],
        "properties": {
          "bridge_type": {
            "description": "`native-oft`, `oft` or `ccip`.",
            "type": "string"
          },
          "symbol": {
            "type": "string"
          },
          "token": {
            "description": "Ethereum token to withdraw.",
            "type": "string"
          }
        }
      },
      "FundingFeedDataResponse": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "deadline",
          "funding_rate",
          "signatures",
          "timestamp"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "funding_rate": {
            "description": "Per-hour funding rate as a decimal string.",
            "type": "string"
          },
          "signatures": {
            "$ref": "#/components/schemas/OracleSignatureDataResponse"
          },
          "timestamp": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "FundingRateCandle": {
        "description": "Single funding-rate OHLC candle. `funding_rate` mirrors `close` for backward compatibility with the pre-OHLC response shape; `timestamp` is the bucket start in UTC milliseconds.",
        "type": "object",
        "required": [
          "close",
          "currency",
          "funding_rate",
          "high",
          "low",
          "open",
          "risk_universe_id",
          "timestamp"
        ],
        "properties": {
          "close": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "funding_rate": {
            "type": "string"
          },
          "high": {
            "type": "string"
          },
          "low": {
            "type": "string"
          },
          "open": {
            "type": "string"
          },
          "risk_universe_id": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "FundingRateHistoryResult": {
        "description": "Response shape for `public/get_funding_rate_history`.",
        "type": "object",
        "required": [
          "funding_rate_history"
        ],
        "properties": {
          "funding_rate_history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/FundingRateCandle"
            }
          }
        }
      },
      "GetAccountRequest": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "wallet": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "GetAlgoOrdersRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "GetAllInstrumentsRequest": {
        "type": "object",
        "required": [
          "expired",
          "instrument_type"
        ],
        "properties": {
          "currency": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "expired": {
            "type": "boolean"
          },
          "instrument_type": {
            "$ref": "#/components/schemas/AssetType"
          },
          "page": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "page_size": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "risk_universe_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          }
        }
      },
      "GetAllInstrumentsResponse": {
        "type": "object",
        "required": [
          "instruments",
          "pagination"
        ],
        "properties": {
          "instruments": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Instrument"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "GetAllPortfoliosRequest": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "wallet": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "GetAllReferralCodesParams": {
        "type": "object"
      },
      "GetCollateralsRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetCuratedVaultsRequest": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "wallet": {
            "description": "The curator wallet (0x hex).",
            "type": "string"
          }
        }
      },
      "GetCurrencyRequest": {
        "type": "object",
        "required": [
          "currency"
        ],
        "properties": {
          "currency": {
            "type": "string"
          }
        }
      },
      "GetDepositHistoryRequest": {
        "description": "Parameters for `private/get_deposit_history`. Takes `subaccount_id` plus an optional `[start_timestamp, end_timestamp]` window in unix milliseconds. `wallet`, when set, takes precedence over `subaccount_id` and returns the whole wallet's deposits. Results are capped at 1000 rows.",
        "type": "object",
        "properties": {
          "end_timestamp": {
            "description": "End of the window, unix milliseconds (default: unbounded / now).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "start_timestamp": {
            "description": "Start of the window, unix milliseconds (default 0).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "wallet": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetErc20TransferHistoryRequest": {
        "description": "Parameters for `private/get_erc20_transfer_history`. Matches `get_withdrawal_history`: `subaccount_id` plus an optional `[start_timestamp, end_timestamp]` window in unix milliseconds. `wallet`, when set, takes precedence over `subaccount_id` and returns the whole wallet's transfers. Results are capped at 1000 rows.",
        "type": "object",
        "properties": {
          "end_timestamp": {
            "description": "End of the window, unix milliseconds (default: unbounded / now).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "start_timestamp": {
            "description": "Start of the window, unix milliseconds (default 0).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "wallet": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetFundingHistoryRequest": {
        "description": "Parameters for `private/get_funding_history`.\n\n`subaccount_id`, `start_timestamp`, and `end_timestamp` accept either a JSON number or a string-encoded integer. Pagination is `page` >= 1, `page_size` in 1..=1000.",
        "type": "object",
        "properties": {
          "end_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "instrument_name": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "page": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "page_size": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "start_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "wallet": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetFundingRateHistoryRequest": {
        "description": "Parameters for `public/get_funding_rate_history`. Timestamp fields accept either a JSON number or a string-encoded integer, and are UTC milliseconds.",
        "type": "object",
        "required": [
          "instrument_name"
        ],
        "properties": {
          "end_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "instrument_name": {
            "type": "string"
          },
          "period": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "start_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          }
        }
      },
      "GetIndexChartDataRequest": {
        "description": "Parameters for `public/get_index_chart_data`. Numeric fields accept either a JSON number or a string-encoded integer. Timestamps are UTC seconds.",
        "type": "object",
        "required": [
          "currency",
          "end_timestamp",
          "period",
          "start_timestamp"
        ],
        "properties": {
          "currency": {
            "type": "string"
          },
          "end_timestamp": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "period": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "start_timestamp": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetInstrumentRequest": {
        "type": "object",
        "required": [
          "instrument_name"
        ],
        "properties": {
          "instrument_name": {
            "type": "string"
          }
        }
      },
      "GetInterestHistoryRequest": {
        "description": "Parameters for `private/get_interest_history`. `wallet`, when set, takes precedence over `subaccount_id` and returns the whole wallet's settlements. `[start_timestamp, end_timestamp]` is a unix-millisecond window. Results are capped at 1000 rows, newest first.",
        "type": "object",
        "properties": {
          "end_timestamp": {
            "description": "End of the window, unix milliseconds (default: now / unbounded).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "start_timestamp": {
            "description": "Start of the window, unix milliseconds (default 0).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "wallet": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetInterestRateHistoryRequest": {
        "description": "Parameters for `public/get_interest_rate_history`. Timestamp fields accept either a JSON number or a string-encoded integer, and are UTC milliseconds.",
        "type": "object",
        "required": [
          "currency"
        ],
        "properties": {
          "currency": {
            "type": "string"
          },
          "end_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "period": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "risk_universe_id": {
            "description": "Restrict to one risk universe's pool. Omit to return every universe's candles for the currency (each candle is tagged with its universe).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "start_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          }
        }
      },
      "GetLatestSignedFeedsRequest": {
        "type": "object",
        "properties": {
          "currency": {
            "description": "Currency filter, (defaults to all currencies)",
            "type": [
              "string",
              "null"
            ]
          },
          "expiry": {
            "description": "Expiry filter for options and forward data (defaults to all expiries). Use `0` to get data only for spot and perpetuals.",
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetLatestSignedFeedsResponse": {
        "type": "object",
        "required": [
          "funding_data",
          "fwd_data",
          "perp_data",
          "rate_data",
          "spot_data",
          "vol_data"
        ],
        "properties": {
          "funding_data": {
            "description": "currency -> latest funding-rate feed data",
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/FundingFeedDataResponse"
            }
          },
          "fwd_data": {
            "description": "currency -> expiry -> latest forward feed data",
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/components/schemas/ForwardFeedDataResponse"
              }
            }
          },
          "perp_data": {
            "description": "currency -> feed type -> latest perp feed data",
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/components/schemas/PerpFeedDataResponse"
              }
            }
          },
          "rate_data": {
            "description": "currency -> expiry -> latest rate feed data",
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/components/schemas/RateFeedDataResponse"
              }
            }
          },
          "spot_data": {
            "description": "currency -> latest spot feed data",
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/SpotFeedDataResponse"
            }
          },
          "vol_data": {
            "description": "currency -> expiry -> latest vol feed data",
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "additionalProperties": {
                "$ref": "#/components/schemas/VolFeedDataResponse"
              }
            }
          }
        }
      },
      "GetLiquidationHistoryRequest": {
        "description": "Parameters for `public/get_liquidation_history`. Omit `subaccount_id` to span every account. `[start_timestamp, end_timestamp]` is a unix-millisecond window over the auction *start*.",
        "type": "object",
        "properties": {
          "end_timestamp": {
            "description": "End of the window, unix milliseconds (default: unbounded).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "page": {
            "description": "Page number, 1-based (default 1).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "page_size": {
            "description": "Results per page (default 100, max 1000).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "start_timestamp": {
            "description": "Start of the window, unix milliseconds (default 0).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetLiveBurnRequestsRequest": {
        "type": "object",
        "required": [
          "limit",
          "subaccount_id"
        ],
        "properties": {
          "limit": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetLiveIncidentsParams": {
        "type": "object"
      },
      "GetLiveIncidentsResponse": {
        "type": "object",
        "required": [
          "incidents"
        ],
        "properties": {
          "incidents": {
            "description": "List of ongoing incidents",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/IncidentResponse"
            }
          }
        }
      },
      "GetLiveMintRequestsRequest": {
        "type": "object",
        "required": [
          "limit",
          "subaccount_id"
        ],
        "properties": {
          "limit": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetLiveVaultRequestsRequest": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "wallet": {
            "description": "The shareholder wallet (0x hex).",
            "type": "string"
          }
        }
      },
      "GetMakerProgramScoresParams": {
        "type": "object",
        "required": [
          "epoch_start_timestamp",
          "program_name"
        ],
        "properties": {
          "epoch_start_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "program_name": {
            "type": "string"
          }
        }
      },
      "GetMakerProgramScoresResponse": {
        "type": "object",
        "required": [
          "program",
          "scores",
          "total_score",
          "total_volume"
        ],
        "properties": {
          "program": {
            "$ref": "#/components/schemas/ProgramResponse"
          },
          "scores": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ScoreBreakdown"
            }
          },
          "total_score": {
            "type": "string"
          },
          "total_volume": {
            "type": "string"
          }
        }
      },
      "GetMakerProgramsParams": {
        "type": "object"
      },
      "GetMakerRfqHistoryRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "from_timestamp": {
            "description": "Start of the RFQ creation-time window, in ms. Defaults to 30 days before the earlier of `to_timestamp` and now.",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "page": {
            "default": 1,
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "page_size": {
            "default": 20,
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "rfq_id": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "rfq_subaccount_id": {
            "description": "Only RFQs sent from this taker subaccount.",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "status": {
            "description": "`filled`, `cancelled` or `expired`. Omit for all three.",
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/RFQStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "to_timestamp": {
            "description": "End of the RFQ creation-time window, in ms.",
            "default": 9223372036854775807,
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "GetMarginResponse": {
        "description": "Result of `public/get_margin` / `private/get_margin`: net margin (MtM minus requirement; positive = healthy) before and after the simulated changes, as USD decimal strings.",
        "type": "object",
        "required": [
          "is_valid_trade",
          "post_initial_margin",
          "post_maintenance_margin",
          "pre_initial_margin",
          "pre_maintenance_margin",
          "subaccount_id"
        ],
        "properties": {
          "is_valid_trade": {
            "description": "`true` when post-change initial margin passes, or the change is risk-reducing while maintenance margin stays healthy.",
            "type": "boolean"
          },
          "post_initial_margin": {
            "type": "string"
          },
          "post_maintenance_margin": {
            "type": "string"
          },
          "pre_initial_margin": {
            "type": "string"
          },
          "pre_maintenance_margin": {
            "type": "string"
          },
          "subaccount_id": {
            "description": "`0` for the public simulated-portfolio variant.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetOnchainActionHistoryParams": {
        "type": "object",
        "properties": {
          "action_type": {
            "description": "On-chain `actionType` id.",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "end_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "page": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "page_size": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "start_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "wallet": {
            "description": "L1 sender of the action (any hex casing).",
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetOnchainActionHistoryResponse": {
        "type": "object",
        "required": [
          "actions",
          "pagination"
        ],
        "properties": {
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OnchainActionHistoryEntry"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "GetOpenOrdersRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "GetOptionSettlementHistoryParams": {
        "description": "Parameters for `private/get_option_settlement_history`. One of `wallet` or `subaccount_id` must be provided; `wallet` returns every subaccount's settlements.",
        "type": "object",
        "properties": {
          "subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "wallet": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetOptionSettlementPricesRequest": {
        "description": "Parameters for `public/get_option_settlement_prices`.",
        "type": "object",
        "required": [
          "currency"
        ],
        "properties": {
          "currency": {
            "type": "string"
          }
        }
      },
      "GetOrderHistoryRequest": {
        "type": "object",
        "properties": {
          "from_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "page": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "page_size": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "to_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "wallet": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetOrderRequest": {
        "type": "object",
        "required": [
          "order_id",
          "subaccount_id"
        ],
        "properties": {
          "order_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "GetPendingDepositsParams": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "wallet": {
            "description": "Wallet the pending deposits credit.",
            "type": "string"
          }
        }
      },
      "GetPendingDepositsResult": {
        "type": "object",
        "required": [
          "pending_deposits",
          "wallet"
        ],
        "properties": {
          "pending_deposits": {
            "description": "L1 deposits, plus every bridge in flight or settled inside [`BRIDGE_HISTORY_WINDOW_MS`], each exactly once.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PendingDepositEntry"
            }
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "GetPerpImpactTwapRequest": {
        "description": "Parameters for `public/get_perp_impact_twap`. Timestamps are unix seconds, as either a JSON number or a string-encoded integer.",
        "type": "object",
        "required": [
          "currency",
          "end_time",
          "start_time"
        ],
        "properties": {
          "currency": {
            "type": "string"
          },
          "end_time": {
            "type": "integer",
            "format": "int64"
          },
          "start_time": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "GetPositionsRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetPublicTradeHistoryRequest": {
        "type": "object",
        "properties": {
          "batch_status": {
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/BatchStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "currency": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "from_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "instrument_name": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "instrument_type": {
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/AssetType"
              },
              {
                "type": "null"
              }
            ]
          },
          "page": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "page_size": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "to_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "trade_id": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetQuotesRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "from_timestamp": {
            "default": 0,
            "type": "integer",
            "format": "int64"
          },
          "page": {
            "default": 1,
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "page_size": {
            "default": 20,
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "quote_id": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "rfq_id": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "to_timestamp": {
            "default": 9223372036854775807,
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "GetReferralPerformanceParams": {
        "type": "object",
        "required": [
          "end_ms",
          "start_ms"
        ],
        "properties": {
          "end_ms": {
            "description": "End timestamp in UTC milliseconds.",
            "type": "integer",
            "format": "int64"
          },
          "referral_code": {
            "description": "(Optional) referral code.",
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "start_ms": {
            "description": "Start timestamp in UTC milliseconds.",
            "type": "integer",
            "format": "int64"
          },
          "wallet": {
            "description": "(Optional) wallet of the referrer.",
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetReferralPerformanceResult": {
        "type": "object",
        "required": [
          "fee_share_percentage",
          "referral_code",
          "rewards",
          "stdrv_balance",
          "total_builder_fee_collected",
          "total_fee_rewards",
          "total_notional_volume",
          "total_referred_fees"
        ],
        "properties": {
          "fee_share_percentage": {
            "type": "string"
          },
          "referral_code": {
            "type": "string"
          },
          "rewards": {
            "description": "Performance by liquidity role / currency / instrument type.",
            "type": "object",
            "additionalProperties": {
              "type": "object",
              "additionalProperties": {
                "type": "object",
                "additionalProperties": {
                  "$ref": "#/components/schemas/ReferralPerformanceByInstrumentType"
                }
              }
            }
          },
          "stdrv_balance": {
            "type": "string"
          },
          "total_builder_fee_collected": {
            "type": "string"
          },
          "total_fee_rewards": {
            "type": "string"
          },
          "total_notional_volume": {
            "type": "string"
          },
          "total_referred_fees": {
            "type": "string"
          }
        }
      },
      "GetRfqsRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "from_timestamp": {
            "default": 0,
            "type": "integer",
            "format": "int64"
          },
          "page": {
            "default": 1,
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "page_size": {
            "default": 20,
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "rfq_id": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "to_timestamp": {
            "default": 9223372036854775807,
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "GetShareholderVaultsRequest": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "wallet": {
            "description": "The shareholder wallet (0x hex).",
            "type": "string"
          }
        }
      },
      "GetSubaccountRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetSubaccountValueHistoryRequest": {
        "description": "`wallet`, when set, takes precedence over `subaccount_id`. The window is unix milliseconds; `period` is seconds and must be one the sampler's tables cover.",
        "type": "object",
        "properties": {
          "end_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "page": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "page_size": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "period": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "start_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "wallet": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetSubaccountsRequest": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "wallet": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "GetTickerRequest": {
        "type": "object",
        "required": [
          "instrument_name"
        ],
        "properties": {
          "instrument_name": {
            "type": "string"
          }
        }
      },
      "GetTickersRequest": {
        "description": "Parameters for `public/get_tickers`. `expiry_date` accepts either a JSON number or a string-encoded 8-digit date (e.g. `20260511`).",
        "type": "object",
        "required": [
          "instrument_type"
        ],
        "properties": {
          "currency": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "expiry_date": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "instrument_type": {
            "$ref": "#/components/schemas/AssetType"
          }
        }
      },
      "GetTickersResponse": {
        "description": "A map of instrument name to ticker: `{\"tickers\": {<instrument_name>: <ticker_data>}}`. Each ticker value matches the payload of a `ticker_slim.{instrument_name}.{interval}` subscription update.",
        "type": "object",
        "required": [
          "tickers"
        ],
        "properties": {
          "tickers": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/TickerSlimSnapshot"
            }
          }
        }
      },
      "GetTradeHistoryRequest": {
        "type": "object",
        "properties": {
          "from_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "instrument_name": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "order_id": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "page": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "page_size": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "quote_id": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "to_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "wallet": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetTradingviewChartDataRequest": {
        "description": "Parameters for `public/get_tradingview_chart_data`. Numeric fields accept either a JSON number or a string-encoded integer. Timestamps are UTC seconds.",
        "type": "object",
        "required": [
          "end_timestamp",
          "instrument_name",
          "period",
          "start_timestamp"
        ],
        "properties": {
          "end_timestamp": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "instrument_name": {
            "type": "string"
          },
          "period": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "start_timestamp": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetTransactionParams": {
        "type": "object",
        "required": [
          "op_uuid"
        ],
        "properties": {
          "op_uuid": {
            "type": "string"
          }
        }
      },
      "GetTransactionResult": {
        "description": "`status` is the operation's batch status; `null` until the operation has been picked up for settlement.",
        "type": "object",
        "required": [
          "data"
        ],
        "properties": {
          "data": {
            "type": "string"
          },
          "error_log": {
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/BatchStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "transaction_hash": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "GetTriggerOrdersRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "GetVaultActionHistoryRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "event_type": {
            "description": "Optional: \"vault_deposit\" | \"vault_withdraw\" | \"vault_fee_accrual\".",
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "page": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "page_size": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetVaultPerformanceHistoryRequest": {
        "type": "object",
        "required": [
          "resolution",
          "subaccount_id"
        ],
        "properties": {
          "from": {
            "description": "Optional inclusive lower bound (unix seconds).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "limit": {
            "description": "Max points to return, newest first (default 1000, capped at 10000).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "resolution": {
            "$ref": "#/components/schemas/PerformanceResolution"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "to": {
            "description": "Optional exclusive upper bound (unix seconds).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          }
        }
      },
      "GetVaultRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "GetVaultRequestHistoryRequest": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "page": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "page_size": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "wallet": {
            "description": "The shareholder wallet (0x hex).",
            "type": "string"
          }
        }
      },
      "GetVaultSharesRequest": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "wallet": {
            "description": "The shareholder wallet (0x hex).",
            "type": "string"
          }
        }
      },
      "GetVaultsRequest": {
        "type": "object",
        "properties": {
          "page": {
            "default": 1,
            "type": "integer",
            "format": "uint",
            "minimum": 0.0
          },
          "page_size": {
            "default": 100,
            "type": "integer",
            "format": "uint",
            "minimum": 0.0
          }
        }
      },
      "GetWalletsFromSessionKeyRequest": {
        "type": "object",
        "required": [
          "public_session_key"
        ],
        "properties": {
          "public_session_key": {
            "type": "string"
          },
          "scope": {
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/OffchainKeyScope"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "GetWithdrawAddressesParams": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "wallet": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "GetWithdrawAddressesResult": {
        "type": "object",
        "required": [
          "withdraw_addresses"
        ],
        "properties": {
          "withdraw_addresses": {
            "description": "The account's EVM withdraw addresses (their recipient is the wallet) and every withdraw address on its `whitelisted_recipients`, oldest first.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WithdrawAddressEntry"
            }
          }
        }
      },
      "GetWithdrawalHistoryRequest": {
        "description": "Parameters for `private/get_withdrawal_history`. Matches `get_deposit_history`: `subaccount_id` plus an optional `[start_timestamp, end_timestamp]` window in unix milliseconds. `wallet`, when set, takes precedence over `subaccount_id` and returns the whole wallet's withdrawals. Results are capped at 1000 rows.",
        "type": "object",
        "properties": {
          "end_timestamp": {
            "description": "End of the window, unix milliseconds (default: unbounded / now).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "start_timestamp": {
            "description": "Start of the window, unix milliseconds (default 0).",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "wallet": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "IncidentResponse": {
        "type": "object",
        "required": [
          "creation_timestamp_sec",
          "label",
          "message",
          "monitor_type",
          "severity"
        ],
        "properties": {
          "creation_timestamp_sec": {
            "description": "Timestamp of incident in UTC sec",
            "type": "integer",
            "format": "int64"
          },
          "label": {
            "description": "Incident label",
            "type": "string"
          },
          "message": {
            "description": "Incident message",
            "type": "string"
          },
          "monitor_type": {
            "description": "Incident trigger type",
            "$ref": "#/components/schemas/MonitorType"
          },
          "severity": {
            "description": "Incident severity",
            "$ref": "#/components/schemas/Severity"
          }
        }
      },
      "IndexCandle": {
        "description": "Single spot OHLC candle in `public/get_index_chart_data`. `price` mirrors the close; `timestamp` and `timestamp_bucket` are the bucket start in UTC seconds.",
        "type": "object",
        "required": [
          "close_price",
          "high_price",
          "low_price",
          "open_price",
          "price",
          "timestamp",
          "timestamp_bucket"
        ],
        "properties": {
          "close_price": {
            "type": "string"
          },
          "high_price": {
            "type": "string"
          },
          "low_price": {
            "type": "string"
          },
          "open_price": {
            "type": "string"
          },
          "price": {
            "type": "string"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "timestamp_bucket": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Instrument": {
        "type": "object",
        "required": [
          "amount_step",
          "base_asset_address",
          "base_asset_sub_id",
          "base_currency",
          "base_fee",
          "fifo_min_allocation",
          "instrument_name",
          "instrument_type",
          "is_active",
          "maker_fee_rate",
          "maximum_amount",
          "minimum_amount",
          "pro_rata_amount_step",
          "pro_rata_fraction",
          "quote_currency",
          "scheduled_activation",
          "scheduled_deactivation",
          "taker_fee_rate",
          "tick_size"
        ],
        "properties": {
          "amount_step": {
            "type": "string"
          },
          "base_asset_address": {
            "description": "The traded asset's contract address — word 0 (`asset`) of the order action `data`. Use this (not `erc20_details`) when signing an order.",
            "type": "string"
          },
          "base_asset_sub_id": {
            "description": "The traded asset's sub-id — word 1 (`subId`) of the order action `data`. Decimal string; `\"0\"` for perps and spot.",
            "type": "string"
          },
          "base_currency": {
            "type": "string"
          },
          "base_fee": {
            "type": "string"
          },
          "erc20_details": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/SpotPublicDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "fifo_min_allocation": {
            "type": "string"
          },
          "instrument_name": {
            "type": "string"
          },
          "instrument_type": {
            "$ref": "#/components/schemas/AssetType"
          },
          "is_active": {
            "type": "boolean"
          },
          "maker_fee_rate": {
            "type": "string"
          },
          "mark_price_fee_rate_cap": {
            "type": [
              "string",
              "null"
            ]
          },
          "maximum_amount": {
            "type": "string"
          },
          "minimum_amount": {
            "type": "string"
          },
          "option_details": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/OptionDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "perp_details": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PerpDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "pro_rata_amount_step": {
            "type": "string"
          },
          "pro_rata_fraction": {
            "type": "string"
          },
          "quote_currency": {
            "type": "string"
          },
          "scheduled_activation": {
            "type": "integer",
            "format": "int64"
          },
          "scheduled_deactivation": {
            "type": "integer",
            "format": "int64"
          },
          "taker_fee_rate": {
            "type": "string"
          },
          "tick_size": {
            "type": "string"
          }
        }
      },
      "InterestHistoryResult": {
        "type": "object",
        "required": [
          "events"
        ],
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InterestPayment"
            }
          }
        }
      },
      "InterestPayment": {
        "description": "One realized interest settlement. `interest` is a decimal string; negative = paid, positive = received. `timestamp` is unix ms.",
        "type": "object",
        "required": [
          "interest",
          "subaccount_id",
          "timestamp"
        ],
        "properties": {
          "interest": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "InterestRateCandle": {
        "description": "One interest-rate candle: OHLC of the annualized borrow and supply APY plus the pool totals at the bucket close. `timestamp` is the bucket start in UTC milliseconds.",
        "type": "object",
        "required": [
          "borrow_apy",
          "risk_universe_id",
          "supply_apy",
          "timestamp",
          "total_borrow",
          "total_supply"
        ],
        "properties": {
          "borrow_apy": {
            "$ref": "#/components/schemas/Ohlc"
          },
          "risk_universe_id": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "supply_apy": {
            "$ref": "#/components/schemas/Ohlc"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "total_borrow": {
            "type": "string"
          },
          "total_supply": {
            "type": "string"
          }
        }
      },
      "InterestRateHistoryResult": {
        "description": "Response shape for `public/get_interest_rate_history`.",
        "type": "object",
        "required": [
          "interest_rate_history"
        ],
        "properties": {
          "interest_rate_history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/InterestRateCandle"
            }
          }
        }
      },
      "LegUnpricedParams": {
        "type": "object",
        "required": [
          "amount",
          "direction",
          "instrument_name"
        ],
        "properties": {
          "amount": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "instrument_name": {
            "type": "string"
          }
        }
      },
      "LendingDetails": {
        "description": "Lending pool stats for a `(spot_asset, universe)` pair. The pool's total supply is reported in the `current_open_interest` field.",
        "type": "object",
        "required": [
          "borrow_apy",
          "supply_apy",
          "total_borrow",
          "total_borrow_cap"
        ],
        "properties": {
          "borrow_apy": {
            "type": "string"
          },
          "supply_apy": {
            "type": "string"
          },
          "total_borrow": {
            "type": "string"
          },
          "total_borrow_cap": {
            "description": "Borrow ceiling for this lending asset in this universe.",
            "type": "string"
          }
        }
      },
      "LiquidationHistoryResult": {
        "type": "object",
        "required": [
          "auctions",
          "pagination"
        ],
        "properties": {
          "auctions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/AuctionHistory"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "LiquidityRole": {
        "type": "string",
        "enum": [
          "maker",
          "taker"
        ]
      },
      "LiveAuction": {
        "description": "One ongoing auction, priced for a maximal bid at `timestamp`. The price decays with wall-clock and moves with the account's mark-to-market, so a quote is only good for the instant it was taken.",
        "type": "object",
        "required": [
          "estimated_bid_price",
          "estimated_discount_pnl",
          "estimated_mtm",
          "estimated_percent_bid",
          "margin_type",
          "min_price_limit",
          "risk_universe_id",
          "subaccount_balances",
          "subaccount_id",
          "timestamp"
        ],
        "properties": {
          "currency": {
            "description": "Only set when the auctioned account is not on standard margin.",
            "type": [
              "string",
              "null"
            ]
          },
          "estimated_bid_price": {
            "description": "Discounted mark value of the whole account, not scaled by the bid percent. Negative for an insolvent auction, where the bidder is paid.",
            "type": "string"
          },
          "estimated_discount_pnl": {
            "description": "Profit relative to `estimated_mtm` if the bid fills at `estimated_percent_bid` and `estimated_bid_price`.",
            "type": "string"
          },
          "estimated_mtm": {
            "description": "Undiscounted mark value of the whole account, net of cash already paid in by earlier bidders.",
            "type": "string"
          },
          "estimated_percent_bid": {
            "description": "The largest fraction of the account a bid can take right now.",
            "type": "string"
          },
          "margin_type": {
            "description": "Bid from an account on the same margin type to avoid unsupported-currency and max-account-size errors.",
            "type": "string"
          },
          "min_price_limit": {
            "description": "Cash required to buy `estimated_percent_bid` of the account — the `price_limit` to pass to `private/liquidate`. Scale it down in proportion if bidding less.",
            "type": "string"
          },
          "risk_universe_id": {
            "description": "Risk universe of the auctioned account. A bid from a subaccount in any other universe is rejected.",
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "subaccount_balances": {
            "description": "Balance per asset name. A bid acquires `estimated_percent_bid` of each.",
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "timestamp": {
            "description": "Milliseconds since epoch at which this quote was priced.",
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "ManagerCollateral": {
        "description": "A spot asset the manager accepts as collateral, with deposit metadata and the manager's margin discounts for it (\"1\" = full credit, cash).",
        "type": "object",
        "required": [
          "address",
          "erc20",
          "im_discount",
          "min_deposit_usd",
          "mm_discount",
          "name"
        ],
        "properties": {
          "address": {
            "description": "EIP-55 checksummed protocol asset address — the `asset` argument when depositing.",
            "type": "string"
          },
          "erc20": {
            "$ref": "#/components/schemas/Erc20Details"
          },
          "im_discount": {
            "description": "Initial-margin credit for the asset under this manager.",
            "type": "string"
          },
          "min_deposit_usd": {
            "type": "string"
          },
          "mm_discount": {
            "description": "Maintenance-margin credit for the asset under this manager.",
            "type": "string"
          },
          "name": {
            "description": "Registered asset name (e.g. \"USDC\").",
            "type": "string"
          }
        }
      },
      "MarginType": {
        "description": "Margin model applied by a manager: `SM` (standard, cross-collateral) or `PM2` (portfolio, scenario-based netting).",
        "type": "string",
        "enum": [
          "SM",
          "PM2"
        ]
      },
      "MarginWatchRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        },
        "additionalProperties": false
      },
      "MarketType": {
        "type": "string",
        "enum": [
          "ALL",
          "SRM_BASE_ONLY",
          "SRM_OPTION_ONLY",
          "SRM_PERP_ONLY",
          "CASH"
        ]
      },
      "MintSharesRequest": {
        "description": "Fields common to every signed vault action. They appear alongside each endpoint's action-specific parameters in the same request object.",
        "type": "object",
        "required": [
          "deposit_hash",
          "nonce",
          "request_id",
          "share_price",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "deposit_hash": {
            "description": "0x-prefixed hex of the 32-byte user deposit-action hash.",
            "type": "string"
          },
          "nonce": {
            "type": "string"
          },
          "request_id": {
            "$ref": "#/components/schemas/VaultRequestId"
          },
          "share_price": {
            "description": "Quoted share price in USD per share, as a decimal string (e.g. `\"1.02\"`).",
            "type": "string",
            "format": "decimal"
          },
          "signature": {
            "description": "0x-prefixed hex of the 65-byte EOA signature.",
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "description": "The subaccount the action is signed on; which subaccount applies depends on the specific method — see that method's reference.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "MmpConfigResult": {
        "type": "object",
        "required": [
          "currency",
          "is_frozen",
          "mmp_amount_limit",
          "mmp_delta_limit",
          "mmp_frozen_time",
          "mmp_interval",
          "mmp_unfreeze_time",
          "subaccount_id"
        ],
        "properties": {
          "currency": {
            "type": "string"
          },
          "is_frozen": {
            "type": "boolean"
          },
          "mmp_amount_limit": {
            "type": "string"
          },
          "mmp_delta_limit": {
            "type": "string"
          },
          "mmp_frozen_time": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "mmp_interval": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "mmp_unfreeze_time": {
            "type": "integer",
            "format": "int64"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "MmpScopeRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "currency": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "MonitorType": {
        "type": "string",
        "enum": [
          "manual",
          "auto"
        ]
      },
      "MultipleVaultRequestsResponse": {
        "description": "Returned by `get_live_mint_requests` / `get_live_burn_requests`: a FIFO page plus the queue's total live length (so the caller can paginate).",
        "type": "object",
        "required": [
          "requests",
          "total"
        ],
        "properties": {
          "requests": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VaultRequestResponse"
            }
          },
          "total": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "OffchainAckResponse": {
        "description": "A generic `{ \"status\": \"ok\" }` acknowledgement returned by fire-and-forget operations that have no data to return (e.g. updating account settings, MMP config, or the active currency).",
        "type": "object",
        "required": [
          "status"
        ],
        "properties": {
          "status": {
            "type": "string"
          }
        }
      },
      "OffchainKeyScope": {
        "description": "Additional permission scopes enforced off-chain (not part of the on-chain session-key scopes).",
        "type": "string",
        "enum": [
          "account_info"
        ]
      },
      "Ohlc": {
        "description": "Open, high, low, and close for one series, each a decimal string.",
        "type": "object",
        "required": [
          "close",
          "high",
          "low",
          "open"
        ],
        "properties": {
          "close": {
            "type": "string"
          },
          "high": {
            "type": "string"
          },
          "low": {
            "type": "string"
          },
          "open": {
            "type": "string"
          }
        }
      },
      "OnchainActionHistoryEntry": {
        "type": "object",
        "required": [
          "acc",
          "action_id",
          "action_type",
          "action_type_label",
          "block_number",
          "data",
          "l1_sender",
          "queue",
          "status",
          "updated_at"
        ],
        "properties": {
          "acc": {
            "description": "Rolling accumulator from the ActionQueued event, 0x-hex.",
            "type": "string"
          },
          "action_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "action_type": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "action_type_label": {
            "type": "string"
          },
          "block_number": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "data": {
            "description": "Raw action calldata, 0x-hex.",
            "type": "string"
          },
          "error_code": {
            "description": "Most recent submit rejection; null if the action never failed. Kept on applied/fallback rows as the reason the action struggled.",
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "error_data": {
            "description": "The rejection's specifics, e.g. the wallet and cap it hit. Null for an internal error, whose text stays internal as on every other endpoint.",
            "type": [
              "string",
              "null"
            ]
          },
          "error_message": {
            "type": [
              "string",
              "null"
            ]
          },
          "fallback_at": {
            "description": "Unix ms the action was escalated with `fallback=true`; null if never escalated.",
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "first_failed_at": {
            "description": "Unix ms of the first failed submit; null if the action never failed.",
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "l1_sender": {
            "type": "string"
          },
          "last_failed_at": {
            "description": "Unix ms of the most recent failed submit; null if never failed.",
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "op_uuid": {
            "description": "Operation uuid assigned by the sequencer; null until applied.",
            "type": [
              "string",
              "null"
            ]
          },
          "queue": {
            "description": "Onchain queue: 'public' or 'admin'.",
            "type": "string"
          },
          "skip_reason": {
            "description": "The rendered rejection behind `skip_reason_code`, e.g. the risk-gate error or the owning wallet on 'sender_not_owner'.",
            "type": [
              "string",
              "null"
            ]
          },
          "skip_reason_code": {
            "description": "Why the protocol consumed an L1 escape-hatch withdrawal without moving funds: 'undecodable_payload' | 'unknown_subaccount' | 'sender_not_owner' | 'rejected'. Null for every other action, and for a withdrawal that paid out.\n\nDistinct from `error_code`/`error_message`, which are the listener's *submit* rejections. A skip is a successful submit — `status` stays 'applied' — that the protocol then declined to execute; the action is spent and is never retried.",
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "description": "Sequencer applied states: 'applied' | 'applied_with_fallback' Failed States: 'instant_fallback' | 'retry_then_fallback' | 'never_escalate'",
            "type": "string"
          },
          "tx_hash": {
            "type": [
              "string",
              "null"
            ]
          },
          "updated_at": {
            "description": "Unix ms of the latest state change.",
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "OpenInterestStats": {
        "type": "object",
        "required": [
          "current_open_interest",
          "interest_cap"
        ],
        "properties": {
          "current_open_interest": {
            "type": "string"
          },
          "interest_cap": {
            "type": "string"
          }
        }
      },
      "OperationAckResponse": {
        "description": "Postcard-friendly mirror of `sequencer_runtime::types::OperationResult`.\n\nWe can't use `OperationResult` directly for two reasons: - it only derives `Serialize` (no `Deserialize` or `JsonSchema`), and - it has a `BalanceSnapshot` field marked `#[serde(skip)]` that we don't want crossing the wire.\n\nThis mirror carries just the fields that actually cross the wire and adds the derives the gateway needs.",
        "type": "object",
        "required": [
          "mmp_triggered",
          "op_uuid",
          "operation_id"
        ],
        "properties": {
          "mmp_triggered": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint64",
              "minimum": 0.0
            }
          },
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "OptionDetails": {
        "type": "object",
        "required": [
          "expiry",
          "index",
          "option_type",
          "strike"
        ],
        "properties": {
          "expiry": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "index": {
            "type": "string"
          },
          "option_type": {
            "type": "string"
          },
          "settlement_price": {
            "type": [
              "string",
              "null"
            ]
          },
          "strike": {
            "type": "string"
          }
        }
      },
      "OptionPricing": {
        "type": "object",
        "required": [
          "ai",
          "bi",
          "d",
          "df",
          "f",
          "g",
          "i",
          "m",
          "r",
          "t",
          "v"
        ],
        "properties": {
          "ai": {
            "description": "Implied volatility of the current best ask.",
            "type": "string"
          },
          "bi": {
            "description": "Implied volatility of the current best bid.",
            "type": "string"
          },
          "d": {
            "description": "Delta of the option.",
            "type": "string"
          },
          "df": {
            "description": "Discount factor used to calculate the option premium.",
            "type": "string"
          },
          "f": {
            "description": "Forward price used to calculate the option premium.",
            "type": "string"
          },
          "g": {
            "description": "Gamma of the option.",
            "type": "string"
          },
          "i": {
            "description": "Implied volatility of the option.",
            "type": "string"
          },
          "m": {
            "description": "Mark price of the option.",
            "type": "string"
          },
          "r": {
            "description": "Rho of the option.",
            "type": "string"
          },
          "t": {
            "description": "Theta of the option.",
            "type": "string"
          },
          "v": {
            "description": "Vega of the option.",
            "type": "string"
          }
        }
      },
      "OptionSettlementHistoryResponse": {
        "type": "object",
        "required": [
          "settlements"
        ],
        "properties": {
          "settlements": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/OptionSettlementResponse"
            }
          }
        }
      },
      "OptionSettlementPricesResult": {
        "type": "object",
        "required": [
          "expiries"
        ],
        "properties": {
          "expiries": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ExpirySettlementPrice"
            }
          }
        }
      },
      "OptionSettlementResponse": {
        "description": "One settled option position.",
        "type": "object",
        "required": [
          "amount",
          "expiry",
          "instrument_name",
          "option_settlement_pnl",
          "option_settlement_pnl_excl_fees",
          "settlement_price",
          "settlement_value",
          "subaccount_id"
        ],
        "properties": {
          "amount": {
            "description": "Settled balance (negative = short, positive = long).",
            "type": "string",
            "format": "decimal"
          },
          "expiry": {
            "description": "Expiry of the option, unix seconds.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "instrument_name": {
            "type": "string"
          },
          "option_settlement_pnl": {
            "description": "USD profit or loss from the settlement: settlement value minus the position's average cost including fees times amount. `null` when no closing balance row exists for the settlement (settled before balance history was recorded).",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "option_settlement_pnl_excl_fees": {
            "description": "Same as `option_settlement_pnl` but against the average price excluding fees.",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "settlement_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "settlement_value": {
            "description": "Crystallized cash value = intrinsic value * amount.",
            "type": "string",
            "format": "decimal"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "OracleSignatureDataResponse": {
        "type": "object",
        "required": [
          "signatures",
          "signers"
        ],
        "properties": {
          "signatures": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "signers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Address"
            }
          }
        }
      },
      "Order": {
        "type": "object",
        "required": [
          "amount",
          "average_price",
          "creation_timestamp",
          "direction",
          "extra_fee",
          "filled_amount",
          "instrument_name",
          "is_transfer",
          "last_update_timestamp",
          "limit_price",
          "max_fee",
          "mmp",
          "nonce",
          "order_fee",
          "order_id",
          "order_status",
          "order_type",
          "quote_id",
          "replaced_order_id",
          "signature",
          "signature_expiry_sec",
          "signed_limit_price",
          "signer",
          "subaccount_id",
          "time_in_force",
          "trigger_price"
        ],
        "properties": {
          "algo_duration_sec": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "algo_num_slices": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "algo_slices_completed": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "algo_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/AlgoType"
              },
              {
                "type": "null"
              }
            ]
          },
          "amount": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "average_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "cancel_reason": {
            "default": "",
            "$ref": "#/components/schemas/CancelReason"
          },
          "creation_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "extra_fee": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "filled_amount": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "instrument_name": {
            "type": "string"
          },
          "is_transfer": {
            "type": "boolean"
          },
          "label": {
            "default": "",
            "type": "string"
          },
          "last_update_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "limit_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "max_fee": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "mmp": {
            "type": "boolean"
          },
          "nonce": {
            "type": "string"
          },
          "order_fee": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "order_id": {
            "type": "string"
          },
          "order_status": {
            "$ref": "#/components/schemas/OrderStatus"
          },
          "order_type": {
            "$ref": "#/components/schemas/OrderType"
          },
          "quote_id": {
            "description": "Optional UUID v4 string",
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "replaced_order_id": {
            "description": "Optional UUID v4 string",
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "int64"
          },
          "signed_limit_price": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "time_in_force": {
            "$ref": "#/components/schemas/TimeInForce"
          },
          "trigger_price": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "trigger_price_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TriggerPriceType"
              },
              {
                "type": "null"
              }
            ]
          },
          "trigger_reject_message": {
            "type": [
              "string",
              "null"
            ]
          },
          "trigger_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TriggerType"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "OrderActionDataResponse": {
        "type": "object",
        "required": [
          "asset_address",
          "asset_sub_id",
          "desired_amount",
          "is_bid",
          "limit_price",
          "recipient_id",
          "worst_fee"
        ],
        "properties": {
          "asset_address": {
            "type": "string"
          },
          "asset_sub_id": {
            "type": "string"
          },
          "desired_amount": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "is_bid": {
            "type": "boolean"
          },
          "limit_price": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "recipient_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "worst_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          }
        }
      },
      "OrderActionInputData": {
        "description": "The `Action` envelope a debug route rebuilt from the request inputs, plus its decoded action data — i.e. what the signature commits to.",
        "type": "object",
        "required": [
          "data",
          "expiry",
          "module",
          "nonce",
          "owner",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/OrderActionDataResponse"
          },
          "expiry": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "module": {
            "type": "string"
          },
          "nonce": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "OrderCreatedResponse": {
        "type": "object",
        "required": [
          "order",
          "trades"
        ],
        "properties": {
          "order": {
            "$ref": "#/components/schemas/Order"
          },
          "trades": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Trade"
            }
          }
        }
      },
      "OrderDebugResponse": {
        "description": "Debug-route payload for one rebuilt action: the EIP-712 hashes plus the action input fields.",
        "type": "object",
        "required": [
          "action_hash",
          "action_typehash",
          "domain_separator",
          "encoded_data",
          "encoded_data_hashed",
          "expected_signer",
          "input_data",
          "module",
          "owner",
          "typed_data_hash"
        ],
        "properties": {
          "action_hash": {
            "description": "EIP-712 struct hash of the `Action`: `keccak256(abi.encode(action_typehash, …, encoded_data_hashed, …))`.",
            "type": "string"
          },
          "action_typehash": {
            "description": "`ACTION_TYPEHASH` — keccak of the `Action` struct type string; invariant across deployments.",
            "type": "string"
          },
          "domain_separator": {
            "description": "EIP-712 domain separator of the Matching contract for this deployment.",
            "type": "string"
          },
          "encoded_data": {
            "description": "ABI-encoded, module-specific action payload (the `data` bytes), 0x-hex.",
            "type": "string"
          },
          "encoded_data_hashed": {
            "description": "`keccak256(encoded_data)` — the value packed into the struct hash.",
            "type": "string"
          },
          "expected_signer": {
            "description": "The signer the signature is checked against.",
            "type": "string"
          },
          "input_data": {
            "description": "The rebuilt `Action` envelope and its decoded module-specific `data`.",
            "$ref": "#/components/schemas/OrderActionInputData"
          },
          "module": {
            "description": "Per-action module contract address bound into the signed struct.",
            "type": "string"
          },
          "owner": {
            "description": "Wallet that owns the subaccount the action applies to.",
            "type": "string"
          },
          "recovered_signer": {
            "description": "null on the debug routes (no signature is checked there); on a signature-mismatch error this is the address actually recovered.",
            "type": [
              "string",
              "null"
            ]
          },
          "typed_data_hash": {
            "description": "Final EIP-712 digest the client signs: `keccak256(0x1901 || domain_separator || action_hash)`.",
            "type": "string"
          }
        }
      },
      "OrderQuoteRequest": {
        "description": "Parameters for `public/order_quote` and `private/order_quote`.",
        "type": "object",
        "required": [
          "amount",
          "direction",
          "instrument_name",
          "limit_price",
          "max_fee",
          "nonce",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "amount": {
            "description": "Order amount in units of the base, as a decimal string (e.g. `\"1.5\"`) or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "client": {
            "default": "",
            "type": "string"
          },
          "direction": {
            "description": "Order direction",
            "$ref": "#/components/schemas/Direction"
          },
          "extra_fee": {
            "description": "Optional extra fee per unit of volume, as a decimal string or JSON number. Defaults to zero.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "instrument_name": {
            "description": "Instrument name",
            "type": "string"
          },
          "is_atomic_signing": {
            "default": false,
            "type": "boolean"
          },
          "label": {
            "default": "",
            "type": "string"
          },
          "limit_price": {
            "description": "Limit price in quote currency, as a decimal string or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "max_fee": {
            "description": "Max fee per unit of volume in quote currency, as a decimal string or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "mmp": {
            "default": false,
            "type": "boolean"
          },
          "nonce": {
            "description": "Nonce.",
            "type": "string"
          },
          "order_type": {
            "default": "limit",
            "$ref": "#/components/schemas/OrderType"
          },
          "reduce_only": {
            "default": false,
            "type": "boolean"
          },
          "referral_code": {
            "default": "",
            "type": "string"
          },
          "reject_post_only": {
            "default": true,
            "type": "boolean"
          },
          "reject_timestamp": {
            "default": 9223372036854775807,
            "type": "integer",
            "format": "int64"
          },
          "signature": {
            "description": "Ethereum signature of the order.",
            "type": "string"
          },
          "signature_expiry_sec": {
            "description": "Signature expiry (unix seconds).",
            "type": "integer",
            "format": "int64"
          },
          "signer": {
            "description": "Owner wallet or session key that signed the order.",
            "type": "string"
          },
          "subaccount_id": {
            "description": "Subaccount ID",
            "type": "integer",
            "format": "int64"
          },
          "time_in_force": {
            "default": "gtc",
            "$ref": "#/components/schemas/TimeInForce"
          },
          "trigger_price": {
            "description": "Trigger price as a decimal string or JSON number; omit for non-trigger orders.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "trigger_price_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TriggerPriceType"
              },
              {
                "type": "null"
              }
            ]
          },
          "trigger_type": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/TriggerType"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "OrderQuoteResponse": {
        "description": "Estimated fill price, fees, and resulting margin for a proposed order — a non-binding dry-run. All price, fee, and margin fields are decimal strings.",
        "type": "object",
        "required": [
          "estimated_fee",
          "estimated_fill_amount",
          "estimated_fill_price",
          "estimated_order_status",
          "estimated_realized_pnl",
          "estimated_realized_pnl_excl_fees",
          "is_valid",
          "post_initial_margin",
          "pre_initial_margin",
          "suggested_max_fee"
        ],
        "properties": {
          "estimated_fee": {
            "type": "string"
          },
          "estimated_fill_amount": {
            "type": "string"
          },
          "estimated_fill_price": {
            "type": "string"
          },
          "estimated_order_status": {
            "$ref": "#/components/schemas/OrderStatus"
          },
          "estimated_realized_pnl": {
            "type": "string"
          },
          "estimated_realized_pnl_excl_fees": {
            "type": "string"
          },
          "invalid_reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "is_valid": {
            "type": "boolean"
          },
          "max_amount": {
            "type": [
              "string",
              "null"
            ]
          },
          "post_initial_margin": {
            "type": "string"
          },
          "post_liquidation_price": {
            "type": [
              "string",
              "null"
            ]
          },
          "pre_initial_margin": {
            "type": "string"
          },
          "suggested_max_fee": {
            "type": "string"
          }
        }
      },
      "OrderStatus": {
        "type": "string",
        "enum": [
          "open",
          "filled",
          "rejected",
          "cancelled",
          "expired",
          "untriggered",
          "algo_active"
        ]
      },
      "OrderType": {
        "type": "string",
        "enum": [
          "limit",
          "market"
        ]
      },
      "PaginatedOrdersResult": {
        "type": "object",
        "required": [
          "orders",
          "pagination",
          "subaccount_id"
        ],
        "properties": {
          "orders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Order"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "PaginatedTradesResult": {
        "type": "object",
        "required": [
          "pagination",
          "subaccount_id",
          "trades"
        ],
        "properties": {
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "trades": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TradeHistoryResponse"
            }
          }
        }
      },
      "PaginatedVaultActionHistory": {
        "type": "object",
        "required": [
          "events",
          "pagination",
          "subaccount_id"
        ],
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicVaultActionResponse"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PaginatedVaultRequestHistory": {
        "type": "object",
        "required": [
          "actions",
          "pagination",
          "wallet"
        ],
        "properties": {
          "actions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VaultActionResponse"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "Pagination": {
        "description": "Response envelope for paginated RPCs.",
        "type": "object",
        "required": [
          "count",
          "num_pages"
        ],
        "properties": {
          "count": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "num_pages": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PendingDepositBridgeOrigin": {
        "description": "Where a deposit came from. Named apart from `DepositBridgeOrigin` because schemars shares one namespace and would emit an order-dependent `BridgeOrigin2`.",
        "type": "object",
        "required": [
          "bridge_id",
          "bridge_status",
          "deposit_address",
          "expected_amount",
          "expires_at_ms",
          "rail",
          "source_chain_id",
          "source_tx_hash",
          "substatus",
          "token"
        ],
        "properties": {
          "bridge_id": {
            "description": "Unique with `rail`; changes if a registered source tx is replaced, so key on `provider_transfer_id` when present.",
            "type": "string"
          },
          "bridge_status": {
            "description": "`registered` (reported by the client, not yet confirmed by Li.Fi) `submitted` (in flight) `delivered` (landed on the destination chain) `matched` (joined to the L1 deposit) `failed` (the bridge refunded or could not fill — nothing reached the escrow) `expired` (unresolved past `expires_at_ms`; check the source chain) `unmatched` (delivered, but not credited within 24h; contact support)",
            "type": "string"
          },
          "delivered_at_ms": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "deposit_address": {
            "description": "The escrow the bridge delivers to.",
            "type": "string"
          },
          "expected_amount": {
            "description": "Quoted amount expected to land, in `token` units (estimated until quoted); `receiving_amount` once delivered.",
            "type": "string"
          },
          "expires_at_ms": {
            "description": "When a still-`registered` or `submitted` bridge will be marked `expired`.",
            "type": "integer",
            "format": "int64"
          },
          "provider_transfer_id": {
            "description": "The provider's own id for the bridge (Li.Fi: the quote's `transactionId`), stable through its lifecycle.",
            "type": [
              "string",
              "null"
            ]
          },
          "rail": {
            "description": "Bridge protocol: `lifi` or `layerzero`.",
            "type": "string"
          },
          "receiving_amount": {
            "description": "What actually arrived, native units, as a decimal string.",
            "type": [
              "string",
              "null"
            ]
          },
          "receiving_token": {
            "type": [
              "string",
              "null"
            ]
          },
          "receiving_tx_hash": {
            "description": "The bridge's delivery transaction on the destination chain.",
            "type": [
              "string",
              "null"
            ]
          },
          "source_address": {
            "description": "Their wallet on that chain, lower-cased; absent when the rail gave none.",
            "type": [
              "string",
              "null"
            ]
          },
          "source_chain_id": {
            "description": "Chain the user sent from.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "source_tx_hash": {
            "description": "Their transaction on that chain.",
            "type": "string"
          },
          "substatus": {
            "description": "The rail's detail, or `TOKEN_MISMATCH` when the escrow cannot credit the token.",
            "type": "string"
          },
          "token": {
            "description": "The ERC20 expected to land in the escrow.",
            "type": "string"
          }
        }
      },
      "PendingDepositEntry": {
        "type": "object",
        "required": [
          "action_type",
          "asset",
          "deposit_type",
          "manager_id",
          "status",
          "subaccount_id",
          "timestamp",
          "updated_at_ms"
        ],
        "properties": {
          "action_id": {
            "description": "Per-queue id assigned by the `OnchainActionManager`. Absent while `bridging`.",
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "action_type": {
            "description": "`Deposit` (existing subaccount) or `DepositToNewSubaccount`",
            "type": "string"
          },
          "amount": {
            "description": "Amount in the asset's native ERC-20 units, as a decimal string. While `bridging`, the estimated `bridge_to_l1.expected_amount` until the bridge delivers, then what it delivered.",
            "type": [
              "string",
              "null"
            ]
          },
          "asset": {
            "type": "string"
          },
          "block_number": {
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "bridge_to_l1": {
            "description": "Where a bridged deposit came from; absent for a plain L1 deposit or a bridge sent without Derive's integrator code.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/PendingDepositBridgeOrigin"
              },
              {
                "type": "null"
              }
            ]
          },
          "deposit_type": {
            "description": "`standard` or `direct`.",
            "type": "string"
          },
          "log_index": {
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "manager_id": {
            "description": "Manager of the new subaccount; `0` for existing-subaccount deposits.",
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "status": {
            "description": "`bridging` (a bridge not yet recorded on L1; its detail is `bridge_to_l1.bridge_status`) `detected` (transfer seen at the tip, pre-confirmation) `pending` (escrow swept, awaiting confirmation) `confirmed` (sweep tx past the confirmation range) `reverted` (the sweep reorged out — or uncreditable: no valid destination exists)",
            "type": "string"
          },
          "subaccount_id": {
            "description": "Credited subaccount; `0` for new-subaccount deposits.",
            "type": "integer",
            "format": "int64"
          },
          "timestamp": {
            "description": "Milliseconds when the tracker first picked up the deposit - approximates the block timestamp of `block_number`. Shared by all of a deposit's entries. While `bridging`, the bridge's source transaction time.",
            "type": "integer",
            "format": "int64"
          },
          "tx_hash": {
            "description": "The L1 deposit. Absent while `bridging`: key a bridging entry on `bridge_to_l1` (see `bridge_id`), since it gains `tx_hash`/`log_index` once the sweeper records the deposit.",
            "type": [
              "string",
              "null"
            ]
          },
          "updated_at_ms": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "PerformanceResolution": {
        "description": "Quantization of the hourly samples, requested by the caller.",
        "type": "string",
        "enum": [
          "1h",
          "8h",
          "24h",
          "1wk"
        ]
      },
      "PerpDetails": {
        "type": "object",
        "required": [
          "aggregate_funding",
          "funding_rate",
          "index",
          "max_rate_per_hour",
          "min_rate_per_hour"
        ],
        "properties": {
          "aggregate_funding": {
            "type": "string"
          },
          "funding_rate": {
            "type": "string"
          },
          "index": {
            "type": "string"
          },
          "max_rate_per_hour": {
            "type": "string"
          },
          "min_rate_per_hour": {
            "type": "string"
          },
          "srm_perp_margin_requirements": {
            "description": "Null when no SRM in the instrument's risk universe prices its currency.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/SrmPerpMarginRequirements"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "PerpFeedDataResponse": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "deadline",
          "signatures",
          "spot_diff_value",
          "timestamp",
          "type"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signatures": {
            "$ref": "#/components/schemas/OracleSignatureDataResponse"
          },
          "spot_diff_value": {
            "type": "string"
          },
          "timestamp": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "type": {
            "type": "string"
          }
        }
      },
      "PerpImpactTwapResult": {
        "description": "TWAPs of the perp mid, ask impact and bid impact prices minus spot.",
        "type": "object",
        "required": [
          "ask_impact_diff_twap",
          "bid_impact_diff_twap",
          "currency",
          "mid_price_diff_twap"
        ],
        "properties": {
          "ask_impact_diff_twap": {
            "type": "string"
          },
          "bid_impact_diff_twap": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "mid_price_diff_twap": {
            "type": "string"
          }
        }
      },
      "PerpSettlementEventResponse": {
        "type": "object",
        "required": [
          "batch_status",
          "batch_uuid",
          "funding",
          "instrument_name",
          "pnl",
          "subaccount_id",
          "timestamp"
        ],
        "properties": {
          "batch_status": {
            "$ref": "#/components/schemas/BatchStatus"
          },
          "batch_uuid": {
            "description": "UUID of the settlement batch; a settlement in a reverted or errored batch reflects that status.",
            "type": "string"
          },
          "funding": {
            "type": "string"
          },
          "instrument_name": {
            "type": "string"
          },
          "pnl": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "tx_hash": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "PerpSettlementHistoryResponse": {
        "type": "object",
        "required": [
          "events",
          "pagination"
        ],
        "properties": {
          "events": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PerpSettlementEventResponse"
            }
          },
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          }
        }
      },
      "PollQuotesRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "from_timestamp": {
            "default": 0,
            "type": "integer",
            "format": "int64"
          },
          "page": {
            "default": 1,
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "page_size": {
            "default": 20,
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "quote_id": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "rfq_id": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "status": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "to_timestamp": {
            "default": 9223372036854775807,
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "PollRfqsRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "from_timestamp": {
            "default": 0,
            "type": "integer",
            "format": "int64"
          },
          "page": {
            "default": 1,
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "page_size": {
            "default": 20,
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "rfq_id": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "rfq_subaccount_id": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "status": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "to_timestamp": {
            "default": 9223372036854775807,
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "Position": {
        "type": "object",
        "required": [
          "amount",
          "amount_step",
          "average_price",
          "average_price_excl_fees",
          "creation_timestamp",
          "cumulative_funding",
          "delta",
          "gamma",
          "index_price",
          "initial_margin",
          "instrument_name",
          "instrument_type",
          "maintenance_margin",
          "mark_price",
          "mark_value",
          "net_settlements",
          "open_orders_margin",
          "pending_funding",
          "realized_pnl",
          "realized_pnl_excl_fees",
          "theta",
          "total_fees",
          "unrealized_pnl",
          "unrealized_pnl_excl_fees",
          "vega"
        ],
        "properties": {
          "amount": {
            "type": "string"
          },
          "amount_step": {
            "type": "string"
          },
          "average_price": {
            "type": "string"
          },
          "average_price_excl_fees": {
            "type": "string"
          },
          "creation_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "cumulative_funding": {
            "type": "string"
          },
          "delta": {
            "type": "string"
          },
          "gamma": {
            "type": "string"
          },
          "index_price": {
            "type": "string"
          },
          "initial_margin": {
            "type": "string"
          },
          "instrument_name": {
            "type": "string"
          },
          "instrument_type": {
            "$ref": "#/components/schemas/AssetType"
          },
          "leverage": {
            "type": [
              "string",
              "null"
            ]
          },
          "liquidation_price": {
            "type": [
              "string",
              "null"
            ]
          },
          "maintenance_margin": {
            "type": "string"
          },
          "mark_price": {
            "type": "string"
          },
          "mark_value": {
            "type": "string"
          },
          "net_settlements": {
            "type": "string"
          },
          "open_orders_margin": {
            "type": "string"
          },
          "pending_funding": {
            "type": "string"
          },
          "realized_pnl": {
            "type": "string"
          },
          "realized_pnl_excl_fees": {
            "type": "string"
          },
          "theta": {
            "type": "string"
          },
          "total_fees": {
            "type": "string"
          },
          "unrealized_pnl": {
            "type": "string"
          },
          "unrealized_pnl_excl_fees": {
            "type": "string"
          },
          "vega": {
            "type": "string"
          }
        }
      },
      "PricedLegParamsAndResponse": {
        "type": "object",
        "required": [
          "amount",
          "direction",
          "instrument_name",
          "price"
        ],
        "properties": {
          "amount": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "instrument_name": {
            "type": "string"
          },
          "price": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          }
        }
      },
      "PrivateChangeSubaccountLabelResponse": {
        "type": "object",
        "required": [
          "label",
          "subaccount_id"
        ],
        "properties": {
          "label": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PrivateGetAccountResponse": {
        "type": "object",
        "required": [
          "cancel_on_disconnect",
          "fallback_subaccount_id",
          "fee_info",
          "is_rfq_maker",
          "per_endpoint_tps",
          "subaccount_ids",
          "wallet",
          "websocket_matching_tps",
          "websocket_non_matching_tps",
          "websocket_option_tps",
          "websocket_perp_tps",
          "whitelisted_recipients"
        ],
        "properties": {
          "cancel_on_disconnect": {
            "type": "boolean"
          },
          "creation_timestamp_sec": {
            "type": [
              "integer",
              "null"
            ],
            "format": "uint64",
            "minimum": 0.0
          },
          "fallback_subaccount_id": {
            "description": "Subaccount that receives deposits whose requested destination is unusable — unknown manager id, or the per-wallet subaccount cap already reached. Allocated with the account, and always in the fallback risk universe (id 0).",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "fee_info": {
            "$ref": "#/components/schemas/AccountFeeInfo"
          },
          "is_rfq_maker": {
            "type": "boolean"
          },
          "per_endpoint_tps": {
            "type": "object",
            "additionalProperties": {
              "type": "integer",
              "format": "uint16",
              "minimum": 0.0
            }
          },
          "referral_code": {
            "type": [
              "string",
              "null"
            ]
          },
          "subaccount_ids": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint64",
              "minimum": 0.0
            }
          },
          "wallet": {
            "type": "string"
          },
          "websocket_matching_tps": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0.0
          },
          "websocket_non_matching_tps": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0.0
          },
          "websocket_option_tps": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0.0
          },
          "websocket_perp_tps": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0.0
          },
          "whitelisted_recipients": {
            "description": "Recipients that session keys may withdraw or transfer ERC-20s to. The owner and `Admin`-scoped session keys bypass this list.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PrivateGetCollateralsResponse": {
        "type": "object",
        "required": [
          "collaterals",
          "subaccount_id"
        ],
        "properties": {
          "collaterals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Collateral"
            }
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PrivateGetMarginRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "simulated_collateral_changes": {
            "description": "Optional collateral deltas to simulate deposits / withdrawals / spot trades.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/SimulatedCollateralRequest"
            }
          },
          "simulated_position_changes": {
            "description": "Optional position deltas to simulate perp / option trades.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/SimulatedPositionRequest"
            }
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        },
        "additionalProperties": false
      },
      "PrivateGetPositionsResponse": {
        "type": "object",
        "required": [
          "positions",
          "subaccount_id"
        ],
        "properties": {
          "positions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Position"
            }
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PrivateGetSubaccountsResponse": {
        "type": "object",
        "required": [
          "subaccount_ids",
          "wallet"
        ],
        "properties": {
          "subaccount_ids": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint64",
              "minimum": 0.0
            }
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "PrivateLiquidateRequest": {
        "type": "object",
        "required": [
          "liquidate_subaccount_id",
          "nonce",
          "percent_of_acc",
          "price_limit",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "liquidate_subaccount_id": {
            "description": "Subaccount being liquidated.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "nonce": {
            "type": "string"
          },
          "percent_of_acc": {
            "description": "Fraction of the account to liquidate (`\"1.0\"` = 100%), decimal string or JSON number. Must be a whole percent, i.e. a multiple of `\"0.01\"`.",
            "type": "string",
            "format": "decimal"
          },
          "price_limit": {
            "description": "Max total cash paid for the filled portion; negative is a minimum payout in insolvent auctions. `\"0\"` opts out. Decimal string or JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "description": "Bidder subaccount.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PrivateLiquidateResponse": {
        "type": "object",
        "required": [
          "op_uuid",
          "operation_id"
        ],
        "properties": {
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PrivateSessionKeysResponse": {
        "type": "object",
        "required": [
          "public_session_keys"
        ],
        "properties": {
          "public_session_keys": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SessionKey"
            }
          }
        }
      },
      "PrivateSetSessionKeyResponse": {
        "type": "object",
        "required": [
          "expiry_sec",
          "ip_whitelist",
          "offchain_scopes",
          "protocol_scopes",
          "public_session_key",
          "subaccount_ids"
        ],
        "properties": {
          "expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "ip_whitelist": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "label": {
            "type": [
              "string",
              "null"
            ]
          },
          "offchain_scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "protocol_scopes": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "public_session_key": {
            "type": "string"
          },
          "subaccount_ids": {
            "description": "Subaccounts the key may act on. Empty/omitted request (all subaccounts) is expanded to the wallet's current subaccount list.",
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint64",
              "minimum": 0.0
            }
          }
        }
      },
      "PrivateTransferSpotExternalRequest": {
        "type": "object",
        "required": [
          "amount",
          "asset_name",
          "max_fee_usd",
          "new_subaccount_manager",
          "nonce",
          "recipient_address",
          "signature",
          "signature_expiry_sec",
          "signer",
          "sub_id",
          "subaccount_id",
          "to_subaccount_id"
        ],
        "properties": {
          "amount": {
            "description": "Transfer amount in units of the asset, as a decimal string (e.g. `\"1.5\"`) or JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "asset_name": {
            "type": "string"
          },
          "max_fee_usd": {
            "description": "Maximum sequencer fee the signer authorises, in USD, as a decimal string (e.g. `\"1.5\"`) or a JSON number. Must cover both the transfer fee and any subaccount-creation fee.",
            "type": "string",
            "format": "decimal"
          },
          "new_subaccount_manager": {
            "description": "Manager id for the new subaccount when `to_subaccount_id == 0`.",
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "nonce": {
            "type": "string"
          },
          "recipient_address": {
            "description": "Owner of the destination account/subaccount.",
            "type": "string"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "type": "string"
          },
          "sub_id": {
            "type": "integer",
            "format": "uint128",
            "minimum": 0.0
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "to_subaccount_id": {
            "description": "Recipient's existing destination subaccount. `0` → create a new subaccount for `recipient_address` under `new_subaccount_manager`.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PrivateTransferSpotExternalResponse": {
        "type": "object",
        "required": [
          "op_uuid",
          "operation_id"
        ],
        "properties": {
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PrivateTransferSpotRequest": {
        "type": "object",
        "required": [
          "amount",
          "asset_name",
          "max_fee_usd",
          "new_subaccount_manager",
          "nonce",
          "signature",
          "signature_expiry_sec",
          "signer",
          "sub_id",
          "subaccount_id",
          "to_subaccount_id"
        ],
        "properties": {
          "amount": {
            "description": "Transfer amount in units of the asset, as a decimal string (e.g. `\"1.5\"`) or JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "asset_name": {
            "type": "string"
          },
          "max_fee_usd": {
            "description": "Maximum sequencer fee the signer authorises, in USD, as a decimal string (e.g. `\"1.5\"`) or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "new_subaccount_manager": {
            "description": "Non-zero → create a new sender-owned subaccount under this manager id.",
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "nonce": {
            "type": "string"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "type": "string"
          },
          "sub_id": {
            "type": "integer",
            "format": "uint128",
            "minimum": 0.0
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "to_subaccount_id": {
            "description": "Existing destination subaccount. Ignored when `new_subaccount_manager != 0`.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PrivateTransferSpotResponse": {
        "type": "object",
        "required": [
          "op_uuid",
          "operation_id"
        ],
        "properties": {
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PrivateWithdrawRequest": {
        "type": "object",
        "required": [
          "amount_in_underlying",
          "asset_name",
          "force_batch",
          "max_fee_usd",
          "nonce",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "amount_in_underlying": {
            "type": "string"
          },
          "asset_name": {
            "type": "string"
          },
          "force_batch": {
            "type": "boolean"
          },
          "max_fee_usd": {
            "description": "Maximum sequencer fee the signer authorises, in USD, as a decimal string (e.g. `\"1.5\"`) or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "nonce": {
            "type": "string"
          },
          "recipient": {
            "description": "L1 address the funds are paid out to. Defaults to the subaccount's owner wallet when omitted.\n\nA non-owner signer (session key) may only pay out to an address on the owner's `whitelisted_recipients`, unless the key holds `Admin`.",
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PrivateWithdrawResponse": {
        "type": "object",
        "required": [
          "op_uuid",
          "operation_id"
        ],
        "properties": {
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "ProgramResponse": {
        "type": "object",
        "required": [
          "asset_types",
          "currencies",
          "end_timestamp",
          "min_notional",
          "name",
          "rewards",
          "start_timestamp"
        ],
        "properties": {
          "asset_types": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "currencies": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "end_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "min_notional": {
            "type": "string"
          },
          "name": {
            "type": "string"
          },
          "rewards": {
            "type": "object",
            "additionalProperties": {
              "type": "string"
            }
          },
          "start_timestamp": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "ProtocolVault": {
        "type": "object",
        "required": [
          "closed",
          "config",
          "global_hwm",
          "last_fee_settled_at_sec",
          "protocol_fee_share_bps",
          "subaccount_id",
          "total_shares"
        ],
        "properties": {
          "closed": {
            "type": "boolean"
          },
          "config": {
            "$ref": "#/components/schemas/VaultConfig"
          },
          "global_hwm": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "last_fee_settled_at_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "protocol_fee_share_bps": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0.0
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "total_shares": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          }
        }
      },
      "PublicExecuteQuoteDebugRequest": {
        "type": "object",
        "required": [
          "direction",
          "legs",
          "max_fee",
          "nonce",
          "quote_id",
          "rfq_id",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PricedLegParamsAndResponse"
            }
          },
          "max_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "nonce": {
            "type": "string"
          },
          "quote_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "rfq_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "int64"
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PublicForwardFeedDataParams": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "expiry",
          "fwd_diff",
          "spot_aggregate_latest",
          "spot_aggregate_start",
          "timestamp"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "default": 0,
            "type": "integer",
            "format": "int64"
          },
          "expiry": {
            "type": "integer",
            "format": "int64"
          },
          "fwd_diff": {
            "type": "string"
          },
          "signatures": {
            "$ref": "#/components/schemas/PublicOracleSignatureDataParams"
          },
          "spot_aggregate_latest": {
            "type": "string"
          },
          "spot_aggregate_start": {
            "type": "string"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "PublicFundingFeedDataParams": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "funding_rate",
          "timestamp"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "default": 0,
            "type": "integer",
            "format": "int64"
          },
          "funding_rate": {
            "description": "Per-hour funding rate as a decimal string; may be negative.",
            "type": "string"
          },
          "signatures": {
            "$ref": "#/components/schemas/PublicOracleSignatureDataParams"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "PublicGetLiveAuctionsResponse": {
        "type": "object",
        "required": [
          "auctions"
        ],
        "properties": {
          "auctions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LiveAuction"
            }
          }
        }
      },
      "PublicGetMarginRequest": {
        "type": "object",
        "required": [
          "margin_type",
          "simulated_collaterals",
          "simulated_positions"
        ],
        "properties": {
          "margin_type": {
            "description": "`SM` (standard margin) or `PM2` (portfolio margin).",
            "type": "string"
          },
          "market": {
            "description": "Currency the PM2 manager must cover; required for PM2.",
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "simulated_collateral_changes": {
            "description": "Optional collateral deltas to simulate deposits / withdrawals / spot trades.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/SimulatedCollateralRequest"
            }
          },
          "simulated_collaterals": {
            "description": "Collaterals of the simulated portfolio.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SimulatedCollateralRequest"
            }
          },
          "simulated_position_changes": {
            "description": "Optional position deltas to simulate perp / option trades.",
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/SimulatedPositionRequest"
            }
          },
          "simulated_positions": {
            "description": "Positions of the simulated portfolio.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SimulatedPositionRequest"
            }
          }
        },
        "additionalProperties": false
      },
      "PublicGetSubaccountsRequest": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "wallet": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "PublicGetWalletsFromSessionKeyResponse": {
        "type": "object",
        "required": [
          "wallets"
        ],
        "properties": {
          "wallets": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PublicMarginWatchResponse": {
        "description": "Result of `public/margin_watch`: the margin state a liquidation watcher needs, computed on the margin basis actually in effect (a delayed- liquidation override, when installed, is already applied).",
        "type": "object",
        "required": [
          "collaterals",
          "currency",
          "initial_margin",
          "is_delayed_liquidation",
          "maintenance_margin",
          "margin_type",
          "positions",
          "risk_universe_id",
          "subaccount_id",
          "subaccount_value",
          "valuation_timestamp"
        ],
        "properties": {
          "collaterals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Collateral"
            }
          },
          "currency": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "initial_margin": {
            "type": "string"
          },
          "is_delayed_liquidation": {
            "description": "`true` when a delayed-liquidation margin override is active, i.e. the margins above are computed on the temporarily lowered basis.",
            "type": "boolean"
          },
          "maintenance_margin": {
            "description": "Below zero the subaccount is flagged for liquidation.",
            "type": "string"
          },
          "margin_type": {
            "type": "string"
          },
          "positions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Position"
            }
          },
          "risk_universe_id": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_value": {
            "type": "string"
          },
          "valuation_timestamp": {
            "description": "Unix seconds at which margin and MtM were computed.",
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "PublicOracleSignatureDataParams": {
        "type": "object",
        "properties": {
          "signatures": {
            "default": [],
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "signers": {
            "default": [],
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "PublicPerpFeedDataParams": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "spot_diff_value",
          "timestamp",
          "type"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "default": 0,
            "type": "integer",
            "format": "int64"
          },
          "signatures": {
            "$ref": "#/components/schemas/PublicOracleSignatureDataParams"
          },
          "spot_diff_value": {
            "type": "string"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "type": {
            "type": "string"
          }
        }
      },
      "PublicQuote": {
        "type": "object",
        "required": [
          "cancel_reason",
          "creation_timestamp",
          "direction",
          "fill_pct",
          "last_update_timestamp",
          "legs",
          "legs_hash",
          "liquidity_role",
          "quote_id",
          "rfq_id",
          "status",
          "subaccount_id",
          "wallet"
        ],
        "properties": {
          "cancel_reason": {
            "$ref": "#/components/schemas/RFQCancelReason"
          },
          "creation_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "fill_pct": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "last_update_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PricedLegParamsAndResponse"
            }
          },
          "legs_hash": {
            "type": "string"
          },
          "liquidity_role": {
            "$ref": "#/components/schemas/LiquidityRole"
          },
          "quote_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "rfq_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "$ref": "#/components/schemas/RFQStatus"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "wallet": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "PublicRateFeedDataParams": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "expiry",
          "rate",
          "timestamp"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "default": 0,
            "type": "integer",
            "format": "int64"
          },
          "expiry": {
            "type": "integer",
            "format": "int64"
          },
          "rate": {
            "type": "string"
          },
          "signatures": {
            "$ref": "#/components/schemas/PublicOracleSignatureDataParams"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "PublicRfq": {
        "type": "object",
        "required": [
          "cancel_reason",
          "creation_timestamp",
          "fill_rate",
          "filled_pct",
          "last_update_timestamp",
          "legs",
          "partial_fill_step",
          "recent_fill_rate",
          "rfq_id",
          "status",
          "subaccount_id",
          "total_cost",
          "valid_until",
          "wallet"
        ],
        "properties": {
          "cancel_reason": {
            "$ref": "#/components/schemas/RFQCancelReason"
          },
          "creation_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "fill_rate": {
            "description": "Lifetime taker fill rate as a decimal string; null until the wallet has enough lifetime RFQs for the rate to be meaningful.",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "filled_direction": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Direction"
              },
              {
                "type": "null"
              }
            ]
          },
          "filled_pct": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "last_update_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LegUnpricedParams"
            }
          },
          "partial_fill_step": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "recent_fill_rate": {
            "description": "Decayed-recent taker fill rate as a decimal string; null until enough recent RFQ activity has accumulated for the rate to be meaningful.",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "rfq_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "$ref": "#/components/schemas/RFQStatus"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "total_cost": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "valid_until": {
            "type": "integer",
            "format": "int64"
          },
          "wallet": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "PublicSendQuoteDebugRequest": {
        "type": "object",
        "required": [
          "direction",
          "legs",
          "max_fee",
          "nonce",
          "rfq_id",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PricedLegParamsAndResponse"
            }
          },
          "max_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "nonce": {
            "type": "string"
          },
          "rfq_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "int64"
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PublicSetFeedDataRequest": {
        "type": "object",
        "required": [
          "forward",
          "perp",
          "rate",
          "spot",
          "vol"
        ],
        "properties": {
          "forward": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicForwardFeedDataParams"
            }
          },
          "funding": {
            "description": "Per-hour perpetual funding rates. Optional so an oracle that predates the funding feed keeps publishing the other five.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicFundingFeedDataParams"
            }
          },
          "perp": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicPerpFeedDataParams"
            }
          },
          "rate": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicRateFeedDataParams"
            }
          },
          "spot": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicSpotFeedDataParams"
            }
          },
          "vol": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicVolFeedDataParams"
            }
          }
        }
      },
      "PublicSetSocializationFeedDataRequest": {
        "type": "object",
        "required": [
          "feeds",
          "universe_id"
        ],
        "properties": {
          "feeds": {
            "description": "Oracle feed batch, in the `public/set_feed_data` shape.",
            "$ref": "#/components/schemas/PublicSetFeedDataRequest"
          },
          "universe_id": {
            "description": "Universe whose pending socialization event to patch.",
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          }
        }
      },
      "PublicSpotFeedDataParams": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "price",
          "timestamp"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "default": 0,
            "type": "integer",
            "format": "int64"
          },
          "feed_source_type": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "price": {
            "type": "string"
          },
          "signatures": {
            "$ref": "#/components/schemas/PublicOracleSignatureDataParams"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "PublicStartAuctionRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "subaccount_id": {
            "description": "Subaccount to auction.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PublicStartAuctionResponse": {
        "type": "object",
        "required": [
          "op_uuid",
          "operation_id"
        ],
        "properties": {
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "PublicTradesResult": {
        "type": "object",
        "required": [
          "pagination",
          "trades"
        ],
        "properties": {
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "trades": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SettledTrade"
            }
          }
        }
      },
      "PublicVaultActionResponse": {
        "description": "A vault action at the aggregate, vault level. Per-holder position details (entry/exit price, before/after balances) are omitted — those are available on the private endpoints. Monetary fields (share price, NAV, high-water marks) are decimal strings.",
        "type": "object",
        "required": [
          "curator_shares_minted",
          "event_ts",
          "event_type",
          "holder",
          "management_shares_minted",
          "nav",
          "new_high_water_mark",
          "old_high_water_mark",
          "operation_uuid",
          "performance_shares_minted",
          "protocol_shares_minted",
          "share_price",
          "shares_delta",
          "status",
          "subaccount_id",
          "total_shares"
        ],
        "properties": {
          "curator_shares_minted": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "event_ts": {
            "description": "Timestamp of this event (ms).",
            "type": "integer",
            "format": "int64"
          },
          "event_type": {
            "description": "\"vault_deposit\" | \"vault_withdraw\" | \"vault_force_withdraw\".",
            "type": "string"
          },
          "holder": {
            "type": "string"
          },
          "management_shares_minted": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "nav": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "new_high_water_mark": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "old_high_water_mark": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "operation_uuid": {
            "type": "string"
          },
          "performance_shares_minted": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "protocol_shares_minted": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "share_price": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "shares_delta": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "status": {
            "description": "While the action is in the queue, one of: \"enqueued\" | \"sequencer_applied\" | \"user_cancel\" | \"curator_reject\" | \"protocol_reject\" | \"expired\".\n\nOnce the action is in the protocol, the status takes on `BatchStatus` values: \"Batching\" | \"Executing\" | \"Da\" | \"Proving\" | \"Settling\" | \"Settled\" or an error.",
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "total_shares": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          }
        }
      },
      "PublicVolFeedDataParams": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "expiry",
          "timestamp",
          "vol_data"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "default": 0,
            "type": "integer",
            "format": "int64"
          },
          "expiry": {
            "type": "integer",
            "format": "int64"
          },
          "signatures": {
            "$ref": "#/components/schemas/PublicOracleSignatureDataParams"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "vol_data": {
            "$ref": "#/components/schemas/PublicVolSVIParamDataParams"
          }
        }
      },
      "PublicVolSVIParamDataParams": {
        "type": "object",
        "required": [
          "SVI_a",
          "SVI_b",
          "SVI_fwd",
          "SVI_m",
          "SVI_refTau",
          "SVI_rho",
          "SVI_sigma"
        ],
        "properties": {
          "SVI_a": {
            "type": "string"
          },
          "SVI_b": {
            "type": "string"
          },
          "SVI_fwd": {
            "type": "string"
          },
          "SVI_m": {
            "type": "string"
          },
          "SVI_refTau": {
            "type": "string"
          },
          "SVI_rho": {
            "type": "string"
          },
          "SVI_sigma": {
            "type": "string"
          }
        }
      },
      "PublicWithdrawDebugRequest": {
        "type": "object",
        "required": [
          "amount_in_underlying",
          "asset_name",
          "force_batch",
          "max_fee_usd",
          "nonce",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "amount_in_underlying": {
            "type": "string"
          },
          "asset_name": {
            "type": "string"
          },
          "force_batch": {
            "type": "boolean"
          },
          "max_fee_usd": {
            "description": "Maximum sequencer fee the signer authorises, in USD, as a decimal string (e.g. `\"1.5\"`) or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "nonce": {
            "type": "string"
          },
          "recipient": {
            "description": "L1 address the funds are paid out to. Defaults to the subaccount's owner wallet when omitted — matching what `private/withdraw` reconstructs.",
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "Quote": {
        "type": "object",
        "required": [
          "cancel_reason",
          "creation_timestamp",
          "direction",
          "extra_fee",
          "fee",
          "fill_pct",
          "is_transfer",
          "label",
          "last_update_timestamp",
          "legs",
          "legs_hash",
          "liquidity_role",
          "max_fee",
          "mmp",
          "nonce",
          "quote_id",
          "rfq_id",
          "signature_expiry_sec",
          "status",
          "subaccount_id"
        ],
        "properties": {
          "batch_status": {
            "description": "Settlement batch status (only for executed quotes).",
            "anyOf": [
              {
                "$ref": "#/components/schemas/BatchStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "cancel_reason": {
            "$ref": "#/components/schemas/RFQCancelReason"
          },
          "creation_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "extra_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "fill_pct": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "is_transfer": {
            "type": "boolean"
          },
          "label": {
            "type": "string"
          },
          "last_update_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PricedLegParamsAndResponse"
            }
          },
          "legs_hash": {
            "type": "string"
          },
          "liquidity_role": {
            "$ref": "#/components/schemas/LiquidityRole"
          },
          "max_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "mmp": {
            "type": "boolean"
          },
          "nonce": {
            "type": "string"
          },
          "quote_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "rfq_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "int64"
          },
          "status": {
            "$ref": "#/components/schemas/RFQStatus"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "tx_hash": {
            "description": "Blockchain transaction hash (only for executed quotes).",
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "QuoteExecuteDebugResult": {
        "type": "object",
        "required": [
          "action_hash",
          "encoded_data",
          "encoded_data_hashed",
          "encoded_legs",
          "legs_hash",
          "typed_data_hash"
        ],
        "properties": {
          "action_hash": {
            "type": "string"
          },
          "encoded_data": {
            "type": "string"
          },
          "encoded_data_hashed": {
            "type": "string"
          },
          "encoded_legs": {
            "type": "string"
          },
          "legs_hash": {
            "type": "string"
          },
          "typed_data_hash": {
            "type": "string"
          }
        }
      },
      "QuoteExecuteResponse": {
        "type": "object",
        "required": [
          "cancel_reason",
          "creation_timestamp",
          "direction",
          "extra_fee",
          "fee",
          "fill_pct",
          "is_transfer",
          "label",
          "last_update_timestamp",
          "legs",
          "legs_hash",
          "liquidity_role",
          "max_fee",
          "mmp",
          "nonce",
          "quote_id",
          "rfq_filled_pct",
          "rfq_id",
          "signature_expiry_sec",
          "status",
          "subaccount_id"
        ],
        "properties": {
          "cancel_reason": {
            "$ref": "#/components/schemas/RFQCancelReason"
          },
          "creation_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "extra_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "fill_pct": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "is_transfer": {
            "type": "boolean"
          },
          "label": {
            "type": "string"
          },
          "last_update_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PricedLegParamsAndResponse"
            }
          },
          "legs_hash": {
            "type": "string"
          },
          "liquidity_role": {
            "$ref": "#/components/schemas/LiquidityRole"
          },
          "max_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "mmp": {
            "type": "boolean"
          },
          "nonce": {
            "type": "string"
          },
          "quote_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "rfq_filled_pct": {
            "description": "Cumulative fraction of the RFQ filled after this execution, as a decimal string (e.g. `\"0.5\"` = 50% filled).",
            "type": "string",
            "format": "decimal"
          },
          "rfq_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "int64"
          },
          "status": {
            "$ref": "#/components/schemas/RFQStatus"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "QuoteGetResponse": {
        "type": "object",
        "required": [
          "pagination",
          "quotes"
        ],
        "properties": {
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "quotes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Quote"
            }
          }
        }
      },
      "QuotePollResponse": {
        "type": "object",
        "required": [
          "pagination",
          "quotes"
        ],
        "properties": {
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "quotes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicQuote"
            }
          }
        }
      },
      "QuoteReplaceResponse": {
        "type": "object",
        "required": [
          "cancelled_quote"
        ],
        "properties": {
          "cancelled_quote": {
            "$ref": "#/components/schemas/Quote"
          },
          "create_quote_error": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/RPCError"
              },
              {
                "type": "null"
              }
            ]
          },
          "quote": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Quote"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "QuoteSendDebugResult": {
        "type": "object",
        "required": [
          "action_hash",
          "encoded_data",
          "encoded_data_hashed",
          "typed_data_hash"
        ],
        "properties": {
          "action_hash": {
            "type": "string"
          },
          "encoded_data": {
            "type": "string"
          },
          "encoded_data_hashed": {
            "type": "string"
          },
          "typed_data_hash": {
            "type": "string"
          }
        }
      },
      "RFQCancelReason": {
        "type": "string",
        "enum": [
          "",
          "user_request",
          "insufficient_margin",
          "signed_max_fee_too_low",
          "mmp_trigger",
          "cancel_on_disconnect",
          "session_key_deregistered",
          "subaccount_withdrawn",
          "rfq_no_longer_open",
          "compliance",
          "validation_failed"
        ]
      },
      "RFQGetResponse": {
        "type": "object",
        "required": [
          "pagination",
          "rfqs"
        ],
        "properties": {
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "rfqs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Rfq"
            }
          }
        }
      },
      "RFQPollResponse": {
        "type": "object",
        "required": [
          "pagination",
          "rfqs"
        ],
        "properties": {
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "rfqs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PublicRfq"
            }
          }
        }
      },
      "RFQStatus": {
        "type": "string",
        "enum": [
          "open",
          "filled",
          "cancelled",
          "expired"
        ]
      },
      "RPCError": {
        "type": "object",
        "required": [
          "code",
          "message"
        ],
        "properties": {
          "code": {
            "type": "integer",
            "format": "int64"
          },
          "data": {
            "type": [
              "string",
              "null"
            ]
          },
          "message": {
            "type": "string"
          }
        }
      },
      "RateFeedDataResponse": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "deadline",
          "expiry",
          "rate",
          "signatures",
          "timestamp"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "expiry": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "rate": {
            "type": "string"
          },
          "signatures": {
            "$ref": "#/components/schemas/OracleSignatureDataResponse"
          },
          "timestamp": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "RateLimitInfo": {
        "type": "object",
        "required": [
          "consumedPoints",
          "isFirstInDuration",
          "msBeforeNext",
          "remainingPoints"
        ],
        "properties": {
          "consumedPoints": {
            "description": "Total consumed points.",
            "type": "integer",
            "format": "int64"
          },
          "isFirstInDuration": {
            "description": "Whether it's the first request in this duration window.",
            "type": "boolean"
          },
          "msBeforeNext": {
            "description": "Milliseconds before the next request is allowed (0 if none).",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "remainingPoints": {
            "description": "Number of remaining points (tokens).",
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "RateLimitResult": {
        "type": "object",
        "required": [
          "remaining_matching",
          "remaining_non_matching",
          "remaining_per_endpoint"
        ],
        "properties": {
          "remaining_connections": {
            "description": "Remaining WebSocket connection allowance for this account, present only on WebSocket connections.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/RateLimitInfo"
              },
              {
                "type": "null"
              }
            ]
          },
          "remaining_matching": {
            "$ref": "#/components/schemas/RateLimitInfo"
          },
          "remaining_non_matching": {
            "$ref": "#/components/schemas/RateLimitInfo"
          },
          "remaining_per_endpoint": {
            "type": "object",
            "additionalProperties": {
              "$ref": "#/components/schemas/RateLimitInfo"
            }
          }
        }
      },
      "ReferralPerformanceByInstrumentType": {
        "description": "Referral performance for one `(role, currency, instrument_type)` bucket.",
        "type": "object",
        "required": [
          "builder_fee",
          "fee_reward",
          "notional_volume",
          "referred_fee",
          "unique_traders_referred"
        ],
        "properties": {
          "builder_fee": {
            "type": "string"
          },
          "fee_reward": {
            "type": "string"
          },
          "notional_volume": {
            "type": "string"
          },
          "referred_fee": {
            "type": "string"
          },
          "unique_traders_referred": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "Referrer": {
        "type": "object",
        "required": [
          "referral_code",
          "wallet"
        ],
        "properties": {
          "receiving_wallet": {
            "type": [
              "string",
              "null"
            ]
          },
          "referral_code": {
            "type": "string"
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "RegisterBridgeDepositParams": {
        "description": "What the client sent and was quoted.",
        "type": "object",
        "required": [
          "bridge_token",
          "bridge_token_decimals",
          "deposit_address",
          "expected_amount",
          "rail",
          "source_chain_id",
          "source_token",
          "source_tx_hash",
          "wallet"
        ],
        "properties": {
          "bridge_token": {
            "description": "The ERC20 the bridge delivers on the destination chain.",
            "type": "string"
          },
          "bridge_token_decimals": {
            "description": "`bridge_token`'s decimals.",
            "type": "integer",
            "format": "uint8",
            "minimum": 0.0
          },
          "deposit_address": {
            "description": "One of the wallet's escrows, from `public/register_deposit_address`.",
            "type": "string"
          },
          "expected_amount": {
            "description": "What the quote says will arrive, in `bridge_token`'s native units, as a decimal string (Li.Fi: `estimate.toAmount`).",
            "type": "string"
          },
          "provider_transfer_id": {
            "description": "The provider's own id for the transfer, kept if the source transaction is sped up or replaced: Li.Fi's quote `transactionId`.",
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "rail": {
            "description": "Bridge protocol: `lifi`. (`layerzero` is not registrable yet.)",
            "type": "string"
          },
          "source_chain_id": {
            "description": "Chain the bridge was sent from.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "source_token": {
            "description": "The ERC20 sent on the source chain.",
            "type": "string"
          },
          "source_tx_hash": {
            "description": "The bridge transaction on that chain.",
            "type": "string"
          },
          "tool": {
            "description": "The route the provider chose (Li.Fi: the quote's `tool`). Internal only.",
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "wallet": {
            "description": "The session's wallet.",
            "type": "string"
          }
        }
      },
      "RegisterDepositAddressParams": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "manager_id": {
            "description": "Manager the deposit routes under. Required (non-zero) when creating a new subaccount (`subaccount_id` omitted or 0); must be 0 or omitted for an existing subaccount — it salts the deposit address, so a nonzero value would mint a distinct escrow for the same destination.",
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "subaccount_id": {
            "default": 0,
            "type": "integer",
            "format": "int64"
          },
          "wallet": {
            "description": "Wallet address to watch for deposits.",
            "type": "string"
          }
        }
      },
      "RegisterDepositAddressResult": {
        "type": "object",
        "required": [
          "deposit_address",
          "wallet"
        ],
        "properties": {
          "deposit_address": {
            "type": "string"
          },
          "manager_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "subaccount_id": {
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "RegisterWithdrawAddressParams": {
        "type": "object",
        "required": [
          "chain_id",
          "recipient",
          "wallet"
        ],
        "properties": {
          "chain_id": {
            "description": "Destination chain: a key of the route file's `withdraw_forwarding` section. Solana is 101 (devnet 103); every other chain is EVM.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "recipient": {
            "description": "Destination address. On an EVM chain it must be `wallet`. On Solana, a base58 wallet address (not a token or program-derived account).",
            "type": "string"
          },
          "wallet": {
            "description": "The account wallet.",
            "type": "string"
          }
        }
      },
      "RegisterWithdrawAddressResult": {
        "type": "object",
        "required": [
          "chain_id",
          "recipient",
          "recipient_display",
          "routes",
          "withdraw_address"
        ],
        "properties": {
          "chain_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "recipient": {
            "description": "`0x` bytes32 the factory forwards to.",
            "type": "string"
          },
          "recipient_display": {
            "description": "`recipient` normalised: checksummed on EVM, base58 on Solana.",
            "type": "string"
          },
          "routes": {
            "description": "The tokens this address forwards.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ForwardedToken"
            }
          },
          "withdraw_address": {
            "description": "Withdraw a forwarded token to this Ethereum address to send it on to `recipient` on `chain_id`.",
            "type": "string"
          }
        }
      },
      "RejectDepositRequestRequest": {
        "type": "object",
        "required": [
          "request_id",
          "subaccount_id"
        ],
        "properties": {
          "reason": {
            "description": "Optional human-readable reason for the rejection.",
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "request_id": {
            "$ref": "#/components/schemas/VaultRequestId"
          },
          "subaccount_id": {
            "description": "The vault's subaccount ID; the caller must be the vault's curator.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "ReplaceOrderRequest": {
        "description": "`private/replace` parameters: a `private/order` payload plus the cancel-target fields (`order_id_to_cancel`, `nonce_to_cancel`, `expected_filled_amount`).",
        "type": "object",
        "required": [
          "amount",
          "direction",
          "instrument_name",
          "limit_price",
          "max_fee",
          "nonce",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "algo_duration_sec": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "algo_num_slices": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int32"
          },
          "algo_type": {
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/AlgoType"
              },
              {
                "type": "null"
              }
            ]
          },
          "amount": {
            "description": "Order amount in units of the base, as a decimal string (e.g. `\"1.5\"`) or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "client": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "expected_filled_amount": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "extra_fee": {
            "description": "Optional extra fee per unit of volume, as a decimal string or JSON number. Defaults to zero.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "instrument_name": {
            "type": "string"
          },
          "is_atomic_signing": {
            "default": null,
            "type": [
              "boolean",
              "null"
            ]
          },
          "label": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "limit_price": {
            "description": "Limit price in quote currency, as a decimal string (e.g. `\"3100.5\"`) or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "max_fee": {
            "description": "Max fee per unit of volume in quote currency, as a decimal string or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "mmp": {
            "description": "Tags the order for market maker protection. Only tagged orders are cancelled by cancel on disconnect.",
            "default": null,
            "type": [
              "boolean",
              "null"
            ]
          },
          "nonce": {
            "type": "string"
          },
          "nonce_to_cancel": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "order_id_to_cancel": {
            "description": "Optional UUID v4 string",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "order_type": {
            "default": "limit",
            "$ref": "#/components/schemas/OrderType"
          },
          "reduce_only": {
            "default": null,
            "type": [
              "boolean",
              "null"
            ]
          },
          "referral_code": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "reject_post_only": {
            "default": null,
            "type": [
              "boolean",
              "null"
            ]
          },
          "reject_timestamp": {
            "default": null,
            "type": [
              "integer",
              "null"
            ],
            "format": "int64"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "int64"
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "time_in_force": {
            "default": "gtc",
            "$ref": "#/components/schemas/TimeInForce"
          },
          "trigger_price": {
            "description": "Trigger price as a decimal string or JSON number; omit for non-trigger orders.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "trigger_price_type": {
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/TriggerPriceType"
              },
              {
                "type": "null"
              }
            ]
          },
          "trigger_type": {
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/TriggerType"
              },
              {
                "type": "null"
              }
            ]
          }
        }
      },
      "ReplaceOrderResponse": {
        "type": "object",
        "required": [
          "cancelled_order"
        ],
        "properties": {
          "cancelled_order": {
            "$ref": "#/components/schemas/Order"
          },
          "create_order_error": {
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/RPCError"
              },
              {
                "type": "null"
              }
            ]
          },
          "order": {
            "default": null,
            "anyOf": [
              {
                "$ref": "#/components/schemas/Order"
              },
              {
                "type": "null"
              }
            ]
          },
          "trades": {
            "default": null,
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Trade"
            }
          }
        }
      },
      "ReplaceQuoteRequest": {
        "type": "object",
        "required": [
          "direction",
          "legs",
          "max_fee",
          "nonce",
          "rfq_id",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "client": {
            "default": "",
            "type": "string"
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "extra_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "default": "0",
            "type": "string",
            "format": "decimal"
          },
          "label": {
            "default": "",
            "type": "string"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PricedLegParamsAndResponse"
            }
          },
          "max_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "mmp": {
            "default": false,
            "type": "boolean"
          },
          "nonce": {
            "type": "string"
          },
          "nonce_to_cancel": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "quote_id_to_cancel": {
            "description": "Optional UUID v4 string",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "referral_code": {
            "default": "",
            "type": "string"
          },
          "rfq_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "int64"
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "RequestVaultDepositRequest": {
        "description": "Fields common to every signed vault action. They appear alongside each endpoint's action-specific parameters in the same request object.",
        "type": "object",
        "required": [
          "amount",
          "deposit_spot_asset",
          "nonce",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id",
          "vault_subaccount_id"
        ],
        "properties": {
          "amount": {
            "description": "Deposit amount in the vault's deposit asset, as a decimal string (e.g. `\"1\"`).",
            "type": "string",
            "format": "decimal"
          },
          "deposit_spot_asset": {
            "$ref": "#/components/schemas/Address"
          },
          "nonce": {
            "type": "string"
          },
          "signature": {
            "description": "0x-prefixed hex of the 65-byte EOA signature.",
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "description": "The subaccount the action is signed on; which subaccount applies depends on the specific method — see that method's reference.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "vault_subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "RequestVaultWithdrawRequest": {
        "description": "Fields common to every signed vault action. They appear alongside each endpoint's action-specific parameters in the same request object.",
        "type": "object",
        "required": [
          "nonce",
          "shares_to_burn",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id",
          "vault_subaccount_id"
        ],
        "properties": {
          "nonce": {
            "type": "string"
          },
          "shares_to_burn": {
            "description": "Number of vault shares to burn, as a decimal string.",
            "type": "string",
            "format": "decimal"
          },
          "signature": {
            "description": "0x-prefixed hex of the 65-byte EOA signature.",
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "description": "The subaccount the action is signed on; which subaccount applies depends on the specific method — see that method's reference.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "vault_subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "ResetMmpResponse": {
        "type": "string",
        "enum": [
          "ok"
        ]
      },
      "Rfq": {
        "type": "object",
        "required": [
          "ask_total_cost",
          "bid_total_cost",
          "cancel_reason",
          "creation_timestamp",
          "filled_pct",
          "label",
          "last_update_timestamp",
          "legs",
          "mark_total_cost",
          "max_total_cost",
          "min_total_cost",
          "partial_fill_step",
          "rfq_id",
          "status",
          "subaccount_id",
          "total_cost",
          "valid_until",
          "wallet"
        ],
        "properties": {
          "ask_total_cost": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "bid_total_cost": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "cancel_reason": {
            "$ref": "#/components/schemas/RFQCancelReason"
          },
          "counterparties": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "$ref": "#/components/schemas/Address"
            }
          },
          "creation_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "filled_direction": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/Direction"
              },
              {
                "type": "null"
              }
            ]
          },
          "filled_pct": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "label": {
            "type": "string"
          },
          "last_update_timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LegUnpricedParams"
            }
          },
          "mark_total_cost": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "max_total_cost": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "min_total_cost": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "partial_fill_step": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "rfq_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "status": {
            "$ref": "#/components/schemas/RFQStatus"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "total_cost": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "valid_until": {
            "type": "integer",
            "format": "int64"
          },
          "wallet": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "RfqGetBestQuoteRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "client": {
            "default": "",
            "type": "string"
          },
          "direction": {
            "default": "buy",
            "$ref": "#/components/schemas/Direction"
          },
          "extra_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "default": "0",
            "type": "string",
            "format": "decimal"
          },
          "legs": {
            "default": [],
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LegUnpricedParams"
            }
          },
          "rfq_id": {
            "description": "RFQ ID to get best quote for.\n\nIf not provided, will return estimates based on mark prices.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "RfqGetBestQuoteResponse": {
        "type": "object",
        "required": [
          "direction",
          "down_liquidation_price",
          "estimated_fee",
          "estimated_realized_pnl",
          "estimated_realized_pnl_excl_fees",
          "estimated_total_cost",
          "filled_pct",
          "is_valid",
          "orderbook_total_cost",
          "post_initial_margin",
          "post_liquidation_price",
          "pre_initial_margin",
          "suggested_max_fee",
          "up_liquidation_price"
        ],
        "properties": {
          "best_quote": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/PublicQuote"
              },
              {
                "type": "null"
              }
            ]
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "down_liquidation_price": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "estimated_fee": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "estimated_realized_pnl": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "estimated_realized_pnl_excl_fees": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "estimated_total_cost": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "filled_pct": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "invalid_reason": {
            "type": [
              "string",
              "null"
            ]
          },
          "is_valid": {
            "type": "boolean"
          },
          "orderbook_total_cost": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "post_initial_margin": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "post_liquidation_price": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "pre_initial_margin": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "suggested_max_fee": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "up_liquidation_price": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          }
        }
      },
      "RfqLegResponse": {
        "type": "object",
        "required": [
          "amount",
          "asset_address",
          "asset_sub_id",
          "price"
        ],
        "properties": {
          "amount": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "asset_address": {
            "type": "string"
          },
          "asset_sub_id": {
            "type": "string"
          },
          "price": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          }
        }
      },
      "RfqMakerActionDataResponse": {
        "type": "object",
        "required": [
          "max_fee",
          "trades"
        ],
        "properties": {
          "max_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "trades": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RfqLegResponse"
            }
          }
        }
      },
      "RfqTakerActionDataResponse": {
        "type": "object",
        "required": [
          "max_fee",
          "order_hash"
        ],
        "properties": {
          "max_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "order_hash": {
            "description": "`keccak(abi.encode(maker_trades))` — the maker bundle hash the taker commits to.",
            "type": "string"
          }
        }
      },
      "RiskUniverse": {
        "description": "One risk universe: its display metadata, managers (each with what it lets you trade and deposit), and the Security Module absorbing the universe's losses. The universe-first mirror of `public/get_all_currencies` — pick a universe, pick a manager in it, and the `manager_id` is what you pass when depositing to a new subaccount.",
        "type": "object",
        "required": [
          "managers",
          "risk_universe_id",
          "security_module"
        ],
        "properties": {
          "description": {
            "description": "Short description of the universe; null until set by the exchange.",
            "type": [
              "string",
              "null"
            ]
          },
          "managers": {
            "description": "The universe's managers (at most one Standard and one Portfolio), each with the instruments it risk-prices and the collaterals it accepts.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/RiskUniverseManager"
            }
          },
          "name": {
            "description": "Display name (e.g. \"PRIME\"), always uppercase; null until set by the exchange.",
            "type": [
              "string",
              "null"
            ]
          },
          "risk_universe_id": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "security_module": {
            "$ref": "#/components/schemas/SecurityModuleDetails"
          }
        }
      },
      "RiskUniverseManager": {
        "description": "A manager and what a subaccount created under it can trade and hold.",
        "type": "object",
        "required": [
          "collaterals",
          "instruments",
          "manager_id",
          "margin_type"
        ],
        "properties": {
          "collaterals": {
            "description": "Assets this manager accepts as deposit collateral.",
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/ManagerCollateral"
            }
          },
          "instruments": {
            "description": "Live derivative asset names tradeable under this manager, sorted (e.g. \"BTC-OPTION\", \"BTC-PERP\"). An option entry names the family — fetch its individual listings via `public/get_all_instruments`.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "manager_id": {
            "description": "Pass this as `manager_id` when depositing to a new subaccount.",
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "margin_type": {
            "$ref": "#/components/schemas/MarginType"
          }
        }
      },
      "ScoreBreakdown": {
        "type": "object",
        "required": [
          "coverage_score",
          "holder_boost",
          "quality_score",
          "total_score",
          "volume",
          "volume_multiplier",
          "wallet"
        ],
        "properties": {
          "coverage_score": {
            "type": "string"
          },
          "holder_boost": {
            "type": "string"
          },
          "quality_score": {
            "type": "string"
          },
          "total_score": {
            "type": "string"
          },
          "volume": {
            "type": "string"
          },
          "volume_multiplier": {
            "type": "string"
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "SecurityModuleDetails": {
        "description": "The universe's Security Module: the subaccount whose funds absorb insolvent losses before any socialization within the universe.",
        "type": "object",
        "required": [
          "cash_asset",
          "cash_currency",
          "subaccount_id"
        ],
        "properties": {
          "cash_asset": {
            "description": "EIP-55 checksummed address of the universe's cash asset.",
            "type": "string"
          },
          "cash_currency": {
            "description": "Currency of the cash asset (e.g. \"USDC\").",
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "SendQuoteRequest": {
        "type": "object",
        "required": [
          "direction",
          "legs",
          "max_fee",
          "nonce",
          "rfq_id",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "client": {
            "default": "",
            "type": "string"
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "extra_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "default": "0",
            "type": "string",
            "format": "decimal"
          },
          "label": {
            "default": "",
            "type": "string"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PricedLegParamsAndResponse"
            }
          },
          "max_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "mmp": {
            "default": false,
            "type": "boolean"
          },
          "nonce": {
            "type": "string"
          },
          "referral_code": {
            "default": "",
            "type": "string"
          },
          "rfq_id": {
            "description": "UUID v4 string",
            "type": "string",
            "format": "uuid"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "int64"
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "SendRfqRequest": {
        "type": "object",
        "required": [
          "legs",
          "subaccount_id"
        ],
        "properties": {
          "client": {
            "default": "",
            "type": "string"
          },
          "counterparties": {
            "default": null,
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "extra_fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "default": "0",
            "type": "string",
            "format": "decimal"
          },
          "label": {
            "default": "",
            "type": "string"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/LegUnpricedParams"
            }
          },
          "max_total_cost": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "min_total_cost": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "partial_fill_step": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "default": "1",
            "type": "string",
            "format": "decimal"
          },
          "referral_code": {
            "default": "",
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "SessionKey": {
        "type": "object",
        "required": [
          "expiry_sec",
          "ip_whitelist",
          "label",
          "offchain_scopes",
          "protocol_scopes",
          "public_session_key",
          "registered_sec",
          "subaccount_ids"
        ],
        "properties": {
          "expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "ip_whitelist": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "label": {
            "type": "string"
          },
          "offchain_scopes": {
            "description": "Off-chain scopes (read-tier capabilities).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "protocol_scopes": {
            "description": "Protocol-level (on-chain authority) scopes.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "public_session_key": {
            "type": "string"
          },
          "registered_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_ids": {
            "description": "Subaccounts this key may act on. An empty stored value means \"all subaccounts\" and is expanded to the wallet's current subaccount list.",
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint64",
              "minimum": 0.0
            }
          }
        }
      },
      "SessionKeysRequest": {
        "type": "object",
        "required": [
          "wallet"
        ],
        "properties": {
          "wallet": {
            "type": "string"
          }
        }
      },
      "SetMmpConfigRequest": {
        "description": "`mmp_interval` and `mmp_frozen_time` are specified in milliseconds (rounded up to the nearest whole second).",
        "type": "object",
        "required": [
          "currency",
          "mmp_frozen_time",
          "mmp_interval",
          "subaccount_id"
        ],
        "properties": {
          "currency": {
            "type": "string"
          },
          "mmp_amount_limit": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "default": "0",
            "type": "string",
            "format": "decimal"
          },
          "mmp_delta_limit": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "default": "0",
            "type": "string",
            "format": "decimal"
          },
          "mmp_frozen_time": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "mmp_interval": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "SetMmpConfigResponse": {
        "description": "Echoes the stored config: decimal-string limits, ms intervals.",
        "type": "object",
        "required": [
          "currency",
          "mmp_amount_limit",
          "mmp_delta_limit",
          "mmp_frozen_time",
          "mmp_interval",
          "subaccount_id"
        ],
        "properties": {
          "currency": {
            "type": "string"
          },
          "mmp_amount_limit": {
            "type": "string"
          },
          "mmp_delta_limit": {
            "type": "string"
          },
          "mmp_frozen_time": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "mmp_interval": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "SetSessionKeyActionDataResponse": {
        "type": "object",
        "required": [
          "expiry_sec",
          "scopes",
          "session_key",
          "subaccounts"
        ],
        "properties": {
          "expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "scopes": {
            "description": "Protocol scope wire strings (e.g. `\"trade:orderbook:all\"`).",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "session_key": {
            "type": "string"
          },
          "subaccounts": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint64",
              "minimum": 0.0
            }
          }
        }
      },
      "SetSessionKeyActionInputData": {
        "description": "The `Action` envelope a debug route rebuilt from the request inputs, plus its decoded action data — i.e. what the signature commits to.",
        "type": "object",
        "required": [
          "data",
          "expiry",
          "module",
          "nonce",
          "owner",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/SetSessionKeyActionDataResponse"
          },
          "expiry": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "module": {
            "type": "string"
          },
          "nonce": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "SetSessionKeyDebugResponse": {
        "description": "Debug-route payload for one rebuilt action: the EIP-712 hashes plus the action input fields.",
        "type": "object",
        "required": [
          "action_hash",
          "action_typehash",
          "domain_separator",
          "encoded_data",
          "encoded_data_hashed",
          "expected_signer",
          "input_data",
          "module",
          "owner",
          "typed_data_hash"
        ],
        "properties": {
          "action_hash": {
            "description": "EIP-712 struct hash of the `Action`: `keccak256(abi.encode(action_typehash, …, encoded_data_hashed, …))`.",
            "type": "string"
          },
          "action_typehash": {
            "description": "`ACTION_TYPEHASH` — keccak of the `Action` struct type string; invariant across deployments.",
            "type": "string"
          },
          "domain_separator": {
            "description": "EIP-712 domain separator of the Matching contract for this deployment.",
            "type": "string"
          },
          "encoded_data": {
            "description": "ABI-encoded, module-specific action payload (the `data` bytes), 0x-hex.",
            "type": "string"
          },
          "encoded_data_hashed": {
            "description": "`keccak256(encoded_data)` — the value packed into the struct hash.",
            "type": "string"
          },
          "expected_signer": {
            "description": "The signer the signature is checked against.",
            "type": "string"
          },
          "input_data": {
            "description": "The rebuilt `Action` envelope and its decoded module-specific `data`.",
            "$ref": "#/components/schemas/SetSessionKeyActionInputData"
          },
          "module": {
            "description": "Per-action module contract address bound into the signed struct.",
            "type": "string"
          },
          "owner": {
            "description": "Wallet that owns the subaccount the action applies to.",
            "type": "string"
          },
          "recovered_signer": {
            "description": "null on the debug routes (no signature is checked there); on a signature-mismatch error this is the address actually recovered.",
            "type": [
              "string",
              "null"
            ]
          },
          "typed_data_hash": {
            "description": "Final EIP-712 digest the client signs: `keccak256(0x1901 || domain_separator || action_hash)`.",
            "type": "string"
          }
        }
      },
      "SetSessionKeyRequest": {
        "description": "Request parameters for registering a scoped session key. Address fields are 0x-prefixed hex strings.",
        "type": "object",
        "required": [
          "expiry_sec",
          "nonce",
          "offchain_scopes",
          "protocol_scopes",
          "public_session_key",
          "signature",
          "signature_expiry_sec",
          "signer",
          "wallet"
        ],
        "properties": {
          "expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "ip_whitelist": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "string"
            }
          },
          "label": {
            "type": [
              "string",
              "null"
            ]
          },
          "nonce": {
            "type": "string"
          },
          "offchain_scopes": {
            "description": "Off-chain scopes which are validated in backend only",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "protocol_scopes": {
            "description": "Scopes granted to the session key, validated by the protocol. Each is a string like `\"trade:orderbook:all\"`.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "public_session_key": {
            "description": "Session key address being authorized.",
            "type": "string"
          },
          "signature": {
            "description": "0x-prefixed hex, 65-byte r||s||v.",
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "type": "string"
          },
          "subaccount_ids": {
            "type": [
              "array",
              "null"
            ],
            "items": {
              "type": "integer",
              "format": "uint64",
              "minimum": 0.0
            }
          },
          "wallet": {
            "description": "Wallet the session key is being registered for.",
            "type": "string"
          }
        }
      },
      "SettledTrade": {
        "description": "A settled trade returned by `public/get_trade_history`. Anonymized: no `order_id` or `label`. `wallet` is included since settled trades are visible on-chain.",
        "type": "object",
        "required": [
          "direction",
          "expected_rebate",
          "extra_fee",
          "index_price",
          "instrument_name",
          "liquidity_role",
          "mark_price",
          "quote_id",
          "realized_pnl",
          "realized_pnl_excl_fees",
          "rfq_id",
          "subaccount_id",
          "timestamp",
          "trade_amount",
          "trade_fee",
          "trade_id",
          "trade_price",
          "tx_hash",
          "wallet"
        ],
        "properties": {
          "batch_status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/BatchStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "expected_rebate": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "extra_fee": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "index_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "instrument_name": {
            "type": "string"
          },
          "liquidity_role": {
            "$ref": "#/components/schemas/LiquidityRole"
          },
          "mark_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "quote_id": {
            "description": "Optional UUID v4 string",
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "realized_pnl": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "realized_pnl_excl_fees": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "rfq_id": {
            "description": "Optional UUID v4 string",
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "trade_amount": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "trade_fee": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "trade_id": {
            "type": "string"
          },
          "trade_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "tx_hash": {
            "type": "string"
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "Severity": {
        "type": "string",
        "enum": [
          "low",
          "medium",
          "high"
        ]
      },
      "SignedAction": {
        "description": "An Action bundled with its ECDSA signature (65 bytes: r||s||v).",
        "type": "object",
        "required": [
          "action",
          "signature"
        ],
        "properties": {
          "action": {
            "description": "The signed action envelope.",
            "$ref": "#/components/schemas/Action"
          },
          "signature": {
            "description": "65-byte ECDSA signature (r||s||v).",
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint8",
              "minimum": 0.0
            }
          }
        }
      },
      "SignedTransferQuoteRequest": {
        "description": "Action info that needs to be signed by quoter or RFQ executor for a transfer. The quoter signs the legs hash + max fee; the executor signs the same legs hash + their own max fee.",
        "type": "object",
        "required": [
          "direction",
          "legs",
          "max_fee",
          "nonce",
          "signature",
          "signature_expiry_sec",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "legs": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/PricedLegParamsAndResponse"
            }
          },
          "max_fee": {
            "description": "Maximum fee the signer authorises, in USD, as a decimal string (e.g. `\"1.5\"`) or a JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "nonce": {
            "type": "string"
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "int64"
          },
          "signer": {
            "$ref": "#/components/schemas/Address"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "SimulatedCollateralRequest": {
        "type": "object",
        "required": [
          "amount",
          "asset_name"
        ],
        "properties": {
          "amount": {
            "description": "Collateral amount to simulate, as a decimal string or JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "asset_name": {
            "description": "Collateral ERC20 asset name (e.g. ETH, USDC, WSTETH).",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "SimulatedPositionRequest": {
        "type": "object",
        "required": [
          "amount",
          "instrument_name"
        ],
        "properties": {
          "amount": {
            "description": "Position amount to simulate, as a decimal string or JSON number.",
            "type": "string",
            "format": "decimal"
          },
          "entry_price": {
            "description": "Perps only: entry price to simulate against; mark price when omitted.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "instrument_name": {
            "description": "Perp or option instrument name.",
            "type": "string"
          }
        },
        "additionalProperties": false
      },
      "SpotAssetEntry": {
        "description": "A spot asset and its per-universe risk: collateral discounts, lending, OI.",
        "type": "object",
        "required": [
          "address",
          "erc20",
          "min_deposit_usd",
          "name",
          "universes"
        ],
        "properties": {
          "address": {
            "description": "EIP-55 checksummed protocol asset address.",
            "type": "string"
          },
          "erc20": {
            "$ref": "#/components/schemas/Erc20Details"
          },
          "min_deposit_usd": {
            "type": "string"
          },
          "name": {
            "description": "Registered asset name (e.g. \"USDC\", \"USDC-NL\").",
            "type": "string"
          },
          "universes": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SpotUniverse"
            }
          }
        }
      },
      "SpotFeedDataResponse": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "deadline",
          "price",
          "signatures",
          "timestamp"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "feed_source_type": {
            "type": [
              "string",
              "null"
            ]
          },
          "price": {
            "type": "string"
          },
          "signatures": {
            "$ref": "#/components/schemas/OracleSignatureDataResponse"
          },
          "timestamp": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "SpotPublicDetails": {
        "type": "object",
        "required": [
          "borrow_index",
          "decimals",
          "supply_index",
          "underlying_erc20_address"
        ],
        "properties": {
          "borrow_index": {
            "type": "string"
          },
          "decimals": {
            "type": "integer",
            "format": "uint8",
            "minimum": 0.0
          },
          "supply_index": {
            "type": "string"
          },
          "underlying_erc20_address": {
            "type": "string"
          }
        }
      },
      "SpotUniverse": {
        "description": "Risk details for a single `(spot_asset, universe)` pair.",
        "type": "object",
        "required": [
          "oi",
          "pm2_im_discount",
          "pm2_mm_discount",
          "risk_universe_id",
          "srm_im_discount",
          "srm_mm_discount"
        ],
        "properties": {
          "lending": {
            "description": "Lending stats; null if the asset has no pool in this universe.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/LendingDetails"
              },
              {
                "type": "null"
              }
            ]
          },
          "oi": {
            "description": "Spot supply OI cap + current supply (for a lending asset, the current supply is the pool's total supplied collateral).",
            "$ref": "#/components/schemas/OpenInterestStats"
          },
          "pm2_im_discount": {
            "description": "PMRM2 collateral haircut (\"0\" if not collateralized).",
            "type": "string"
          },
          "pm2_mm_discount": {
            "type": "string"
          },
          "risk_universe_id": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "srm_im_discount": {
            "description": "SRM collateral discount (cash asset \"1\"; non-collateral \"0\").",
            "type": "string"
          },
          "srm_mm_discount": {
            "type": "string"
          }
        }
      },
      "SrmPerpMarginRequirements": {
        "description": "The SRM's perp margin rates for one `(currency, risk universe)`, and the leverage they imply.\n\nPMRM purposefully does not have a mirror struct as the leverage depends heavily on the composition of the portfolio.",
        "type": "object",
        "required": [
          "im_perp_req",
          "max_leverage",
          "mm_perp_req"
        ],
        "properties": {
          "im_perp_req": {
            "description": "Initial margin rate, as a fraction of perp notional.",
            "type": "string"
          },
          "max_leverage": {
            "description": "`1 / im_perp_req`, rounded to 2 decimals. A zero `im_perp_req` scales the perp market out. It reports `\"0\"` here, not unbounded leverage.",
            "type": "string"
          },
          "mm_perp_req": {
            "description": "Maintenance margin rate, as a fraction of perp notional.",
            "type": "string"
          }
        }
      },
      "Subaccount": {
        "type": "object",
        "required": [
          "collaterals",
          "collaterals_initial_margin",
          "collaterals_maintenance_margin",
          "collaterals_value",
          "currency",
          "failed_to_fetch",
          "initial_margin",
          "is_under_liquidation",
          "label",
          "maintenance_margin",
          "manager_id",
          "margin_type",
          "mm_credits",
          "open_orders",
          "open_orders_margin",
          "positions",
          "positions_initial_margin",
          "positions_maintenance_margin",
          "positions_value",
          "projected_margin_change",
          "risk_universe_id",
          "subaccount_id",
          "subaccount_value",
          "vault_deposit_holds"
        ],
        "properties": {
          "collaterals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Collateral"
            }
          },
          "collaterals_initial_margin": {
            "type": "string"
          },
          "collaterals_maintenance_margin": {
            "type": "string"
          },
          "collaterals_value": {
            "type": "string"
          },
          "currency": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "failed_to_fetch": {
            "description": "`true` if this subaccount's portfolio could not be loaded; such subaccounts are returned as placeholders by `get_all_portfolios`.",
            "type": "boolean"
          },
          "initial_margin": {
            "type": "string"
          },
          "is_under_liquidation": {
            "type": "boolean"
          },
          "label": {
            "type": "string"
          },
          "maintenance_margin": {
            "type": "string"
          },
          "manager_id": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "margin_type": {
            "type": "string"
          },
          "mm_credits": {
            "description": "MM credit from universe loss-socialization events: the socialized USDC debit lands on cash in full, and `debit × (1 − write_down)` is added back to maintenance margin while the 15-minute write-down runs. Events this subaccount has not yet realized contribute their expected credit, with the current subaccount value standing in for the MtM at realization. Zero while under auction — the credit is cleared when liquidation starts.",
            "type": "string"
          },
          "open_orders": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Order"
            }
          },
          "open_orders_margin": {
            "type": "string"
          },
          "positions": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Position"
            }
          },
          "positions_initial_margin": {
            "type": "string"
          },
          "positions_maintenance_margin": {
            "type": "string"
          },
          "positions_value": {
            "type": "string"
          },
          "projected_margin_change": {
            "description": "Change in `maintenance_margin` a minute past the account's next option expiry, once the options expiring by then settle into cash at today's forward. `maintenance_margin + projected_margin_change < 0` signals liquidation right after that expiry. Excludes open orders; `\"0\"` for an account without an unexpired option.",
            "type": "string"
          },
          "risk_universe_id": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_value": {
            "type": "string"
          },
          "vault_deposit_holds": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VaultDepositHold"
            }
          }
        }
      },
      "SubaccountValueEntry": {
        "type": "object",
        "required": [
          "currency",
          "initial_margin",
          "maintenance_margin",
          "margin_type",
          "subaccount_id",
          "subaccount_value",
          "timestamp"
        ],
        "properties": {
          "currency": {
            "description": "The manager's currencies, comma-joined; empty if it has none listed.",
            "type": "string"
          },
          "initial_margin": {
            "description": "Initial margin at the sample, positive meaning healthy.",
            "type": "string",
            "format": "decimal"
          },
          "maintenance_margin": {
            "description": "Maintenance margin at the sample, positive meaning healthy.",
            "type": "string",
            "format": "decimal"
          },
          "margin_type": {
            "description": "Manager's margin model — \"SM\" or \"PM2\".",
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "subaccount_value": {
            "description": "Mark-to-market value, e12 fixed point on the wire as a decimal string.",
            "type": "string",
            "format": "decimal"
          },
          "timestamp": {
            "description": "The instant this sample is as-of, unix milliseconds.",
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "SubaccountValueHistoryResult": {
        "description": "By-wallet lookups return every owned subaccount's samples, concatenated and tagged with `subaccount_id` — not a summed wallet total. Coverage is ragged by design: a subaccount contributes no entry for buckets in which it held nothing, rather than reporting a zero it never had. Callers plotting a wallet total must group by `subaccount_id` and carry each series forward.",
        "type": "object",
        "required": [
          "pagination",
          "subaccount_value_history"
        ],
        "properties": {
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "subaccount_value_history": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/SubaccountValueEntry"
            }
          }
        }
      },
      "TickerSlimSnapshot": {
        "type": "object",
        "required": [
          "A",
          "B",
          "I",
          "M",
          "a",
          "b",
          "maxp",
          "minp",
          "stats",
          "t"
        ],
        "properties": {
          "A": {
            "description": "Amount of contracts / tokens available at the best ask price.",
            "type": "string"
          },
          "B": {
            "description": "Amount of contracts / tokens available at the best bid price.",
            "type": "string"
          },
          "I": {
            "description": "Index price.",
            "type": "string"
          },
          "M": {
            "description": "Mark price.",
            "type": "string"
          },
          "a": {
            "description": "Best ask price.",
            "type": "string"
          },
          "b": {
            "description": "Best bid price.",
            "type": "string"
          },
          "f": {
            "description": "Current hourly funding rate (perpetuals only; `null` otherwise).",
            "type": [
              "string",
              "null"
            ]
          },
          "maxp": {
            "description": "Maximum price at which an aggressive buyer can be matched. Any portion of a market order that would execute above this price is cancelled. A limit buy order with limit price above this value is treated as post only (i.e. it is rejected if it would cross any existing resting order).",
            "type": "string"
          },
          "minp": {
            "description": "Minimum price at which an aggressive seller can be matched. Any portion of a market order that would execute below this price is cancelled. A limit sell order with limit price below this value is treated as post only (i.e. it is rejected if it would cross any existing resting order).",
            "type": "string"
          },
          "option_pricing": {
            "description": "Option greeks and implied vols (options only; `null` otherwise).",
            "anyOf": [
              {
                "$ref": "#/components/schemas/OptionPricing"
              },
              {
                "type": "null"
              }
            ]
          },
          "stats": {
            "description": "Trailing 24-hour trading statistics.",
            "$ref": "#/components/schemas/DailyTradingStatistics"
          },
          "t": {
            "description": "Snapshot creation timestamp, in milliseconds since the Unix epoch.",
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "TimeInForce": {
        "type": "string",
        "enum": [
          "gtc",
          "post_only",
          "fok",
          "ioc"
        ]
      },
      "Trade": {
        "description": "Info that the user expects to get delivered when requesting trade info.",
        "type": "object",
        "required": [
          "direction",
          "expected_rebate",
          "extra_fee",
          "index_price",
          "instrument_name",
          "is_transfer",
          "liquidity_role",
          "mark_price",
          "op_uuid",
          "order_id",
          "quote_id",
          "realized_pnl",
          "realized_pnl_excl_fees",
          "rfq_id",
          "subaccount_id",
          "timestamp",
          "trade_amount",
          "trade_fee",
          "trade_id",
          "trade_price"
        ],
        "properties": {
          "batch_status": {
            "description": "Settlement batch status; `null` if processed by sequencer.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/BatchStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "expected_rebate": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "extra_fee": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "index_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "instrument_name": {
            "type": "string"
          },
          "is_transfer": {
            "type": "boolean"
          },
          "label": {
            "default": "",
            "type": "string"
          },
          "liquidity_role": {
            "$ref": "#/components/schemas/LiquidityRole"
          },
          "mark_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "op_uuid": {
            "type": "string"
          },
          "order_id": {
            "type": "string"
          },
          "quote_id": {
            "description": "Optional UUID v4 string",
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "realized_pnl": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "realized_pnl_excl_fees": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "rfq_id": {
            "description": "Optional UUID v4 string",
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "trade_amount": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "trade_fee": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "trade_id": {
            "type": "string"
          },
          "trade_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "tx_hash": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "TradeHistoryResponse": {
        "description": "A trade as returned by `private/get_trade_history`. Mirrors a private trades subscription event, except `batch_status` is the settlement status (`null` until the batch settles).",
        "type": "object",
        "required": [
          "direction",
          "expected_rebate",
          "extra_fee",
          "index_price",
          "instrument_name",
          "is_transfer",
          "label",
          "liquidity_role",
          "mark_price",
          "op_uuid",
          "order_id",
          "quote_id",
          "realized_pnl",
          "realized_pnl_excl_fees",
          "rfq_id",
          "subaccount_id",
          "timestamp",
          "trade_amount",
          "trade_fee",
          "trade_id",
          "trade_price"
        ],
        "properties": {
          "batch_status": {
            "anyOf": [
              {
                "$ref": "#/components/schemas/BatchStatus"
              },
              {
                "type": "null"
              }
            ]
          },
          "direction": {
            "$ref": "#/components/schemas/Direction"
          },
          "expected_rebate": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "extra_fee": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "index_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "instrument_name": {
            "type": "string"
          },
          "is_transfer": {
            "type": "boolean"
          },
          "label": {
            "type": "string"
          },
          "liquidity_role": {
            "$ref": "#/components/schemas/LiquidityRole"
          },
          "mark_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "op_uuid": {
            "type": "string"
          },
          "order_id": {
            "type": "string"
          },
          "quote_id": {
            "description": "Optional UUID v4 string",
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "realized_pnl": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "realized_pnl_excl_fees": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "rfq_id": {
            "description": "Optional UUID v4 string",
            "type": [
              "string",
              "null"
            ],
            "format": "uuid"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "int64"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "trade_amount": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "trade_fee": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "trade_id": {
            "type": "string"
          },
          "trade_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "tx_hash": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "TradingviewCandle": {
        "description": "Single trades OHLCV candle in `public/get_tradingview_chart_data`. `timestamp` and `timestamp_bucket` are the bucket start in UTC seconds.",
        "type": "object",
        "required": [
          "close_price",
          "high_price",
          "low_price",
          "open_price",
          "timestamp",
          "timestamp_bucket",
          "volume_contracts",
          "volume_usd"
        ],
        "properties": {
          "close_price": {
            "type": "string"
          },
          "high_price": {
            "type": "string"
          },
          "low_price": {
            "type": "string"
          },
          "open_price": {
            "type": "string"
          },
          "timestamp": {
            "type": "integer",
            "format": "int64"
          },
          "timestamp_bucket": {
            "type": "integer",
            "format": "int64"
          },
          "volume_contracts": {
            "type": "string"
          },
          "volume_usd": {
            "type": "string"
          }
        }
      },
      "TransferActionDataResponse": {
        "type": "object",
        "required": [
          "amount",
          "asset",
          "max_fee_usd",
          "new_subaccount_manager",
          "sub_id",
          "to_subaccount_id"
        ],
        "properties": {
          "amount": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "asset": {
            "type": "string"
          },
          "max_fee_usd": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "new_subaccount_manager": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "sub_id": {
            "type": "string"
          },
          "to_subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "TransferEntry": {
        "description": "`amount` and `fee` are decimal strings (e.g. `\"1.1\"`). `is_outgoing` marks the caller's side; on the sender's row `amount` is the gross debited and `fee` the in-kind fee, on the receiver's row `amount` is the net credited and `fee` is 0. `operation_id`/`batch_uuid` are stable uuids.",
        "type": "object",
        "required": [
          "amount",
          "asset",
          "batch_status",
          "batch_uuid",
          "fee",
          "from_subaccount_id",
          "from_wallet",
          "is_outgoing",
          "operation_id",
          "timestamp",
          "to_subaccount_id",
          "to_wallet"
        ],
        "properties": {
          "amount": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "asset": {
            "type": "string"
          },
          "batch_status": {
            "$ref": "#/components/schemas/BatchStatus"
          },
          "batch_uuid": {
            "type": "string"
          },
          "fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "from_subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "from_wallet": {
            "type": "string"
          },
          "is_outgoing": {
            "type": "boolean"
          },
          "operation_id": {
            "type": "string"
          },
          "timestamp": {
            "description": "Unix milliseconds.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "to_subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "to_wallet": {
            "type": "string"
          },
          "tx_hash": {
            "type": [
              "string",
              "null"
            ]
          }
        }
      },
      "TransferHistoryResult": {
        "type": "object",
        "required": [
          "transfers"
        ],
        "properties": {
          "transfers": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/TransferEntry"
            }
          }
        }
      },
      "TransferPositionsDebugResponse": {
        "description": "`private/transfer_positions_debug` result: the maker and taker actions the route rebuilds, exactly as `private/transfer_positions` verifies them.",
        "type": "object",
        "required": [
          "maker_result",
          "taker_result"
        ],
        "properties": {
          "maker_result": {
            "$ref": "#/components/schemas/TransferPositionsMakerDebugResponse"
          },
          "taker_result": {
            "$ref": "#/components/schemas/TransferPositionsTakerDebugResponse"
          }
        }
      },
      "TransferPositionsMakerActionInputData": {
        "description": "The `Action` envelope a debug route rebuilt from the request inputs, plus its decoded action data — i.e. what the signature commits to.",
        "type": "object",
        "required": [
          "data",
          "expiry",
          "module",
          "nonce",
          "owner",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/RfqMakerActionDataResponse"
          },
          "expiry": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "module": {
            "type": "string"
          },
          "nonce": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "TransferPositionsMakerDebugResponse": {
        "description": "Debug-route payload for one rebuilt action: the EIP-712 hashes plus the action input fields.",
        "type": "object",
        "required": [
          "action_hash",
          "action_typehash",
          "domain_separator",
          "encoded_data",
          "encoded_data_hashed",
          "expected_signer",
          "input_data",
          "module",
          "owner",
          "typed_data_hash"
        ],
        "properties": {
          "action_hash": {
            "description": "EIP-712 struct hash of the `Action`: `keccak256(abi.encode(action_typehash, …, encoded_data_hashed, …))`.",
            "type": "string"
          },
          "action_typehash": {
            "description": "`ACTION_TYPEHASH` — keccak of the `Action` struct type string; invariant across deployments.",
            "type": "string"
          },
          "domain_separator": {
            "description": "EIP-712 domain separator of the Matching contract for this deployment.",
            "type": "string"
          },
          "encoded_data": {
            "description": "ABI-encoded, module-specific action payload (the `data` bytes), 0x-hex.",
            "type": "string"
          },
          "encoded_data_hashed": {
            "description": "`keccak256(encoded_data)` — the value packed into the struct hash.",
            "type": "string"
          },
          "expected_signer": {
            "description": "The signer the signature is checked against.",
            "type": "string"
          },
          "input_data": {
            "description": "The rebuilt `Action` envelope and its decoded module-specific `data`.",
            "$ref": "#/components/schemas/TransferPositionsMakerActionInputData"
          },
          "module": {
            "description": "Per-action module contract address bound into the signed struct.",
            "type": "string"
          },
          "owner": {
            "description": "Wallet that owns the subaccount the action applies to.",
            "type": "string"
          },
          "recovered_signer": {
            "description": "null on the debug routes (no signature is checked there); on a signature-mismatch error this is the address actually recovered.",
            "type": [
              "string",
              "null"
            ]
          },
          "typed_data_hash": {
            "description": "Final EIP-712 digest the client signs: `keccak256(0x1901 || domain_separator || action_hash)`.",
            "type": "string"
          }
        }
      },
      "TransferPositionsRequest": {
        "description": "Params for `private/transfer_positions`.",
        "type": "object",
        "required": [
          "maker_params",
          "taker_params",
          "wallet"
        ],
        "properties": {
          "maker_params": {
            "$ref": "#/components/schemas/SignedTransferQuoteRequest"
          },
          "taker_params": {
            "$ref": "#/components/schemas/SignedTransferQuoteRequest"
          },
          "wallet": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "TransferPositionsResponse": {
        "description": "Result for `private/transfer_positions`. Carries the synthesized maker and taker quote payloads so clients see a response shape parallel to `private/execute_quote`.",
        "type": "object",
        "required": [
          "maker_quote",
          "taker_quote"
        ],
        "properties": {
          "maker_quote": {
            "$ref": "#/components/schemas/Quote"
          },
          "taker_quote": {
            "$ref": "#/components/schemas/Quote"
          }
        }
      },
      "TransferPositionsTakerActionInputData": {
        "description": "The `Action` envelope a debug route rebuilt from the request inputs, plus its decoded action data — i.e. what the signature commits to.",
        "type": "object",
        "required": [
          "data",
          "expiry",
          "module",
          "nonce",
          "owner",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/RfqTakerActionDataResponse"
          },
          "expiry": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "module": {
            "type": "string"
          },
          "nonce": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "TransferPositionsTakerDebugResponse": {
        "description": "Debug-route payload for one rebuilt action: the EIP-712 hashes plus the action input fields.",
        "type": "object",
        "required": [
          "action_hash",
          "action_typehash",
          "domain_separator",
          "encoded_data",
          "encoded_data_hashed",
          "expected_signer",
          "input_data",
          "module",
          "owner",
          "typed_data_hash"
        ],
        "properties": {
          "action_hash": {
            "description": "EIP-712 struct hash of the `Action`: `keccak256(abi.encode(action_typehash, …, encoded_data_hashed, …))`.",
            "type": "string"
          },
          "action_typehash": {
            "description": "`ACTION_TYPEHASH` — keccak of the `Action` struct type string; invariant across deployments.",
            "type": "string"
          },
          "domain_separator": {
            "description": "EIP-712 domain separator of the Matching contract for this deployment.",
            "type": "string"
          },
          "encoded_data": {
            "description": "ABI-encoded, module-specific action payload (the `data` bytes), 0x-hex.",
            "type": "string"
          },
          "encoded_data_hashed": {
            "description": "`keccak256(encoded_data)` — the value packed into the struct hash.",
            "type": "string"
          },
          "expected_signer": {
            "description": "The signer the signature is checked against.",
            "type": "string"
          },
          "input_data": {
            "description": "The rebuilt `Action` envelope and its decoded module-specific `data`.",
            "$ref": "#/components/schemas/TransferPositionsTakerActionInputData"
          },
          "module": {
            "description": "Per-action module contract address bound into the signed struct.",
            "type": "string"
          },
          "owner": {
            "description": "Wallet that owns the subaccount the action applies to.",
            "type": "string"
          },
          "recovered_signer": {
            "description": "null on the debug routes (no signature is checked there); on a signature-mismatch error this is the address actually recovered.",
            "type": [
              "string",
              "null"
            ]
          },
          "typed_data_hash": {
            "description": "Final EIP-712 digest the client signs: `keccak256(0x1901 || domain_separator || action_hash)`.",
            "type": "string"
          }
        }
      },
      "TransferSpotActionInputData": {
        "description": "The `Action` envelope a debug route rebuilt from the request inputs, plus its decoded action data — i.e. what the signature commits to.",
        "type": "object",
        "required": [
          "data",
          "expiry",
          "module",
          "nonce",
          "owner",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/TransferActionDataResponse"
          },
          "expiry": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "module": {
            "type": "string"
          },
          "nonce": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "TransferSpotDebugResponse": {
        "description": "Debug-route payload for one rebuilt action: the EIP-712 hashes plus the action input fields.",
        "type": "object",
        "required": [
          "action_hash",
          "action_typehash",
          "domain_separator",
          "encoded_data",
          "encoded_data_hashed",
          "expected_signer",
          "input_data",
          "module",
          "owner",
          "typed_data_hash"
        ],
        "properties": {
          "action_hash": {
            "description": "EIP-712 struct hash of the `Action`: `keccak256(abi.encode(action_typehash, …, encoded_data_hashed, …))`.",
            "type": "string"
          },
          "action_typehash": {
            "description": "`ACTION_TYPEHASH` — keccak of the `Action` struct type string; invariant across deployments.",
            "type": "string"
          },
          "domain_separator": {
            "description": "EIP-712 domain separator of the Matching contract for this deployment.",
            "type": "string"
          },
          "encoded_data": {
            "description": "ABI-encoded, module-specific action payload (the `data` bytes), 0x-hex.",
            "type": "string"
          },
          "encoded_data_hashed": {
            "description": "`keccak256(encoded_data)` — the value packed into the struct hash.",
            "type": "string"
          },
          "expected_signer": {
            "description": "The signer the signature is checked against.",
            "type": "string"
          },
          "input_data": {
            "description": "The rebuilt `Action` envelope and its decoded module-specific `data`.",
            "$ref": "#/components/schemas/TransferSpotActionInputData"
          },
          "module": {
            "description": "Per-action module contract address bound into the signed struct.",
            "type": "string"
          },
          "owner": {
            "description": "Wallet that owns the subaccount the action applies to.",
            "type": "string"
          },
          "recovered_signer": {
            "description": "null on the debug routes (no signature is checked there); on a signature-mismatch error this is the address actually recovered.",
            "type": [
              "string",
              "null"
            ]
          },
          "typed_data_hash": {
            "description": "Final EIP-712 digest the client signs: `keccak256(0x1901 || domain_separator || action_hash)`.",
            "type": "string"
          }
        }
      },
      "TransferSpotExternalActionInputData": {
        "description": "The `Action` envelope a debug route rebuilt from the request inputs, plus its decoded action data — i.e. what the signature commits to.",
        "type": "object",
        "required": [
          "data",
          "expiry",
          "module",
          "nonce",
          "owner",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/ExternalTransferActionDataResponse"
          },
          "expiry": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "module": {
            "type": "string"
          },
          "nonce": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "TransferSpotExternalDebugResponse": {
        "description": "Debug-route payload for one rebuilt action: the EIP-712 hashes plus the action input fields.",
        "type": "object",
        "required": [
          "action_hash",
          "action_typehash",
          "domain_separator",
          "encoded_data",
          "encoded_data_hashed",
          "expected_signer",
          "input_data",
          "module",
          "owner",
          "typed_data_hash"
        ],
        "properties": {
          "action_hash": {
            "description": "EIP-712 struct hash of the `Action`: `keccak256(abi.encode(action_typehash, …, encoded_data_hashed, …))`.",
            "type": "string"
          },
          "action_typehash": {
            "description": "`ACTION_TYPEHASH` — keccak of the `Action` struct type string; invariant across deployments.",
            "type": "string"
          },
          "domain_separator": {
            "description": "EIP-712 domain separator of the Matching contract for this deployment.",
            "type": "string"
          },
          "encoded_data": {
            "description": "ABI-encoded, module-specific action payload (the `data` bytes), 0x-hex.",
            "type": "string"
          },
          "encoded_data_hashed": {
            "description": "`keccak256(encoded_data)` — the value packed into the struct hash.",
            "type": "string"
          },
          "expected_signer": {
            "description": "The signer the signature is checked against.",
            "type": "string"
          },
          "input_data": {
            "description": "The rebuilt `Action` envelope and its decoded module-specific `data`.",
            "$ref": "#/components/schemas/TransferSpotExternalActionInputData"
          },
          "module": {
            "description": "Per-action module contract address bound into the signed struct.",
            "type": "string"
          },
          "owner": {
            "description": "Wallet that owns the subaccount the action applies to.",
            "type": "string"
          },
          "recovered_signer": {
            "description": "null on the debug routes (no signature is checked there); on a signature-mismatch error this is the address actually recovered.",
            "type": [
              "string",
              "null"
            ]
          },
          "typed_data_hash": {
            "description": "Final EIP-712 digest the client signs: `keccak256(0x1901 || domain_separator || action_hash)`.",
            "type": "string"
          }
        }
      },
      "TriggerPriceType": {
        "type": "string",
        "enum": [
          "mark",
          "index"
        ]
      },
      "TriggerType": {
        "type": "string",
        "enum": [
          "stoploss",
          "takeprofit"
        ]
      },
      "UniverseManagers": {
        "description": "The managers risk-pricing a currency within one universe.",
        "type": "object",
        "required": [
          "risk_universe_id"
        ],
        "properties": {
          "pm": {
            "description": "PMRM2 manager id risking this currency in the universe.",
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          },
          "risk_universe_id": {
            "type": "integer",
            "format": "uint32",
            "minimum": 0.0
          },
          "risk_universe_name": {
            "description": "Display name of the universe (uppercase, e.g. \"PRIME\"); absent until set by the exchange.",
            "type": [
              "string",
              "null"
            ]
          },
          "sm": {
            "description": "SRM manager id risking this currency in the universe.",
            "type": [
              "integer",
              "null"
            ],
            "format": "uint32",
            "minimum": 0.0
          }
        }
      },
      "UpdateVaultInfoRequest": {
        "type": "object",
        "required": [
          "subaccount_id"
        ],
        "properties": {
          "description": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "mtm_cap": {
            "description": "Advisory mark-to-market cap in USD, as a decimal string (e.g. `\"1000\"`). Send `null` to remove the cap; omit the field to leave it unchanged.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "name": {
            "default": null,
            "type": [
              "string",
              "null"
            ]
          },
          "subaccount_id": {
            "description": "The vault's subaccount ID; the caller must be the vault's curator.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "whitelist_only": {
            "default": null,
            "type": [
              "boolean",
              "null"
            ]
          }
        }
      },
      "UpdateWhitelistedRecipientsActionDataResponse": {
        "type": "object",
        "required": [
          "add",
          "remove"
        ],
        "properties": {
          "add": {
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "remove": {
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "UpdateWhitelistedRecipientsActionInputData": {
        "description": "The `Action` envelope a debug route rebuilt from the request inputs, plus its decoded action data — i.e. what the signature commits to.",
        "type": "object",
        "required": [
          "data",
          "expiry",
          "module",
          "nonce",
          "owner",
          "signer",
          "subaccount_id"
        ],
        "properties": {
          "data": {
            "$ref": "#/components/schemas/UpdateWhitelistedRecipientsActionDataResponse"
          },
          "expiry": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "module": {
            "type": "string"
          },
          "nonce": {
            "type": "string"
          },
          "owner": {
            "type": "string"
          },
          "signer": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "UpdateWhitelistedRecipientsDebugResponse": {
        "description": "Debug-route payload for one rebuilt action: the EIP-712 hashes plus the action input fields.",
        "type": "object",
        "required": [
          "action_hash",
          "action_typehash",
          "domain_separator",
          "encoded_data",
          "encoded_data_hashed",
          "expected_signer",
          "input_data",
          "module",
          "owner",
          "typed_data_hash"
        ],
        "properties": {
          "action_hash": {
            "description": "EIP-712 struct hash of the `Action`: `keccak256(abi.encode(action_typehash, …, encoded_data_hashed, …))`.",
            "type": "string"
          },
          "action_typehash": {
            "description": "`ACTION_TYPEHASH` — keccak of the `Action` struct type string; invariant across deployments.",
            "type": "string"
          },
          "domain_separator": {
            "description": "EIP-712 domain separator of the Matching contract for this deployment.",
            "type": "string"
          },
          "encoded_data": {
            "description": "ABI-encoded, module-specific action payload (the `data` bytes), 0x-hex.",
            "type": "string"
          },
          "encoded_data_hashed": {
            "description": "`keccak256(encoded_data)` — the value packed into the struct hash.",
            "type": "string"
          },
          "expected_signer": {
            "description": "The signer the signature is checked against.",
            "type": "string"
          },
          "input_data": {
            "description": "The rebuilt `Action` envelope and its decoded module-specific `data`.",
            "$ref": "#/components/schemas/UpdateWhitelistedRecipientsActionInputData"
          },
          "module": {
            "description": "Per-action module contract address bound into the signed struct.",
            "type": "string"
          },
          "owner": {
            "description": "Wallet that owns the subaccount the action applies to.",
            "type": "string"
          },
          "recovered_signer": {
            "description": "null on the debug routes (no signature is checked there); on a signature-mismatch error this is the address actually recovered.",
            "type": [
              "string",
              "null"
            ]
          },
          "typed_data_hash": {
            "description": "Final EIP-712 digest the client signs: `keccak256(0x1901 || domain_separator || action_hash)`.",
            "type": "string"
          }
        }
      },
      "UpdateWhitelistedRecipientsRequest": {
        "type": "object",
        "required": [
          "add",
          "nonce",
          "remove",
          "signature",
          "signature_expiry_sec",
          "signer",
          "wallet"
        ],
        "properties": {
          "add": {
            "description": "Recipient wallet addresses to add to the whitelist.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "nonce": {
            "type": "string"
          },
          "remove": {
            "description": "Recipient wallet addresses to remove from the whitelist.",
            "type": "array",
            "items": {
              "type": "string"
            }
          },
          "signature": {
            "type": "string"
          },
          "signature_expiry_sec": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signer": {
            "type": "string"
          },
          "wallet": {
            "description": "Wallet whose whitelist is being updated; becomes the action owner.",
            "type": "string"
          }
        }
      },
      "UpdateWhitelistedRecipientsResponse": {
        "type": "object",
        "required": [
          "op_uuid",
          "operation_id",
          "whitelisted_recipients"
        ],
        "properties": {
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "whitelisted_recipients": {
            "description": "The account's whitelisted recipients after the update was applied.",
            "type": "array",
            "items": {
              "type": "string"
            }
          }
        }
      },
      "Vault": {
        "type": "object",
        "required": [
          "curator",
          "curator_shares",
          "description",
          "name",
          "protocol",
          "whitelist_only"
        ],
        "properties": {
          "benchmark_price": {
            "description": "USD spot price of the HWM benchmark asset (`1.0` for feed-less USD vaults). null when a configured benchmark has no resolvable price.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "curator": {
            "description": "The vault's curator — the owner wallet of the vault subaccount.",
            "$ref": "#/components/schemas/Address"
          },
          "curator_shares": {
            "description": "Shares held by the curator (the vault subaccount's owner) — their skin-in-the-game. Same units as `protocol.total_shares`.",
            "type": "string",
            "format": "decimal"
          },
          "description": {
            "type": "string"
          },
          "mtm_cap": {
            "description": "Optional non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "name": {
            "type": "string"
          },
          "nav_benchmark": {
            "description": "Live NAV expressed in the HWM benchmark asset's units. null when the vault couldn't be priced or its configured benchmark has no spot price.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "nav_usd": {
            "description": "Live mark-to-market NAV (USD) — signed, so an insolvent vault surfaces as a negative value. null only when the vault couldn't be priced (e.g. missing data). Divide by `protocol.total_shares` for the pre-fee share price.",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "protocol": {
            "$ref": "#/components/schemas/ProtocolVault"
          },
          "simulated_share_price_usd": {
            "description": "Live share price (USD/share) as if curator fees were settled now — the price a depositor/withdrawer faces. null when unpriceable or the vault is insolvent (a fee settlement on negative NAV is meaningless).",
            "default": null,
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "whitelist_only": {
            "type": "boolean"
          }
        }
      },
      "VaultActionResponse": {
        "description": "A vault action as surfaced to the requesting user. Monetary fields (amounts, prices, share price) are decimal strings.",
        "type": "object",
        "required": [
          "after_shares",
          "amount",
          "before_shares",
          "creation_timestamp_ms",
          "entry_price",
          "error_reason",
          "event_ts",
          "event_type",
          "exit_price",
          "operation_id",
          "operation_uuid",
          "share_price",
          "shares_delta",
          "shares_requested",
          "status",
          "user_action_hash",
          "vault_nonce",
          "vault_subaccount_id",
          "wallet"
        ],
        "properties": {
          "after_shares": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "amount": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "before_shares": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "creation_timestamp_ms": {
            "description": "Timestamp the request was created (ms).",
            "type": "integer",
            "format": "int64"
          },
          "entry_price": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "error_reason": {
            "type": "string"
          },
          "event_ts": {
            "description": "Timestamp of this event (ms).",
            "type": "integer",
            "format": "int64"
          },
          "event_type": {
            "description": "\"vault_deposit\" | \"vault_withdraw\" | \"vault_force_withdraw\" | \"vault_cancel\".",
            "type": "string"
          },
          "exit_price": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "operation_uuid": {
            "type": "string"
          },
          "share_price": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "shares_delta": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "shares_requested": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "status": {
            "description": "While the action is in the queue, can be one of the following: \"enqueued\" | \"sequencer_applied\" | \"user_cancel\" | \"curator_reject\" | \"protocol_reject\" | \"expired\".\n\nOnce action is applied in the protocol, the status takes on `BatchStatus` values: \"Batching\" | \"Executing\" | \"Da\" | \"Proving\" | \"Settling\" | \"Settled\" or an error.",
            "type": "string"
          },
          "user_action_hash": {
            "type": "string"
          },
          "vault_nonce": {
            "type": "string"
          },
          "vault_subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "VaultCancelResponse": {
        "description": "Returned by `cancel_all_vault_requests`: identifiers to track the on-chain `VaultCancel` operation plus the ids of the wallet's pending requests that were cancelled.",
        "type": "object",
        "required": [
          "cancelled_request_ids",
          "op_uuid",
          "operation_id"
        ],
        "properties": {
          "cancelled_request_ids": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VaultRequestId"
            }
          },
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "VaultConfig": {
        "description": "Configuration for a vault subaccount's deposit/withdrawal controls.\n\nEvery field is immutable after vault creation. Mutable, informational settings (descriptions, an advisory TVL cap) live in off-chain vault state, not here.",
        "type": "object",
        "required": [
          "cooldown_sec",
          "deposit_spot_asset",
          "management_fee_bps",
          "max_slippage_bps",
          "performance_fee_bps"
        ],
        "properties": {
          "benchmark_asset": {
            "description": "Spot asset the high-water mark is denominated in. null is the feed-less default: the HWM is a constant USD unit (reads no feed, so a deposit-asset depeg cannot manufacture a performance fee). An address denominates the HWM in that spot asset's units — performance fees then accrue only on outperformance measured in the benchmark (e.g. an ETH vault charging fees on ETH-outperformance, not on an ETH-price rally).",
            "anyOf": [
              {
                "$ref": "#/components/schemas/Address"
              },
              {
                "type": "null"
              }
            ]
          },
          "cooldown_sec": {
            "description": "Min seconds between a holder's last deposit and their withdrawal.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "deposit_spot_asset": {
            "$ref": "#/components/schemas/Address"
          },
          "management_fee_bps": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0.0
          },
          "max_slippage_bps": {
            "description": "Max deviation of the curator's quoted share price from the mtm-derived price, both sides. Bounded at creation by the protocol-wide maximum slippage limit.",
            "type": "integer",
            "format": "uint16",
            "minimum": 0.0
          },
          "performance_fee_bps": {
            "type": "integer",
            "format": "uint16",
            "minimum": 0.0
          }
        }
      },
      "VaultCreateResponse": {
        "description": "Returned by `create_vault`: identifiers to track the on-chain `CreateVault` operation.",
        "type": "object",
        "required": [
          "op_uuid",
          "operation_id"
        ],
        "properties": {
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "VaultDepositHold": {
        "type": "object",
        "required": [
          "amount",
          "asset_name",
          "currency",
          "vault_id"
        ],
        "properties": {
          "amount": {
            "type": "string"
          },
          "asset_name": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "vault_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "VaultForceBurnResponse": {
        "description": "Returned by `force_burn`: identifiers to track the on-chain `ForceBurn` operation.",
        "type": "object",
        "required": [
          "op_uuid",
          "operation_id"
        ],
        "properties": {
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "VaultIdsResponse": {
        "description": "Returned by `get_curated_vaults` / `get_shareholder_vaults`: the vault subaccount ids the caller curates / holds shares in.",
        "type": "object",
        "required": [
          "subaccount_ids"
        ],
        "properties": {
          "subaccount_ids": {
            "type": "array",
            "items": {
              "type": "integer",
              "format": "uint64",
              "minimum": 0.0
            }
          }
        }
      },
      "VaultPerformanceHistoryResult": {
        "type": "object",
        "required": [
          "points",
          "resolution",
          "subaccount_id"
        ],
        "properties": {
          "points": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VaultPerformancePointResponse"
            }
          },
          "resolution": {
            "$ref": "#/components/schemas/PerformanceResolution"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "VaultPerformancePointResponse": {
        "description": "One point in a vault's performance series. `ts` is the bucket time (epoch millis); each monetary value is the bucket's last sample as a decimal string. Live prices are nullable (a vault that couldn't be priced).",
        "type": "object",
        "required": [
          "benchmark_price",
          "curator_shares",
          "global_hwm",
          "nav",
          "nav_benchmark",
          "share_price",
          "total_shares",
          "ts"
        ],
        "properties": {
          "benchmark_price": {
            "description": "Optional non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "curator_shares": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "global_hwm": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "nav": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "nav_benchmark": {
            "description": "Optional decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits, or null; a string or JSON number is accepted",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "share_price": {
            "description": "Decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "total_shares": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "ts": {
            "type": "integer",
            "format": "int64"
          }
        }
      },
      "VaultRequestAckResponse": {
        "description": "Returned by `request_vault_deposit` / `request_vault_withdraw`: the id the queued request was assigned (the user's handle for polling / cancelling).",
        "type": "object",
        "required": [
          "request_id"
        ],
        "properties": {
          "request_id": {
            "$ref": "#/components/schemas/VaultRequestId"
          }
        }
      },
      "VaultRequestId": {
        "description": "Composite vault request id: `(vault_subaccount_id, wallet, vault_nonce)`\n\nUseful as a stable dedup key across off-chain and on-chain vault events.",
        "type": "object",
        "required": [
          "vault_nonce",
          "vault_subaccount_id",
          "wallet"
        ],
        "properties": {
          "vault_nonce": {
            "type": "string"
          },
          "vault_subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "wallet": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "VaultRequestResponse": {
        "description": "One queued deposit/withdraw request as surfaced to the curator.",
        "type": "object",
        "required": [
          "creation_timestamp_ms",
          "id",
          "signed_action",
          "subaccount_id",
          "user_action_hash",
          "wallet"
        ],
        "properties": {
          "creation_timestamp_ms": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "id": {
            "$ref": "#/components/schemas/VaultRequestId"
          },
          "signed_action": {
            "description": "The user's signed deposit/withdraw envelope; the curator pairs their `MintShares`/`BurnShares` approval against it.",
            "$ref": "#/components/schemas/SignedAction"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "user_action_hash": {
            "description": "0x-prefixed hex of the 32-byte user-action hash the curator commits to.",
            "type": "string"
          },
          "wallet": {
            "$ref": "#/components/schemas/Address"
          }
        }
      },
      "VaultSettleResponse": {
        "description": "Returned by `mint_vault_shares` / `burn_vault_shares`: identifiers to track the on-chain `MintShares` / `BurnShares` settlement.",
        "type": "object",
        "required": [
          "op_uuid",
          "operation_id"
        ],
        "properties": {
          "op_uuid": {
            "type": "string"
          },
          "operation_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          }
        }
      },
      "VaultShareEntryResponse": {
        "description": "One row of `get_vault_shares`: the caller's share balance in a vault plus the full enriched vault row (same shape as `public/get_vault`).",
        "type": "object",
        "required": [
          "shares",
          "vault"
        ],
        "properties": {
          "shares": {
            "description": "Shares the caller holds. Same units as `vault.protocol.total_shares`.",
            "type": "string",
            "format": "decimal"
          },
          "vault": {
            "$ref": "#/components/schemas/Vault"
          }
        }
      },
      "VaultSharesResponse": {
        "description": "Returned by `get_vault_shares`: one entry per vault the wallet holds shares in.",
        "type": "object",
        "required": [
          "vaults"
        ],
        "properties": {
          "vaults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/VaultShareEntryResponse"
            }
          }
        }
      },
      "VaultsResponse": {
        "description": "Returned by `public/get_vaults`: one page of vaults plus pagination info. Each row carries its subaccount id under `protocol.subaccount_id`.",
        "type": "object",
        "required": [
          "pagination",
          "vaults"
        ],
        "properties": {
          "pagination": {
            "$ref": "#/components/schemas/Pagination"
          },
          "vaults": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/Vault"
            }
          }
        }
      },
      "VolFeedDataResponse": {
        "type": "object",
        "required": [
          "confidence",
          "currency",
          "deadline",
          "expiry",
          "signatures",
          "timestamp",
          "vol_data"
        ],
        "properties": {
          "confidence": {
            "type": "string"
          },
          "currency": {
            "type": "string"
          },
          "deadline": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "expiry": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "signatures": {
            "$ref": "#/components/schemas/OracleSignatureDataResponse"
          },
          "timestamp": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "vol_data": {
            "$ref": "#/components/schemas/VolSVIParamDataResponse"
          }
        }
      },
      "VolSVIParamDataResponse": {
        "type": "object",
        "required": [
          "SVI_a",
          "SVI_b",
          "SVI_fwd",
          "SVI_m",
          "SVI_refTau",
          "SVI_rho",
          "SVI_sigma"
        ],
        "properties": {
          "SVI_a": {
            "type": "string"
          },
          "SVI_b": {
            "type": "string"
          },
          "SVI_fwd": {
            "type": "string"
          },
          "SVI_m": {
            "type": "string"
          },
          "SVI_refTau": {
            "type": "string"
          },
          "SVI_rho": {
            "type": "string"
          },
          "SVI_sigma": {
            "type": "string"
          }
        }
      },
      "WithdrawAddressEntry": {
        "type": "object",
        "required": [
          "address_kind",
          "chain_id",
          "recipient",
          "recipient_display",
          "whitelisted",
          "withdraw_address"
        ],
        "properties": {
          "address_kind": {
            "$ref": "#/components/schemas/AddressKind"
          },
          "chain_id": {
            "description": "Destination chain. Solana is 101 (devnet 103).",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "recipient": {
            "description": "`0x` bytes32 the factory forwards to.",
            "type": "string"
          },
          "recipient_display": {
            "description": "The recipient as registered: checksummed on EVM, base58 on Solana.",
            "type": "string"
          },
          "whitelisted": {
            "description": "On the account's `whitelisted_recipients`, so session keys may withdraw to it.",
            "type": "boolean"
          },
          "withdraw_address": {
            "type": "string"
          }
        }
      },
      "WithdrawalEntry": {
        "description": "`amount` and `fee` are decimal strings (e.g. `\"1.1\"`); the net sent to the recipient is `amount - fee`. `wallet` is the account owner; `recipient` is the L1 destination. `asset` is the currency name (e.g. `\"USDC\"`); `erc20_address` is the on-chain ERC20 the funds settle against (WETH for native ETH). `operation_id`/`batch_uuid` are the stable uuids.",
        "type": "object",
        "required": [
          "amount",
          "asset",
          "batch_status",
          "batch_uuid",
          "erc20_address",
          "fee",
          "operation_id",
          "recipient",
          "subaccount_id",
          "timestamp",
          "wallet"
        ],
        "properties": {
          "amount": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "asset": {
            "type": "string"
          },
          "batch_status": {
            "$ref": "#/components/schemas/BatchStatus"
          },
          "batch_uuid": {
            "type": "string"
          },
          "erc20_address": {
            "type": "string"
          },
          "fee": {
            "description": "Non-negative decimal string of the human value (e.g. `\"1.5\"`), up to 12 fractional digits; a string or JSON number is accepted",
            "type": "string",
            "format": "decimal"
          },
          "forward": {
            "description": "Present when `recipient` is a withdraw address: the forward to its home chain.",
            "anyOf": [
              {
                "$ref": "#/components/schemas/WithdrawalForward"
              },
              {
                "type": "null"
              }
            ]
          },
          "operation_id": {
            "type": "string"
          },
          "recipient": {
            "type": "string"
          },
          "subaccount_id": {
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "timestamp": {
            "description": "Unix milliseconds.",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "tx_hash": {
            "type": [
              "string",
              "null"
            ]
          },
          "wallet": {
            "type": "string"
          }
        }
      },
      "WithdrawalForward": {
        "type": "object",
        "required": [
          "amount_forwarded",
          "chain_id",
          "recipient",
          "status"
        ],
        "properties": {
          "amount_forwarded": {
            "description": "This withdrawal's share of what sent forwards carried. OFT dust stays at the withdraw address for the next forward, so slightly less may arrive.",
            "type": [
              "string",
              "null"
            ],
            "format": "decimal"
          },
          "chain_id": {
            "description": "The destination chain. Solana is 101 (devnet 103).",
            "type": "integer",
            "format": "uint64",
            "minimum": 0.0
          },
          "destination_tx": {
            "type": [
              "string",
              "null"
            ]
          },
          "forward_tx": {
            "description": "The latest Ethereum `processWithdrawal` (or owner `recover`) tx that carried it.",
            "type": [
              "string",
              "null"
            ]
          },
          "hold_reason": {
            "description": "`no_route`, `route_unavailable`, `external_only` or `dust`; set only when `held`.",
            "type": [
              "string",
              "null"
            ]
          },
          "message_id": {
            "description": "LayerZero guid or CCIP message id.",
            "type": [
              "string",
              "null"
            ]
          },
          "rail": {
            "description": "`layerzero` or `ccip`; none before a forward is sent and for a recovery.",
            "type": [
              "string",
              "null"
            ]
          },
          "recipient": {
            "description": "Who it forwards to: base58 on Solana, checksummed on EVM.",
            "type": "string"
          },
          "status": {
            "$ref": "#/components/schemas/WithdrawalForwardStatus"
          }
        }
      },
      "WithdrawalForwardStatus": {
        "description": "Where a forward is, in lifecycle order. A withdrawal paid in parts shows its least advanced part.",
        "oneOf": [
          {
            "type": "string",
            "enum": [
              "delivered"
            ]
          },
          {
            "description": "The outbox has not paid all of it yet: batching, queued or throttled.",
            "type": "string",
            "enum": [
              "awaiting_payout"
            ]
          },
          {
            "description": "Paid to the withdraw address; the forward is not sent yet.",
            "type": "string",
            "enum": [
              "pending"
            ]
          },
          {
            "description": "Not forwarding; see `hold_reason`. Show `route_unavailable` as delayed.",
            "type": "string",
            "enum": [
              "held"
            ]
          },
          {
            "description": "Bridge message sent, not yet delivered.",
            "type": "string",
            "enum": [
              "in_flight"
            ]
          },
          {
            "description": "The bridge reported a failure. An ops retry can still deliver it.",
            "type": "string",
            "enum": [
              "failed"
            ]
          },
          {
            "description": "Pulled back by the owner for a manual refund.",
            "type": "string",
            "enum": [
              "recovered"
            ]
          }
        ]
      },
      "WithdrawalHistoryResult": {
        "type": "object",
        "required": [
          "withdrawals"
        ],
        "properties": {
          "withdrawals": {
            "type": "array",
            "items": {
              "$ref": "#/components/schemas/WithdrawalEntry"
            }
          }
        }
      }
    }
  }
}