Hyperliquid Python SDK

The official Python client for signing and sending orders on one perp DEX.

by Hyperliquid

Last updated

From
Free
Latency
Realtime
Licence
MIT
Self-hosted
Yes

What it is

The first-party Python client for Hyperliquid, and the entry point for most code written against that venue. Three modules and nothing else: Info for reads, Exchange for anything that needs a signature, and WebsocketManager for subscriptions.

It is a single-venue SDK, and that is a different product from a multi-venue client, not a smaller one. A unified library such as CCXT buys you portability at the cost of the lowest common denominator — it exposes the operations every venue has, in the shape they all share. This exposes what Hyperliquid has, including the parts nothing else has: vault transfers, sub-accounts, builder fees, TWAP slice fills, staking and delegation, multi-sig conversion, spot and perp asset deploys, even validator registration and jailing. Exchange carries over fifty methods and only about a dozen of them are order entry. If your strategy needs any of the rest, the unified layer cannot reach it; if your strategy needs a second venue tomorrow, this cannot reach that.

Info is the half people underestimate. Forty-five read methods, none of which needs a key, and most of which take an arbitrary address — the README's own first example fetches the account state of a wallet that is not yours. Funding history, per-user funding history, L2 book snapshots, candles, asset contexts, portfolio, fee tier, vault equities and the account's own rate-limit status are all one unauthenticated POST away.

Liveness, in dates: last commit on master 4 June 2026, release 0.24.0 published to PyPI the same day at 19:47 UTC, and no commit on that branch in the 90 days since. Earlier releases ran at roughly two-month intervals — 0.23.0 in April, 0.22.0 in February, 0.21.0 in November 2025. The licence is MIT from LICENSE.md, "Copyright (c) 2024 Hyperliquid Labs Pte. Ltd.".

Pricing

Free, MIT, nothing to buy. The costs are the venue's — Hyperliquid's own maker and taker fees and its funding payments — and the SDK adds none of its own. It carries no referral arrangement and no default builder address; the builder-fee mechanism is exposed as approve_builder_fee and an example, for people building on top of Hyperliquid who want to charge their own users, not as something charged to you.

Data & coverage

Hyperliquid perpetuals and Hyperliquid spot, and nothing else — that is the whole of the coverage question for a single-venue client. Market data comes from the same API as orders, so there is no separate feed to subscribe to and no history archive: candles_snapshot and funding_history take a start and end time and return what the venue serves.

Three endpoints are built in as constants: mainnet at api.hyperliquid.xyz, testnet at api.hyperliquid-testnet.xyz, and localhost:3001 for a local node. Switching between them is a different URL passed to the same constructor, which is why the testnet path is a genuine rehearsal rather than a simulation — the same code, the same signing, the same API, different money.

Integrations

The agent wallet is the integration story. approve_agent() returns a freshly generated key that is authorised to act for your account, and the repository's own example documents the limit in plain words: the agent cannot transfer or withdraw funds. That key is what belongs on the machine running the bot — the docstring even suggests running the approval step elsewhere, or signing it from a wallet app instead of putting the main private key into Python at all. Named agents created in the front end persist across sessions.

Everything else is Python-side. The dependencies are eth-account and eth-utils for signing, msgpack for action encoding, requests and websocket-client for transport. There is no MCP server, no CLI and no notification layer.

Limitations

One venue. Hyperliquid works, or nothing works. There is no abstraction to swap out, and there is no cross-venue anything — no consolidated book, no hedge on another exchange, no failover. That is the correct trade for a strategy that exists because of Hyperliquid's order book, and the wrong one for anything portable.

No client-side rate limiting and no retries. api.py is forty lines: a requests.Session, one POST method, and an exception mapper that raises ClientError on 4xx and ServerError on 5xx. The timeout argument defaults to None, so a request that hangs hangs forever unless you pass a value. Everything a production bot needs around an HTTP call — backoff, jitter, a request budget, a circuit breaker — is absent by design, and Info.user_rate_limit exists precisely because you are expected to manage it.

No orders over the websocket. WebsocketManager subscribes and unsubscribes; order entry is REST only.

Three and a half months without a commit, against a venue that ships. Hyperliquid is not a static API, and the SDK is not archived, but 4 June 2026 is the last thing in the log as of 19 September. Check the repository before assuming a recently added venue feature is reachable from here.

Development pins Python 3.10 exactly — runtime supports 3.9 and up, but contributing requires that version and Poetry v1, which the README documents as a known annoyance.

It is a client, not a bot. No scheduler, no strategy, no position sizing, no persistence and no backtester. Everything that makes automation automation is yours.

Alternatives

CCXT reaches Hyperliquid too, through the same unified method names it uses for a hundred other venues, and is the right answer the moment there is a second venue. What it cannot reach is the venue-specific half of this SDK — vaults, sub-accounts, staking, deploys — and it adds a one-basis-point builder fee on Hyperliquid by default that you switch off in code.

ccapi is the same choice again for people who need C++ latency; it supports Hyperliquid execution, but addresses instruments by numeric asset id and needs secp256k1 and msgpack linked in.

If what you want is a bot rather than a client, Passivbot and Hummingbot both trade Hyperliquid and both bring the scheduling, sizing and risk machinery this deliberately does not. The rest of the trading bots and execution SDKs listing sets out where the line falls.

Specs

Interfaces
Python
Export
JSON
Asset classes
Spot, Perpetuals
Chains
Venues
DEX, Derivatives
KYC required
No
Platforms
Library
AI features
None
Capabilities
Live trading, Paper trading, Derivatives analytics
Pricing verified
Capabilities verified
Coverage verified

Also worth comparing

  • ccapiHeader-only C++ market data and execution for 30 venues, on a Bloomberg-shaped API.
  • CCXTOne MIT client for 104 crypto exchanges, 76 of them over websocket.
  • CoinAPI EMS Trading APIOne order model over 26 exchange destinations, TWAP and VWAP, priced per account-hour.
  • dYdX v4 ClientsFour language clients for one perp DEX, under a licence that is not the one on the badge.
  • GoCryptoTraderA Go trading engine for 22 exchanges that has never cut a release or a tag.
  • HummingbotApache-2.0 Python framework for running market-making bots on CEXs and DEXs.

On these shelves

Background

How this part of the industry works, rather than which product to pick.

  • Who pays for your free trading botFree crypto bots and terminals are usually paid for by the venue. The five mechanisms, what each does to your order, and how to find them in ten minutes.

FAQ

Does using this SDK mean handing over my main private key?

It does not have to. Exchange.approve_agent() mints an agent key, and the repository's own example states that the agent has no permission to transfer or withdraw funds. You set the main wallet's public address as account_address and the agent's private key as secret_key, so the key on the trading box signs orders and nothing else.

Can I try it without real money?

Yes. constants.TESTNET_API_URL points at the testnet API and the examples use it by default; LOCAL_API_URL targets a node on localhost. No account application, no KYC step and no exchange-issued key are involved in either case.

Is this SDK still maintained?

The last commit on master is 4 June 2026 and version 0.24.0 went to PyPI the same day, so nothing has landed in the three and a half months to 19 September 2026. Releases before that came at roughly two-month intervals.

Does it handle rate limits or retries for me?

No. Every call is a requests POST with no retry and no client-side pacing, and the timeout defaults to None unless you pass one. Backoff, retry and a request budget are yours to write around it.