Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

HTTP Client

The SDK client provides typed access to all Hyperliquid HTTP endpoints.

Creating a Client

const Client = hlz.hypercore.client.Client;
 
// Mainnet
var client = Client.mainnet(allocator);
defer client.deinit();
 
// Testnet
var client = Client.testnet(allocator);
defer client.deinit();

Info Endpoints (No Auth)

All info endpoints are public. They return Parsed(T) — call .deinit() when done.

// All mid prices
var mids = try client.getAllMids(null);
defer mids.deinit();
 
// Market metadata + asset contexts
var meta = try client.getMetaAndAssetCtxs(null);
defer meta.deinit();
 
// Account state
var state = try client.getClearinghouseState(address, null);
defer state.deinit();
 
// Open orders
var orders = try client.getOpenOrders(address, null);
defer orders.deinit();
 
// User fills
var fills = try client.getUserFills(address, null);
defer fills.deinit();
 
// L2 order book
var book = try client.getL2Book("BTC", null);
defer book.deinit();
 
// Candle data
var candles = try client.getCandleSnapshot("BTC", "1h", null);
defer candles.deinit();

Full List of Info Methods

MethodReturnsDescription
getAllMidsRaw JSONAll mid prices (dynamic keys)
getMetaMetaMarket metadata
getMetaAndAssetCtxsMetaAndAssetCtxsMeta + live context
getClearinghouseStateClearinghouseStateAccount margin state
getOpenOrders[]OpenOrderUser's open orders
getUserFills[]FillUser's recent fills
getOrderStatusOrderStatusStatus by OID
getL2BookL2BookOrder book snapshot
getCandleSnapshot[]CandleOHLCV candles
getFundingHistory[]FundingEntryFunding rate history
getSpotMetaSpotMetaSpot market metadata
getSpotClearinghouseStateSpotClearinghouseStateSpot balances
getPerpDexs[]PerpDexHIP-3 DEX list
getUserFeesUserFeesFee rates
getReferralReferralReferral info
getSubAccounts[]SubAccountSub-accounts
getPerpsAtOpenInterestRaw JSONOI data

Exchange Endpoints (Signed)

Exchange endpoints require a Signer and produce EIP-712 signatures.

const signer = try Signer.fromHex("your_key");
const nonce = @as(u64, @intCast(std.time.milliTimestamp()));
 
// Place order
var result = try client.place(signer, batch_order, nonce, null, null);
defer result.deinit();
 
// Cancel by OID
var result = try client.cancel(signer, cancel_request, nonce, null, null);
defer result.deinit();
 
// Cancel by CLOID
var result = try client.cancelByCloid(signer, cancel_request, nonce, null, null);
defer result.deinit();
 
// Modify order
var result = try client.modify(signer, modify_request, nonce, null, null);
defer result.deinit();
 
// Set leverage
var result = try client.updateLeverage(signer, asset, leverage, nonce, null, null);
defer result.deinit();
 
// Send USDC
var result = try client.usdSend(signer, send_request, nonce);
defer result.deinit();

Full List of Exchange Methods

MethodDescription
placePlace order(s)
cancelCancel by OID
cancelByCloidCancel by client order ID
modifyModify existing order
scheduleCancelSchedule future cancellation
updateLeverageSet leverage
updateIsolatedMarginAdjust isolated margin
sendUsdcSend USDC to address
spotSendSend spot tokens
sendAssetSend between contexts/dexes
withdrawBridge withdrawal
usdClassTransferMove USDC between spot ↔ perp
approveAgentApprove API wallet
approveBuilderFeeApprove builder fee rate
tokenDelegateStake/unstake to validator
vaultTransferDeposit/withdraw from vault
createSubAccountCreate sub-account
subAccountTransferTransfer USDC to/from sub-account
subAccountSpotTransferTransfer spot to/from sub-account
twapOrderPlace TWAP order
twapCancelCancel TWAP order
convertToMultisigConvert to multi-sig account
userDexAbstractionEnable/disable DEX abstraction
userSetAbstractionSet abstraction mode
spotDeployRegisterTokenRegister new spot token
spotDeployGenesisInitialize token genesis
spotDeployUserGenesisDistribute tokens to users
spotDeployRegisterSpotRegister spot trading pair
spotDeployRegisterHyperliquidityRegister hyperliquidity
spotDeployFreezeUserFreeze/unfreeze user for token
spotDeployTokenActionGeneric token action (enable/disable)
perpDeployRegisterAssetRegister perp asset
perpDeploySetOracleSet oracle prices
cValidatorRegisterRegister validator
cValidatorChangeProfileUpdate validator profile
cValidatorUnregisterUnregister validator
cSignerJailSelfJail validator signer
cSignerUnjailSelfUnjail validator signer

Raw vs Typed

For --json passthrough, use raw methods. For typed access, use get* methods:

// Typed (returns parsed struct)
var typed = try client.getClearinghouseState(addr, null);
defer typed.deinit();
// typed.value.marginSummary.accountValue...
 
// Raw (returns HTTP body as string)
var raw = try client.clearinghouseState(addr, null);
defer raw.deinit();
// raw.body is the JSON string

Rule: Never fetch both. Branch on output format early.