LayerHopDocsLaunch app (opens in a new tab)

Deposit to Hyperliquid

Fund a Hyperliquid perps account from any supported chain, with a swap your user signs or with a deposit address. USDC (perps) arrives on Hyperliquid through Relay.

To deposit to Hyperliquid from any chain, quote with dstChain=hyperliquid and dstToken=USDC: LayerHop routes the swap through Relay, and the funds arrive as USDC in the recipient's Hyperliquid perps balance, ready to trade. Your user pays with any token Relay routes on an EVM chain (ETH on Ethereum, USDC on Base or Arbitrum…), either by signing one transaction or by sending to a deposit address.

What is the Hyperliquid chain in LayerHop?#

Chain hyperliquid, id 1337 (HyperCore, the exchange itself; not HyperEVM 999)
Addresses 0x… EVM-style addresses. The recipient is the user's Hyperliquid account, usually their EVM wallet address.
Token USDC (perps balance), 8 decimals. It is the chain's native coin in LayerHop, so dstToken=USDC and 0x0000000000000000000000000000000000000000 both select it. Relay's own address, 0x00000000000000000000000000000000, is accepted too.
Direction Destination only. Withdrawals from Hyperliquid need actions signed on Hyperliquid, which LayerHop doesn't build; srcChain=hyperliquid returns UNSUPPORTED_CHAIN. GET /v1/chains marks it destinationOnly: true.
Provider Relay

Mind the decimals: USDC is 6 decimals on most EVM chains but 8 on Hyperliquid perps. dstAmount "1993799700" means 19.937997 USDC.

Deposit with a swap#

Terminal
curl "https://api.layerhop.com/v1/quote?srcChain=base&srcToken=USDC&amount=20000000\
&dstChain=hyperliquid&dstToken=USDC&sender=0xUser&recipient=0xUser"
TypeScript
const { best } = await lh.quote({
  srcChain: "base", srcToken: "USDC", amount: "20000000",  // 20 USDC (6 decimals)
  dstChain: "hyperliquid", dstToken: "USDC",
  sender: address, recipient: address,                    // the user's Hyperliquid account
});
// best.dstAmount ≈ "1993799700" → 19.937997 USDC (8 decimals) in the perps balance
const tx = await lh.buildTx(best.quoteId);                // approval (if any) + deposit on Base

The user signs on the source chain only; Relay delivers to Hyperliquid in seconds. Track it like any other order (order tracking). The destination transaction hash links to the Hyperliquid explorer.

Deposit with a deposit address#

For a "deposit from any chain" button without wallet signing in your app, create a deposit address with Hyperliquid as the destination:

Terminal
curl -X POST https://api.layerhop.com/v1/deposit-addresses \
  -H "x-api-key: $LAYERHOP_API_KEY" -H "content-type: application/json" \
  -d '{
    "srcChain": "arbitrum", "srcToken": "USDC",
    "dstChain": "hyperliquid", "dstToken": "USDC",
    "recipient": "0xUserHyperliquidAccount",
    "refundTo": "0xUserAddressOnArbitrum"
  }'

Every deposit of USDC on Arbitrum to the returned address lands in the user's perps balance, with the usual order webhooks.

Minimums and limits#

  • No 5 USDC bridge minimum. Hyperliquid's own Arbitrum bridge needs at least 5 USDC; deposits through Relay don't use it. Relay quoted deposits well below $1 in our tests, but fees make tiny deposits poor value, so suggest $5 or more.
  • Deposit addresses need at least $1 of value per deposit, like every route.
  • Too small an amount returns AMOUNT_TOO_SMALL; retry with more.
  • Gas on arrival doesn't apply: trading on Hyperliquid needs no gas token.
  • Only the perps USDC balance is a destination today, not spot tokens or HyperEVM (999 is a separate, regular EVM chain).

Last updated