From 0dabc75b7cedca71fddb6cf5dd74680516eb8cfb Mon Sep 17 00:00:00 2001 From: manantlerio <223027124+manantlerio@users.noreply.github.com> Date: Wed, 14 Oct 2026 02:57:07 -0400 Subject: [PATCH] feat: add user_active_asset_data to Info (closes #274) Co-Authored-By: Claude Opus 5.5 --- hyperliquid/info.py | 30 ++++++ .../test_user_active_asset_data.yaml | 93 +++++++++++++++++++ tests/info_test.py | 12 +++ 3 files changed, 135 insertions(+) create mode 100644 tests/cassettes/info_test/test_user_active_asset_data.yaml diff --git a/hyperliquid/info.py b/hyperliquid/info.py index 360d058..10adad1 100644 --- a/hyperliquid/info.py +++ b/hyperliquid/info.py @@ -1,5 +1,6 @@ from hyperliquid.api import API from hyperliquid.utils.types import ( + ActiveAssetData, Any, Callable, Cloid, @@ -762,6 +763,35 @@ def extra_agents(self, user: str) -> Any: """ return self.post("/info", {"type": "extraAgents", "user": user}) + def user_active_asset_data(self, user: str, name: str) -> ActiveAssetData: + """Retrieve a user's leverage and trading limits for a given coin. + + POST /info + + Args: + user (str): Onchain address in 42-character hexadecimal format; + e.g. 0x0000000000000000000000000000000000000000. + name (str): Coin to retrieve active asset data for. + + Returns: + { + user: str, + coin: str, + leverage: { + type: "cross" | "isolated", + value: int, + rawUsd: float string # only if type is "isolated" + }, + maxTradeSzs: [float string, float string], + availableToTrade: [float string, float string], + markPx: float string + } + """ + return cast( + ActiveAssetData, + self.post("/info", {"type": "activeAssetData", "user": user, "coin": self.name_to_coin[name]}), + ) + def _remap_coin_subscription(self, subscription: Subscription) -> None: if ( subscription["type"] == "l2Book" diff --git a/tests/cassettes/info_test/test_user_active_asset_data.yaml b/tests/cassettes/info_test/test_user_active_asset_data.yaml new file mode 100644 index 0000000..a5bb65d --- /dev/null +++ b/tests/cassettes/info_test/test_user_active_asset_data.yaml @@ -0,0 +1,93 @@ +interactions: +- request: + body: '{"type": "meta", "dex": ""}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '27' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.3 + method: POST + uri: https://api.hyperliquid.xyz/info + response: + body: + string: '{"universe":[{"szDecimals":5,"name":"BTC","maxLeverage":40,"marginTableId":56},{"szDecimals":4,"name":"ETH","maxLeverage":25,"marginTableId":55},{"szDecimals":2,"name":"ATOM","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"MATIC","maxLeverage":20,"marginTableId":20,"isDelisted":true},{"szDecimals":1,"name":"DYDX","maxLeverage":5,"marginTableId":5},{"szDecimals":2,"name":"SOL","maxLeverage":20,"marginTableId":54},{"szDecimals":2,"name":"AVAX","maxLeverage":10,"marginTableId":52},{"szDecimals":3,"name":"BNB","maxLeverage":10,"marginTableId":51},{"szDecimals":1,"name":"APE","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"OP","maxLeverage":5,"marginTableId":5},{"szDecimals":2,"name":"LTC","maxLeverage":10,"marginTableId":52},{"szDecimals":1,"name":"ARB","maxLeverage":10,"marginTableId":51},{"szDecimals":0,"name":"DOGE","maxLeverage":10,"marginTableId":52},{"szDecimals":1,"name":"INJ","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"SUI","maxLeverage":10,"marginTableId":52},{"szDecimals":0,"name":"kPEPE","maxLeverage":10,"marginTableId":52},{"szDecimals":1,"name":"CRV","maxLeverage":10,"marginTableId":52},{"szDecimals":1,"name":"LDO","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"LINK","maxLeverage":10,"marginTableId":52},{"szDecimals":1,"name":"STX","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"RNDR","maxLeverage":20,"marginTableId":20,"isDelisted":true},{"szDecimals":0,"name":"CFX","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"FTM","maxLeverage":10,"marginTableId":10,"isDelisted":true},{"szDecimals":2,"name":"GMX","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"SNX","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"XRP","maxLeverage":20,"marginTableId":53},{"szDecimals":3,"name":"BCH","maxLeverage":10,"marginTableId":52},{"szDecimals":2,"name":"APT","maxLeverage":10,"marginTableId":52},{"szDecimals":2,"name":"AAVE","maxLeverage":10,"marginTableId":52},{"szDecimals":2,"name":"COMP","maxLeverage":5,"marginTableId":5},{"szDecimals":4,"name":"MKR","maxLeverage":10,"marginTableId":51,"isDelisted":true},{"szDecimals":1,"name":"WLD","maxLeverage":10,"marginTableId":52},{"szDecimals":1,"name":"FXS","maxLeverage":5,"marginTableId":5,"isDelisted":true},{"szDecimals":0,"name":"HPOS","maxLeverage":3,"marginTableId":3,"onlyIsolated":true,"isDelisted":true,"marginMode":"strictIsolated"},{"szDecimals":0,"name":"RLB","maxLeverage":3,"marginTableId":3,"onlyIsolated":true,"isDelisted":true,"marginMode":"strictIsolated"},{"szDecimals":3,"name":"UNIBOT","maxLeverage":3,"marginTableId":3,"onlyIsolated":true,"isDelisted":true,"marginMode":"strictIsolated"},{"szDecimals":0,"name":"YGG","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"TRX","maxLeverage":10,"marginTableId":51},{"szDecimals":0,"name":"kSHIB","maxLeverage":10,"marginTableId":51},{"szDecimals":1,"name":"UNI","maxLeverage":10,"marginTableId":52},{"szDecimals":0,"name":"SEI","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"RUNE","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"OX","maxLeverage":3,"marginTableId":3,"onlyIsolated":true,"isDelisted":true,"marginMode":"strictIsolated"},{"szDecimals":1,"name":"FRIEND","maxLeverage":3,"marginTableId":3,"onlyIsolated":true,"isDelisted":true,"marginMode":"strictIsolated"},{"szDecimals":0,"name":"SHIA","maxLeverage":3,"marginTableId":3,"onlyIsolated":true,"isDelisted":true,"marginMode":"strictIsolated"},{"szDecimals":1,"name":"CYBER","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":1,"name":"ZRO","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"BLZ","maxLeverage":5,"marginTableId":5,"isDelisted":true},{"szDecimals":1,"name":"DOT","maxLeverage":10,"marginTableId":51},{"szDecimals":1,"name":"BANANA","maxLeverage":3,"marginTableId":3},{"szDecimals":2,"name":"TRB","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"FTT","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"LOOM","maxLeverage":10,"marginTableId":10,"isDelisted":true},{"szDecimals":0,"name":"OGN","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"RDNT","maxLeverage":5,"marginTableId":5,"isDelisted":true},{"szDecimals":0,"name":"ARK","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"BNT","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"CANTO","maxLeverage":5,"marginTableId":5,"isDelisted":true},{"szDecimals":0,"name":"REQ","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"BIGTIME","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"KAS","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"ORBS","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"BLUR","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"TIA","maxLeverage":5,"marginTableId":5},{"szDecimals":2,"name":"BSV","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"ADA","maxLeverage":10,"marginTableId":52},{"szDecimals":1,"name":"TON","maxLeverage":10,"marginTableId":51,"isDelisted":true},{"szDecimals":0,"name":"MINA","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"POLYX","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"GAS","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"PENDLE","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"STG","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"FET","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"STRAX","maxLeverage":10,"marginTableId":10,"isDelisted":true},{"szDecimals":1,"name":"NEAR","maxLeverage":10,"marginTableId":52},{"szDecimals":0,"name":"MEME","maxLeverage":3,"marginTableId":3},{"szDecimals":2,"name":"ORDI","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"BADGER","maxLeverage":5,"marginTableId":5,"isDelisted":true},{"szDecimals":2,"name":"NEO","maxLeverage":5,"marginTableId":5},{"szDecimals":2,"name":"ZEN","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"FIL","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"PYTH","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"SUSHI","maxLeverage":3,"marginTableId":3},{"szDecimals":2,"name":"ILV","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":1,"name":"IMX","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"kBONK","maxLeverage":10,"marginTableId":52},{"szDecimals":0,"name":"GMT","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"SUPER","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"USTC","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":1,"name":"NFTI","maxLeverage":3,"marginTableId":3,"onlyIsolated":true,"isDelisted":true,"marginMode":"strictIsolated"},{"szDecimals":0,"name":"JUP","maxLeverage":10,"marginTableId":51},{"szDecimals":0,"name":"kLUNC","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"RSR","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"GALA","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"JTO","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"NTRN","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":2,"name":"ACE","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"MAV","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"WIF","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"CAKE","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"PEOPLE","maxLeverage":3,"marginTableId":3},{"szDecimals":2,"name":"ENS","maxLeverage":5,"marginTableId":5},{"szDecimals":2,"name":"ETC","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"XAI","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"MANTA","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"UMA","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"ONDO","maxLeverage":10,"marginTableId":51},{"szDecimals":0,"name":"ALT","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"ZETA","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"DYM","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"MAVIA","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":1,"name":"W","maxLeverage":5,"marginTableId":5},{"szDecimals":5,"name":"PANDORA","maxLeverage":3,"marginTableId":3,"onlyIsolated":true,"isDelisted":true,"marginMode":"strictIsolated"},{"szDecimals":1,"name":"STRK","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"PIXEL","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":1,"name":"AI","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":3,"name":"TAO","maxLeverage":5,"marginTableId":5},{"szDecimals":2,"name":"AR","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"MYRO","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"kFLOKI","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"BOME","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"ETHFI","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"ENA","maxLeverage":10,"marginTableId":52},{"szDecimals":1,"name":"MNT","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"TNSR","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"SAGA","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"MERL","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"HBAR","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"POPCAT","maxLeverage":3,"marginTableId":3},{"szDecimals":2,"name":"OMNI","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":2,"name":"EIGEN","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"REZ","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"NOT","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"TURBO","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"BRETT","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"IO","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"ZK","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"BLAST","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"LISTA","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"MEW","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":1,"name":"RENDER","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"kDOGS","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"POL","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"CATI","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"CELO","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"HMSTR","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"SCR","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"NEIROETH","maxLeverage":5,"marginTableId":5,"isDelisted":true},{"szDecimals":1,"name":"kNEIRO","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"GOAT","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"MOODENG","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"GRASS","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"PURR","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"PNUT","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"XLM","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"CHILLGUY","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"SAND","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"IOTA","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"ALGO","maxLeverage":5,"marginTableId":5},{"szDecimals":2,"name":"HYPE","maxLeverage":10,"marginTableId":52},{"szDecimals":1,"name":"ME","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"MOVE","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"VIRTUAL","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"PENGU","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"USUAL","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"FARTCOIN","maxLeverage":10,"marginTableId":52},{"szDecimals":1,"name":"AI16Z","maxLeverage":5,"marginTableId":5,"isDelisted":true},{"szDecimals":0,"name":"AIXBT","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"ZEREBRO","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"BIO","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"GRIFFAIN","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"SPX","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"S","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"MORPHO","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"TRUMP","maxLeverage":10,"marginTableId":52},{"szDecimals":1,"name":"MELANIA","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"ANIME","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"VINE","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":2,"name":"VVV","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"JELLY","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":1,"name":"BERA","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"TST","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"LAYER","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"IP","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":1,"name":"OM","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"KAITO","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"NIL","maxLeverage":3,"marginTableId":3},{"szDecimals":3,"name":"PAXG","maxLeverage":10,"marginTableId":51},{"szDecimals":0,"name":"PROMPT","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"BABY","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"WCT","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"HYPER","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"ZORA","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"INIT","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"DOOD","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"LAUNCHCOIN","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"NXPC","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"SOPH","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"RESOLV","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"SYRUP","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"PUMP","maxLeverage":10,"marginTableId":52},{"szDecimals":0,"name":"PROVE","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"YZY","maxLeverage":3,"marginTableId":3,"isDelisted":true},{"szDecimals":0,"name":"XPL","maxLeverage":10,"marginTableId":51},{"szDecimals":0,"name":"WLFI","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"LINEA","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"SKY","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"ASTER","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"AVNT","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"STBL","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"0G","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"HEMI","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"APEX","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"2Z","maxLeverage":3,"marginTableId":3},{"szDecimals":2,"name":"ZEC","maxLeverage":10,"marginTableId":52},{"szDecimals":0,"name":"MON","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"MET","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"MEGA","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"CC","maxLeverage":3,"marginTableId":3},{"szDecimals":1,"name":"ICP","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"AERO","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"STABLE","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"FOGO","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"LIT","maxLeverage":5,"marginTableId":5},{"szDecimals":3,"name":"XMR","maxLeverage":5,"marginTableId":5},{"szDecimals":1,"name":"AXS","maxLeverage":5,"marginTableId":5},{"szDecimals":2,"name":"DASH","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"SKR","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"AZTEC","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"CHIP","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"GRAM","maxLeverage":5,"marginTableId":5},{"szDecimals":0,"name":"CASHCAT","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"PONS","maxLeverage":3,"marginTableId":3},{"szDecimals":0,"name":"USELESS","maxLeverage":3,"marginTableId":3}],"marginTables":[[50,{"description":"","marginTiers":[{"lowerBound":"0.0","maxLeverage":50}]}],[51,{"description":"tiered + 10x","marginTiers":[{"lowerBound":"0.0","maxLeverage":10},{"lowerBound":"3000000.0","maxLeverage":5}]}],[52,{"description":"tiered + 10x (2)","marginTiers":[{"lowerBound":"0.0","maxLeverage":10},{"lowerBound":"20000000.0","maxLeverage":5}]}],[53,{"description":"tiered + 20x","marginTiers":[{"lowerBound":"0.0","maxLeverage":20},{"lowerBound":"40000000.0","maxLeverage":10}]}],[54,{"description":"tiered + 20x (2)","marginTiers":[{"lowerBound":"0.0","maxLeverage":20},{"lowerBound":"70000000.0","maxLeverage":10}]}],[55,{"description":"tiered + 25x","marginTiers":[{"lowerBound":"0.0","maxLeverage":25},{"lowerBound":"100000000.0","maxLeverage":15}]}],[56,{"description":"tiered + 40x","marginTiers":[{"lowerBound":"0.0","maxLeverage":40},{"lowerBound":"150000000.0","maxLeverage":20}]}]],"collateralToken":0}' + headers: + Connection: + - keep-alive + Content-Length: + - '17628' + Content-Type: + - application/json + Date: + - Wed, 14 Oct 2026 06:50:42 GMT + Server: + - nginx/1.22.1 + access-control-allow-origin: + - '*' + access-control-expose-headers: + - '*' + vary: + - origin + - access-control-request-method + - access-control-request-headers + status: + code: 200 + message: OK +- request: + body: '{"type": "activeAssetData", "user": "0x5e9ee1089755c3435139848e47e6635505d5a13a", + "coin": "BTC"}' + headers: + Accept: + - '*/*' + Accept-Encoding: + - gzip, deflate + Connection: + - keep-alive + Content-Length: + - '96' + Content-Type: + - application/json + User-Agent: + - python-requests/2.32.3 + method: POST + uri: https://api.hyperliquid.xyz/info + response: + body: + string: '{"user":"0x5e9ee1089755c3435139848e47e6635505d5a13a","coin":"BTC","leverage":{"type":"cross","value":20},"maxTradeSzs":["0.00055","0.00055"],"availableToTrade":["2.319897","2.319897"],"markPx":"83405.6"}' + headers: + Connection: + - keep-alive + Content-Length: + - '203' + Content-Type: + - application/json + Date: + - Wed, 14 Oct 2026 06:50:42 GMT + Server: + - nginx/1.30.3 + access-control-allow-origin: + - '*' + access-control-expose-headers: + - '*' + vary: + - origin + - access-control-request-method + - access-control-request-headers + status: + code: 200 + message: OK +version: 1 diff --git a/tests/info_test.py b/tests/info_test.py index 79e146c..9cec52e 100644 --- a/tests/info_test.py +++ b/tests/info_test.py @@ -257,3 +257,15 @@ def test_extra_agents(): assert "name" in agent, "Each agent should have a 'name' field" assert "address" in agent, "Each agent should have an 'address' field" assert "validUntil" in agent, "Each agent should have a 'validUntil' field" + + +@pytest.mark.vcr() +def test_user_active_asset_data(): + info = Info(skip_ws=True, spot_meta=TEST_SPOT_META) + response = info.user_active_asset_data(user="0x5e9ee1089755c3435139848e47e6635505d5a13a", name="BTC") + assert response["user"].lower() == "0x5e9ee1089755c3435139848e47e6635505d5a13a" + assert response["coin"] == "BTC" + assert response["leverage"]["type"] in ("cross", "isolated") + assert isinstance(response["leverage"]["value"], int) + for key in ["maxTradeSzs", "availableToTrade", "markPx"]: + assert key in response.keys()