Yes, through the public API
Yes: Hyperliquid publishes its whole trading interface as a public HTTP API, the same one the web interface uses. Reads need no key, writes need a signed action, and an account can approve an API wallet to sign them instead of its own key.
| What it is for | Where |
|---|---|
| Reads: mid prices, the L2 book, candles, funding history, an account's state. No key, no signature. | POST https://api.hyperliquid.xyz/info |
Writes: order, cancel, modify, updateLeverage, approveAgent, withdraw3 and the rest, each signed. | POST https://api.hyperliquid.xyz/exchange |
Live streams (allMids, l2Book, trades, candle, userFills), and an alternative to sending over HTTP. | wss://api.hyperliquid.xyz/ws |
| The same three paths on the test venue. | api.hyperliquid-testnet.xyz |
Three addresses matter, below, and every figure on this page is the documentation's of 5 October 2026.
The SDKs the docs list
You do not have to assemble signed actions by hand. The docs name an official Python SDK, hyperliquid-dex/hyperliquid-python-sdk, a community Rust SDK, two community TypeScript SDKs (nktkas/hyperliquid and nomeida/hyperliquid), and CCXT.
Signing is the part worth borrowing rather than rewriting. An action is serialized and signed in an exact shape, and a shape wrong by one field is refused: the order never reaches the book.
API wallets and nonces
A master account can approve API wallets to sign on behalf of the master account or any of its sub-accounts. They sign only: to query an account's data you must pass in the actual address of that account, and using the agent wallet gives an empty result.
Nonces are stricter than they look. Hyperliquid stores the 100 highest nonces per address, and a new action needs a nonce larger than the smallest of that set, never used before, and inside a window of (T minus 2 days, T plus 1 day), where T is the block's unix millisecond timestamp.
An API wallet is pruned when a new unnamed wallet is registered, when a new named wallet takes an existing name, when it expires, or when the account that registered it no longer has funds. The docs warn that a deregistered agent may have its nonce state pruned, so previously signed actions can be replayed: generate a new agent wallet rather than revive an old one.
The rate limits, as documented
- Per IP. REST requests share an aggregated weight limit of 1200 per minute. An exchange action weighs
1 + floor(batch_length / 40), so a batch is nearly free; most info requests weigh 20, a handful weigh 2, anduserRoleweighs 60. - Per address. 1 request per 1 USDC traded cumulatively, after an initial buffer of 10000 requests, then one request every 10 seconds. Cancels get a wider allowance.
- Websocket. At most 10 connections, 30 new connections a minute, 1000 subscriptions, 2000 messages sent a minute and 100 simultaneous inflight post messages.
- Open orders. A default limit of 1000, plus one more for every 5M USDC of volume, capped at a total of 5000.
The per-address limit surprises a new program: its allowance is earned by trading, and a loop that retries blindly spends it on nothing.
A script, a bot, an assistant
| What it is | What decides | What it needs from you |
|---|---|---|
| A script | You did, when you wrote it. It runs a sequence and chooses nothing. | To read it before running it. Its limits are the lines you typed. |
| A bot | A rule you wrote, whenever its conditions are met, unwatched. | Limits outside the rule, and a way to stop it in one command. |
| An assistant (an AI agent) | A model proposes; code checks the proposal against figures. | Bounds it cannot widen, and a key that cannot withdraw. |
The API cannot tell which of the three is calling, and applies the same rules to all three. They differ in where the decision is made and in what happens when it is wrong: a script that is wrong is wrong once, a bot all night.
Locker Protocol Agentic is the third kind: lpa for a person or an AI agent, an MCP server with the same commands as tools, a local policy checked twice before any order, and a mandate signed by your own wallet. It promises no result.