SOL to Hyperliquid: bridges you can call from code
How builders move value from Solana into Hyperliquid programmatically: Across Swap API (Solana + HyperCore/HyperEVM), deBridge DLN, Jupiter’s role on Solana, and the official deposit path. What to verify before you ship.
devrels.xyz/a/261short linkSOL to Hyperliquid: bridges you can call from code. The question keeps showing up in builder chats: is there a path from Solana into Hyperliquid that is not “open a website and click Deposit”? Yes — with caveats. This is the map of programmable options, what each actually settles, and how to verify before you hard-code a route.
What “to Hyperliquid” means
Hyperliquid is its own L1. Trading collateral and spot live on HyperCore; general EVM contracts live on HyperEVM. Official onboarding still talks about an EVM wallet and collateral (especially USDC), with additional asset onboarding paths that can start from Solana-native assets and end as tradeable balance on Hyperliquid.
For an integration, be explicit about the destination:
- HyperCore — core trading / spot balances (Across lists this as chain id
1337on the Swap API). - HyperEVM — EVM RPC surface (
999on Across; deBridge also lists HyperEVM).
If your product needs “user can trade perps after one signature flow,” you care about collateral ending in the right HL account model — not only that a token appeared on some related chain.
The short chooser
| Tool | Role for SOL → HL | Integrate via |
|---|---|---|
| Across | Cross-chain Swap API; Solana + HyperCore + HyperEVM on chain list; ~seconds fills | app.across.to/api · Bearer key + integrator id |
| deBridge (DLN) | Intent / solver network; Solana and HyperEVM in supported chains; 0-TVL order model | DLN HTTP API · widget · hooks |
| Jupiter | Best-in-class on Solana swap (e.g. SOL → USDC) before or after a bridge leg | Swap / Ultra APIs — not HL settlement alone |
| Official HL deposit | Canonical product path (addresses, supported assets, wallet types) | app.hyperliquid.xyz + HL docs — use as ground truth for “what counts as deposited” |
Community shorthand you will hear: “HL ↔ Across integration,” “just use Jupiter or deBridge.” Those are not contradictory — they point at different layers of the same journey.
Across: one Swap API surface
Across markets itself as fast cross-chain infra with a single Swap API. Production base URL: https://app.across.to/api. You request a route; the response is approval + swap transaction data to execute. Settlement path is chosen under the hood.
For builders, the useful fact is on chains: live Swap API chain lists include Solana, HyperCore, and HyperEVM alongside the usual EVM L2s. The public UI has also pushed Hyperliquid-oriented routes (e.g. bridge flows into HyperCore with stable assets) — treat the API chain/token endpoints as source of truth for what your key can quote today.
Shape of an integration:
- Get API key +
integratorIdfrom Across tooling docs. GET /swap/chainsandGET /swap/tokensfor the origin / destination you care about.GET /swap/approvalwith origin/destination chain ids, input/output mints or addresses, amount, depositor, trade type.- Execute returned approvals + swap tx (Solana vs EVM signing differs — use the chain’s native tx type from the response).
- Track deposit status endpoints until filled.
# Illustrative — pin chain IDs and token addresses from live /swap/* responses
curl -sG "https://app.across.to/api/swap/approval" \
-H "Authorization: Bearer $ACROSS_API_KEY" \
--data-urlencode "tradeType=exactInput" \
--data-urlencode "originChainId=SOLANA_CHAIN_ID_FROM_API" \
--data-urlencode "destinationChainId=1337" \
--data-urlencode "inputToken=..." \
--data-urlencode "outputToken=..." \
--data-urlencode "amount=..." \
--data-urlencode "depositor=..." \
--data-urlencode "integratorId=0x...."Docs note Solana-aware fee recipients (base58) when you charge appFee on Solana destinations — a sign the API is multi-VM, not EVM-only. Still: quote failures mean the route is off, not that your HTTP client is wrong. Log the API error body.
deBridge DLN: intents and solvers
deBridge positions DLN as a 0-TVL execution layer: orders lock input on source, solvers fill on destination, contracts act as pipes not pools. Same API family covers same-chain and cross-chain. Solana is a first-class chain in supported-chain info; HyperEVM appears as well.
Typical programmatic loop (names vary slightly by doc version — follow current quick start):
- Estimate / create order with src and dst chains + tokens + receiver.
- Receive a ready transaction (EVM calldata or Solana
VersionedTransaction). - Sign and submit quickly (quotes go stale).
- Track order status until fulfilled.
Hooks (post-fill calls) matter if you need “bridge then do X on destination.” For pure “get USDC-like collateral onto HL-adjacent rails,” start without hooks and add them when the product needs composition.
Where Jupiter fits
Jupiter is the default Solana liquidity brain. Use it when the user holds SOL (or a random SPL) and your bridge leg wants a canonical stable or a specific mint. Ultra / Swap APIs give you quote → sign → land on Solana.
Jupiter does not replace a Hyperliquid deposit bridge. The clean mental model is:
Solana wallet asset → (optional Jupiter) → bridge API → Hyperliquid balance model.
If someone in chat says “use Jupiter or deBridge,” they often mean “Jupiter for the Solana hop, deBridge (or Across) for the cross-chain hop.”
Official deposit path (do not skip)
Before you promise users “one click from Phantom to perps,” read Hyperliquid’s own onboarding. The product still centers an EVM-style account model and lists concrete deposit assets and networks. Native Solana asset onboarding may exist for specific tickers and still ends as HL trading balance after their conversion flow.
Your bridge integration should end in a state HL recognizes as funded — verified with a test size on mainnet, not only a successful origin tx hash.
Suggested build path
- Decide destination: HyperCore trading collateral vs HyperEVM contract balance.
- Pull live chain + token lists from Across and/or deBridge; dump them into your repo as a fixture you refresh in CI.
- Prototype the smallest quote: USDC-class on Solana → USDC-class on HyperCore (or whatever the API returns as supported).
- Add Jupiter only if users start from SOL or long-tail SPL.
- Build status UX (pending / filled / refund) — cross-chain support tickets are almost always “where is my money,” not “how do I sign.”
- Mainnet dust test with a burn-in checklist: amount out, receiver, time-to-fill, fee total.
Honest limits
- Route availability changes. Cache nothing as permanent except your error handling.
- “Hyperliquid” in a UI label might mean HyperCore, HyperEVM, or a partner front-end — check chain ids.
- Flatmate-built private integrations exist in the wild; unless they publish an API and SLA, they are not your production dependency.
- Compliance and geo restrictions on perps venues are product constraints, not bridge-API parameters.
People and links
| Project | Start here |
|---|---|
| Across | docs.across.to · Swap API |
| deBridge | docs.debridge.finance · DLN overview |
| Jupiter | dev.jup.ag |
| Hyperliquid | HL docs · onboarding / deposit |
Resources
Keep reading
Single integration for same-chain swaps, cross-chain bridges, intents, and DeFi deposits — li.quest API with SVM among supported chain types.
Define an intent; Relay solvers fill across 69+ chains — integrate via Quote, Execute, and Status.
Intent model on NEAR, 1click.chaindefuser.com tokens/quote/status, JWT fees, Solana assetIds, vs routers like LI.FI.
Get new articles in your inbox
Technical deep-dives on Solana tooling, infrastructure, and ecosystem. No noise.
