Accounts, deposits and your first trade
Trading on Hyperliquid needs an EVM address, a deposit that lands on HyperCore and one gas-free signature; then every order is an on-chain transaction.
There’s no sign-up form: your EVM address becomes a HyperCore account when value first arrives. Until then, actions return “Must deposit before performing actions”.
Only the deposit costs gas. It moves money onto HyperCore for the clearinghouse to count as margin; orders, cancels and fills then pay the trading fee.
Six steps to your first order
Section titled “Six steps to your first order”- Address. An EVM wallet, or an email login that creates one (key exportable from settings). Whoever holds the key or seed phrase holds the funds.
- Deposit.
| You hold | Send it to | It arrives as |
|---|---|---|
| USDC on Arbitrum, wallet connected | The Deposit button, confirmed in your wallet (needs ETH on Arbitrum for gas) | USDC on HyperCore |
| USDC on Arbitrum, Ethereum, Base or Polygon, email login | The deposit address the app shows | USDC on HyperCore |
| BTC, ETH, ENA, SOL, MON, XPL, AVAX and a few other native assets | A network-specific address run by a third-party bridge | A spot token, to be sold for USDC or another quote asset |
| USDC on another chain, or on an exchange | A CCTP transfer, or an exchange that withdraws to Hyperliquid directly | USDC on HyperCore, or on the HyperEVM if that is where the exchange sends it |
- Activation. The first transfer to a new HyperCore account costs 1 quote token (such as 1 USDC), whatever is sent. On testnet it sat on the sender’s ledger entry: 1.0 USDC on the first send to a fresh address, 0.0 on the second.
- Enable trading. Browser wallets refuse chain id 1337, which orders are signed for, so one gas-free signature approves an API wallet that trades but cannot withdraw.
- Account mode. The docs recommend unified (one balance per asset for spot and perps) for most users; standard keeps them apart (account modes).
- Place a limit order. Set perp leverage per asset first (a whole number, 1 to the maximum); cross margin unless you pick isolated (margin). With the best ask at 100, a buy at 99 rests; at 100 or above it fills at once.
The numbers
Section titled “The numbers”| Item | Value |
|---|---|
| USDC deposit from a connected wallet | Arbitrum only; below 5 USDC the deposit is lost |
| USDC deposit with email login | Below 5 USDC not credited and returned to the email wallet; below 1 USDC lost |
| BTC deposit minimum and time | 0.0003 BTC; about 30 minutes |
| ETH and ENA deposit minimums and time | 0.007 ETH, 120 ENA; about 5 minutes |
| SOL deposit minimum and time | 0.12 SOL; about 1 minute |
| AVAX, MON, XPL deposit minimums | 1.5 AVAX, 450 MON, 60 XPL; about 1 minute each |
| Activation fee | 1 quote token, once per new HyperCore account |
| Minimum order value | $10 on perps; 10 units of the quote token on spot |
| Price format | at most 5 significant figures; integer prices always allowed |
| Action expiry in the app | 15 seconds, unless the protection is switched off |
| Testnet faucet | 1,000 mock USDC; needs a prior mainnet deposit from the same address |
What to check after you deposit
Section titled “What to check after you deposit”- Available Balance below the deposit: cross positions with negative unrealised PnL took the new margin first. Total balance is intact.
- A non-USDC deposit is a spot token, and backs no perp until sold unless your account mode counts it as collateral.
- On testnet an email login has a different address: export the key and connect it as a wallet.
- Keep transaction delay protection on. Without it a stuck order can land late, and repeated clicks become repeated orders: a sell to close a long can open a short.
Reading your fills from code
Section titled “Reading your fills from code”Query userFills with the trading account’s address; an API wallet’s address returns nothing.
{ "type": "userFills", "user": "0x0000000000000000000000000000000000000000" }| Field | Meaning |
|---|---|
coin |
Market name: BTC for a perp, @107 for a spot pair, dex:COIN for a HIP-3 perp |
px, sz |
Fill price and size, as decimal strings |
side |
B for a buy, A for a sell |
dir |
For example Open Long on a perp, Sell on spot |
startPosition |
Position or balance before this fill |
crossed |
true when this order took liquidity; the fee schedule calls taker rates cross and maker rates add |
fee, feeToken |
Fee charged, including any builderFee, and the token it was charged in |
closedPnl |
Realised PnL on a closing fill (entry price and PnL) |
oid, tid, hash, time |
Order id, trade id, transaction hash, time in milliseconds |
- Each match gives two rows, one per side, same notional. Deduplicate on
tid; partial fills of one transaction sharehash. - At most 2,000 rows per call; page older history by time.
- The order response is
{"resting":{"oid":...}}or, if filled on arrival,{"filled":{"totalSz":...,"avgPx":...,"oid":...}}(orders).
Wrong deposits, renamed tokens and expired actions
Section titled “Wrong deposits, renamed tokens and expired actions”- Email login: a wrong asset sent to the USDC deposit address returns to the email wallet in about 10 minutes.
- App names differ:
BTC/USDCisUBTC/USDCon HyperCore. - “Action already expired”: the 15-second window passed and the action was dropped on purpose.
For what your order does on the book, see Order types. For what the fill cost, see Fees.