API reference · Bridges & wallets

Bridge movements

  • Elysium: HyperEVM ↔ Elysium movements with 24 h stats.
  • HyperCore: Matched HyperCore ↔ HyperEVM transfers with 24 h stats.
  • HyperEVM: HyperCore ↔ HyperEVM transfers (core_evm) or HyperEVM ↔ Elysium movements (evm_elysium), with 24 h stats.

GET https://api.femtos.xyz/v1/bridges

Parameters

ParamInExample or valuesMeaning
routequery(empty), evm_elysium, core_evm (Elysium, HyperCore); core_evm, evm_elysium (HyperEVM)Bridge
directionquery(empty), to_child, to_parent (Elysium); (empty), evm_to_core, core_to_evm (HyperCore); (empty), to_child, to_parent, evm_to_core, core_to_evm (HyperEVM)Direction
tokenquery(optional)Token address (`hype` for native HYPE)
accountquery(optional)Sender or recipient
systemquery(empty), exclude, include, onlyKinetiq system retryables (evm_elysium) (Elysium)
limitquery50Rows
includeSpamquery(empty), trueevm_elysium: rows of spam parent tokens (HyperEVM tokens.spam), left out by default (HyperEVM)

Example

Elysium

curl -H "Authorization: Bearer $FEMTOS_KEY" "https://api.femtos.xyz/v1/bridges?route=evm_elysium&limit=50"

HyperCore, HyperEVM

curl -H "Authorization: Bearer $FEMTOS_KEY" "https://api.femtos.xyz/v1/bridges?route=core_evm&limit=50"

Key: Authorization: Bearer $FEMTOS_KEY. Get a free key, or with no browser through agent onboarding.

Response fields

FieldTypeMeaning
rows[]objectNewest first, ≤ 7 days: CoreEvmTransfer (core_evm) or OrbitTransfer (evm_elysium): {status, direction, token, account, system_address, amount, core, evm, matched_by, bridge_latency_ms, depositor, beneficiary, …}
rows[].bridge_latency_msint | nullFirst leg -> credited on the other layer (ms)
statsobject24 h: {window, count, completed, pending, claimable, stuck, latencyMs:{p50,p99}, byDirection, byToken, otherTokens}; core_evm evm_to_core also counts forwarded (deposit wallets) and cctp; evm_elysium with system=exclude: system {count, completed, pending, claimable, stuck, byDirection}
systemexclude | include | onlyevm_elysium: the system mode applied to Kinetiq's system retryables (exclude: left out of rows, counted in stats.system) (Elysium)
tokensobjectevm_elysium: {<address>: {symbol, decimals, spam, spamReason}} (parent tokens flagged from HyperEVM) (Elysium, HyperEVM)
labels.<key>objectNames of known addresses the rows may carry: {<address>: name} (Circle CctpForwarder: the depositor of every CCTP mint, the real sender being origin.sender; evm_elysium adds Kinetiq's system senders and contracts)
billingheavyheavy
rows[].matched_bynonce | order | nullHow the two legs were paired: nonce = exact (coreReceiveWithData), order = same system address, account and amount in order; null while unmatched (HyperCore, HyperEVM)
rows[].final_latency_msint | nullevm_to_core: HyperEVM leg -> beneficiary credited on HyperCore (ms); null until then (HyperCore, HyperEVM)
rows[].forwardingobject | nullevm_to_core through a deposit wallet that forwards the deposit by CoreWriter sendAsset: {amount (token units sent on), dex (destination dex: 0 = main perp dex)}; null otherwise (HyperCore, HyperEVM)
rows[].beneficiarystring | nullWho is finally credited: `account`, except a deposit forwarded by a deposit wallet (Circle's CoreDepositWallet: its recipient); null for a CCTP withdrawal (core_to_evm coreReceiveWithData: the funds leave HyperEVM) or while not resolved (HyperCore, HyperEVM)
rows[].depositorstring | nullWho paid on the first layer: `account`, except through a deposit wallet (the sender of the underlying into the wallet); null while a deposit wallet leg is not resolved yet (HyperCore, HyperEVM)
rows[].originobject | nullCCTP mint: {domain (source chain, see cctpDomains), sender (burn sender: an address on EVM chains, 32 bytes otherwise)} (HyperCore, HyperEVM)
rows[].finalobject | nullevm_to_core: the HyperCore event crediting the beneficiary (the wallet's send for a forwarded deposit, the bridge credit otherwise): {block, event_idx, time, hash, kind, nonce} (HyperCore, HyperEVM)
cctpDomains.<key>objectcore_evm: CCTP source domains (Circle's numbering) -> chain name, for origin.domain; others read `domain <n>` (HyperCore, HyperEVM)
coverageFromobject | nullcore_evm: {evm_to_core, core_to_evm}: first block time (ms) each direction is scanned on HyperEVM; rows and stats start there (HyperEVM)
includeSpambooleanevm_elysium: rows of spam tokens shown (HyperEVM)
spamHiddenintevm_elysium: rows of spam tokens left out (HyperEVM)

Related: Bridges & wallets

  • Cross-layer wallet GET /v1/wallet/{address} Elysium, HyperCore, HyperEVM
    One address (or a named wallet's handle) on HyperCore, HyperEVM and Elysium, plus its latest events.
  • Wallet stream WS wallet Elysium, HyperCore, HyperEVM
    Every event of the three layers touching one address.
  • Swaps by wallet GET /v1/trades Elysium, HyperEVM
    Every swap a wallet sent (or a pool’s, a token’s), newest first, filterable by token, side, size and time.
  • Transfers by wallet GET /v1/transfers Elysium, HyperEVM
    ERC-20 transfers sent and received by a wallet, newest first, filterable by token, direction, size and time.
  • Ledger stream WS hc.ledger HyperCore
    Deposits, withdrawals, transfers and other non-trade balance moves.
  • Bridge stream WS elysium.bridge · bridge.transfers Elysium, HyperCore, HyperEVM
    Each HyperCore ↔ HyperEVM transfer, initiated then completed.
  • Bridge coverage GET /v1/bridges/coverage HyperCore, HyperEVM
    Every HyperCore ↔ HyperEVM leg since our data starts, paired with its other leg: matched share per direction and token, why the others are not, latency.

More

Agent guide (agents.md)llms.txtOpenAPIMCP serverGet an API keyChangelog