# 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.

Source: https://docs.layerhop.com/guides/discovery-tools

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](https://layerhop.com/status), [layerhop.com/radar](https://layerhop.com/radar), [layerhop.com/new-chains](https://layerhop.com/new-chains) and [app.layerhop.com/claims](https://app.layerhop.com/claims). Every figure built from LayerHop's own swaps carries its sample size.

## Is a bridge route working right now?

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

[`GET /v1/status/bridge`](/api-reference#get-bridge-route-status) 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](/guides/status-and-monitoring).

## Where is a token cheaper on another chain?

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

[`GET /v1/price-gaps`](/api-reference#cross-chain-price-gap-radar) 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?

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

[`GET /v1/chains/new`](/api-reference#new-chain-radar) 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](/guides/deep-links) and [Gas on arrival](/guides/gas-on-arrival).

## Does an address have unclaimed airdrops?

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

[`GET /v1/claims`](/api-reference#check-an-address-for-unclaimed-airdrops) 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`](/api-reference#airdrops-the-claims-checker-covers) 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.
