LayerHopDocsLaunch app (opens in a new tab)

Bridge status, price gaps, new chains and airdrop checks

Public read-only data for apps and agents - live bridge route status, a cross-chain price gap radar with real quotes, newly bridgeable chains and an unclaimed airdrop checker.

Four public endpoints, no key needed, all read-only: bridge route status per chain and route pair, a price gap radar for tokens that trade on several chains, a new chain radar for networks that just became bridgeable, and an unclaimed airdrop checker. They power layerhop.com/status, layerhop.com/radar, layerhop.com/new-chains and app.layerhop.com/claims. Every figure built from LayerHop's own swaps carries its sample size.

Is a bridge route working right now?#

Terminal
curl "https://api.layerhop.com/v1/status/bridge"

GET /v1/status/bridge returns, cached for a minute:

  • status and title: an overall banner. degraded when a main chain (Ethereum, Base, Arbitrum, Solana, BNB Chain, OP Mainnet, Polygon, Avalanche…) has a failing direction or a provider is down, outage when half the main chains fail, unknown when the route checks are stale.
  • chains[]: per chain, in and out (ok, failing, unknown) from route health, the small read-only probe quotes LayerHop runs every few hours. A direction turns failing only after two failed checks in a row.
  • pairs[]: the main route pairs in both directions. A pair is ok when the source's routes out and the destination's routes in both work. This is derived from the per-chain checks (which run against Base USDC), not probed per pair.
  • fills: success rate (filled / n) and median and p90 time to fill over the last 7 days of live LayerHop swaps. Time to fill runs from building the transaction to the fill, so it includes the time a user took to sign. Under smallSample (20) swaps, treat a figure as anecdotal.
  • providers[]: each route provider's monitor state and its fills.
  • incidents[]: route incidents of the last 14 days, each a direction that turned failing (startedAt) and, once it worked again, resolvedAt.

For quote-time warnings, GET /v1/chains already carries routeHealth per chain; see Status and monitoring.

Where is a token cheaper on another chain?#

Terminal
curl "https://api.layerhop.com/v1/price-gaps"

GET /v1/price-gaps lists tokens that trade on several chains with their price on each: LayerHop's canonical groups (ETH/WETH, USDC, USDT, DAI, WBTC, cbBTC) plus a top set of multi-chain tokens (LINK, UNI, AAVE, PEPE, ENA and others) found on the provider token lists. Each price is the chain's most liquid DexScreener pool; pools under minLiquidityUsd ($100,000) are left out.

For the top three gaps, net[] holds a real LayerHop quote from the cheap chain to the dear one for $100 and $1,000. netGapPct is what that quote delivers, valued at the destination price, minus what you put in: our fee and the route's costs are included, selling on the destination chain is not. Most gaps are smaller than the cost of moving, and the radar shows that honestly. Gaps above 25% are flagged suspect (usually two different tokens sharing a symbol) and never quoted.

The radar refreshes at most every 5 minutes, only when someone asks, and spends at most 72 quotes an hour. When that budget is used up a size reports quoteErrors: [{ code: "BUDGET" }].

Which chains just became bridgeable?#

Terminal
curl "https://api.layerhop.com/v1/chains/new?days=30"

GET /v1/chains/new lists chains that joined LayerHop's live chain registry in the last 30 or 90 days (newChain: true), and chains a provider just started routing (newChain: false, with that provider marked new). LayerHop records which chains each provider's live list includes every half hour; trackingSince is the first record, and chains listed then never count as new.

Each entry has the gas token (nativeSymbol), route health in and out (null until the first check, which can take a few hours), firstRoutes (when routes in and out first worked) and a timeline of route health changes. To send a user there with gas, open a swap link with gasOnArrival=1:

Text
https://app.layerhop.com/swap?srcChain=base&srcToken=USDC&dstChain=<slug>&dstToken=<gas token>&gasOnArrival=1

See Deep links and Gas on arrival.

Does an address have unclaimed airdrops?#

Terminal
curl "https://api.layerhop.com/v1/claims?address=0x98aE0E5D4977Fa1231d4B7AfA97881BF7ABbfCc4"

GET /v1/claims checks one EVM address against a curated set of airdrops, read-only, from their official claim contracts and the official public data. GET /v1/claims/airdrops lists them:

Airdrop Read on Status What the check tells
Uniswap UNI (2020) Ethereum, MerkleDistributor isClaimed(index) + Uniswap's published Merkle data still claimable allocation and whether it was claimed
Merkl rewards Merkl's public API + claimed(user, token) on its distributor (Ethereum, Base, Arbitrum, OP Mainnet, Polygon) ongoing earned minus claimed, per token (unpriced points tokens and dust left out)
Linea LINEA Linea, calculateAllocation + hasClaimed ended 9 Dec 2025 allocation, claimed or missed
LayerZero ZRO Arbitrum, zroClaimed ended Sep 2024 only what was claimed (no public allocation data)

Each result has a state: claimable, claimed, missed (eligible, never claimed, the window has closed), not_eligible or unknown. Amounts are in base units with the token's decimals. One airdrop failing comes back as unknown with error: true; the others still answer. Checks are limited to 6 per minute per IP and cached for 10 minutes.

LayerHop never builds claim transactions for third-party airdrops. Send users to the official claim site in claimUrl, and warn them: look-alike claim sites are one of the most common wallet drainers.

What isn't covered?#

Airdrops that check eligibility only after a wallet sign-in or a captcha, or that publish no per-address data, can't be checked read-only, which rules out most 2025 and 2026 drops. ZKsync's 2024 airdrop publishes its allocations only as a large file and is not covered yet.

Last updated