Skip to content
elysa
Elysa API

Build on Elysium with Elysa's own nodes

A private RPC, live WebSockets and our indexed market data, on servers of their own in Singapore, Europe and the US. Yours while your wallet holds 500,000 ELYSA.

  • Every method
  • No eth_getLogs cap
  • Capacity of its own
EndpointsJSON-RPC 2.0

Pick the region nearest your bot. Every key works on all of them.

HTTPShttps://rpc.elysa.trade/<key>
WSSwss://rpc.elysa.trade/<key>
DATAhttps://rpc.elysa.trade/<key>/v1
Chain ID
99901
Region
Singapore
Batch
100 calls
WebSockets
50 per key

Private RPC

Every eth, net, web3 and arb method, plus tracing. eth_getLogs over the whole chain in one call, on capacity of its own.

Live WebSockets

Subscribe to new blocks and logs the moment they land. Up to 50 sockets per key.

Sending

Send now from every region through HyperEVM's Inbox.

Direct sends open with Elysium's public launch on Nov 9

Indexed data

Pairs, trades, holders and candles: the data Elysa runs on, as clean JSON.

Your API key

  1. 1Pick a wallet that holds ELYSA
  2. 2Sign once to prove it's yours
  3. 3Create your key

Signing proves you own the wallet. It can't move funds, and nothing is sent from your wallet.

Quickstart

Paste your key where it says <key>, then copy and run.

Plain JSON-RPC over HTTPS: single calls or batches of up to 100.

cURL
curl -s https://rpc.elysa.trade/<key> \  -H 'content-type: application/json' \  -d '{"jsonrpc":"2.0","id":1,"method":"eth_blockNumber","params":[]}'# every log of a token, the whole chain in one callcurl -s https://rpc.elysa.trade/<key> \  -H 'content-type: application/json' \  -d '{"jsonrpc":"2.0","id":2,"method":"eth_getLogs",       "params":[{"fromBlock":"0x0","toBlock":"latest","address":"0xcac5b6e74eb7383af0a6dc344d996e225bbf9a17"}]}'

Reference

Everything a key gets, at a glance.

JSON-RPC methods

Every method of these namespaces the node serves:

eth_*net_*web3_*arb_*

Tracing and raw data:

debug_traceTransactiondebug_traceCalldebug_traceBlockByNumberdebug_traceBlockByHashdebug_getRawBlockdebug_getRawHeaderdebug_getRawReceiptsdebug_getRawTransaction

Live over the WebSocket:

eth_subscribe newHeadseth_subscribe logseth_unsubscribe

Sending: through HyperEVM's Inbox now, directly from Elysium's public launch on Nov 9:

eth_sendRawTransactioneth_sendRawTransactionConditional

Limits per key

Calls per second
1,000 sustained, bursts to 10,000
Batch size
Up to 100 calls
WebSockets
50 open at once per key
Heavy calls
8 at once per key (logs, receipts, simulations, traces)
Call timeout
60 seconds
eth_getLogs range
The whole chain in one call
Request body
Up to 2 MB

Data API

Under /v1, the same query parameters and JSON as Elysa's own API.

Data API reference

Every route's parameters and answer, field by field. Amounts are decimal strings, times are Unix milliseconds.

GET /v1/pairsEvery pair, newest, trending or deepest first
https://rpc.elysa.trade/<key>/v1/pairs

Parameters

  • sortnew | trending | liquidity · default newNewest, trending or deepest first
  • limit1–100 · default 50How many to return
  • beforemsOnly pairs created before this time
  • cursorstringThe nextCursor of the previous page
  • venueaddressOnly this venue's pairs
  • protocolv2 | v3 | v4Only this pool type
  • quoteaddressOnly pairs quoted in this token
  • minLiquidityUsdnumberOnly pairs with at least this much liquidity, USD

Answer

  • pairsPairCard[]The pairs
  • nextCursorstring | nullPass it as cursor for the next page; null at the end

Types it uses:PairCardTokenPoolTaxPulseInfoLaunchpadRef

GET /v1/pulsePulse's columns: new pairs, final stretch, migrated
https://rpc.elysa.trade/<key>/v1/pulse

Parameters

  • stagenew | stretch | migratedThe Pulse column (required)
  • limit1–200 · default 100How many to return

Answer

  • stagestringThe column asked for
  • pairsPairCard[]One card per token, its main pool

Types it uses:PairCardTokenPoolTaxPulseInfoLaunchpadRef

GET /v1/discoverTokens trending by volume, from 1 minute to 24 hours
https://rpc.elysa.trade/<key>/v1/discover

Parameters

  • window1m | 5m | 30m | 1h | 24h · default 30mThe window volume is ranked over
  • limit1–100 · default 50How many to return

Answer

  • windowstringThe window asked for
  • asOfnumberWhen these figures were computed (ms)
  • pairsDiscoverPair[]Tokens by volume in the window, most first

Types it uses:DiscoverPairPairCardTokenPoolTaxPulseInfoLaunchpadRef

GET /v1/pairs/:idOne pair with its live figures
https://rpc.elysa.trade/<key>/v1/pairs/:id

Parameters

No parameters.

Answer

  • pairPairDetailThe pair with the pair page's figures
  • venueVenueThe venue the pool is on

Types it uses:PairDetailPairCardTokenPoolTaxPulseInfoLaunchpadRefPeriodsVenueRouterInfo

GET /v1/pairs/:id/tradesA pair's trades, newest first, with filters
https://rpc.elysa.trade/<key>/v1/pairs/:id/trades

Parameters

  • limit1–500 · default 100How many to return
  • beforemsOnly trades before this time
  • cursorstringThe nextCursor of the previous page (pass the same filters with it)
  • traderaddressOnly this wallet's trades
  • sidebuy | sellOnly buys or only sells
  • minUsdnumberOnly trades worth at least this, USD
  • orderdesc | asc · default descasc starts at the pair's first trade

Answer

  • tradesTrade[]The trades
  • nextCursorstring | nullPass it as cursor for the next page; null at the end

Types it uses:Trade

GET /v1/pairs/:id/candlesOHLC candles, by window or by count
https://rpc.elysa.trade/<key>/v1/pairs/:id/candles

Parameters

  • interval1s | 15s | 1m | 5m | 15m | 1h | 4h | 1d · default 1mThe candle size
  • frommsA window's start (not with limit)
  • tomsA window's end, or where a page by count ends (default: now)
  • fill0 | 1 · default 1Windows only: fill quiet buckets with the last close
  • limit1–5000By count: the last buckets with trades before to, never filled

Answer

  • candlesCandle[]Oldest first, USD prices
  • nextnumber | nullBy count only: the to of the older page; null when nothing trades before it

Types it uses:Candle

GET /v1/pairs/:id/top-tradersTop traders by PnL or volume
https://rpc.elysa.trade/<key>/v1/pairs/:id/top-traders

Parameters

  • limit1–100 · default 50How many to return
  • sortpnl | realized | volume | bought | sold | remaining · default pnlWhat ranks them

Answer

  • tradersTopTrader[]The traders
  • asOfnumberWhen these figures were computed (ms)

Types it uses:TopTraderWalletFunding

GET /v1/pairs/:id/routeThe pools a HYPE trade of the pair crosses
https://rpc.elysa.trade/<key>/v1/pairs/:id/route

Parameters

  • sidebuy | sellThe trade's direction (required)

Answer

The whole answer is one PairRoute.

404 no_route when no route within three pools exists

Types it uses:PairRouteRouteHop

GET /v1/pairs/:id/holder-statsInsiders, fresh wallets, pro traders, LP burned
https://rpc.elysa.trade/<key>/v1/pairs/:id/holder-stats

Parameters

No parameters.

Answer

The whole answer is one PairHolderStats.

Types it uses:PairHolderStats

GET /v1/tokens/:addressA token and every pool it trades in
https://rpc.elysa.trade/<key>/v1/tokens/:address

Parameters

No parameters.

Answer

  • tokenTokenThe token
  • pairsPairCard[]Its own pools, best first, then the pools quoted in it; at most 100

Types it uses:TokenPairCardPoolTaxPulseInfoLaunchpadRef

GET /v1/tokens/:address/holdersHolders with balances and tags
https://rpc.elysa.trade/<key>/v1/tokens/:address/holders

Parameters

  • limit1–500 · default 100How many to return

Answer

  • holdersHolder[]The largest holders first
  • holderCountnumber | nullAddresses with a positive balance
  • asOfnumberWhen these figures were computed (ms)
  • completebooleanFalse while the token's holder index is still filling: the figures are then partial

Types it uses:Holder

GET /v1/tokens/:address/creator-tokensEvery token its creator launched
https://rpc.elysa.trade/<key>/v1/tokens/:address/creator-tokens

Parameters

No parameters.

Answer

  • creatorstring | nullWho created the token's first pool
  • tokensCreatorToken[]Every token that address launched, newest first; at most 100

Types it uses:CreatorToken

GET /v1/tokens/:address/bubble-mapHow the top holders are connected
https://rpc.elysa.trade/<key>/v1/tokens/:address/bubble-map

Parameters

  • limit1–300 · default 150How many to return

Answer

The whole answer is one BubbleMap.

Types it uses:BubbleMapHolderBubbleFunderBubbleLink

GET /v1/venuesEvery venue and launchpad we index
https://rpc.elysa.trade/<key>/v1/venues

Parameters

No parameters.

Answer

  • venuesVenue[]Every venue we index

Types it uses:VenueRouterInfo

Types

PairCardOne pool, as every list shows it
  • idstringThe pair's id (a v2/v3 pool address, or a v4 pool id)
  • protocolv2 | v3 | v4The pool type
  • venue{ id, address, name, universalRouter, v2FeeBps }The venue (factory or PoolManager); id joins /venues
  • poolAddressstringThe pool's address (v4: the PoolManager)
  • feenumber | nullv3/v4 fee in hundredths of a basis point
  • tickSpacingnumber | nullv3/v4 tick spacing
  • hooksstring | nullv4 hook address
  • tokenTokenThe token side
  • quote{ address, symbol, decimals }What it is priced in (HYPE, a stablecoin…)
  • exoticbooleanQuoted in something other than HYPE or a stablecoin
  • createdAtnumberUnix time in milliseconds
  • createdBlocknumberThe block the pool was created in
  • createdTxstringThe transaction that created the pool
  • creatorstring | nullWho created the pool
  • priceQuotestring | nullPrice of one token in the quote
  • priceUsdstring | nullPrice of one token in USD
  • mcapUsdstring | nullMarket cap, USD
  • liquidityUsdstring | nullLiquidity in the pool, USD
  • volume5mstringUSD volume over the last 5 minutes
  • volume1hstringUSD volume over the last hour
  • volume24hstringUSD volume over the last 24 hours
  • txns5m{ buys, sells }Swaps over the last 5 minutes
  • txns1h{ buys, sells }Swaps over the last hour
  • txns24h{ buys, sells }Swaps over the last 24 hours
  • lastTradeAtnumber | nullUnix time in milliseconds
  • netBuy5mstringBuy minus sell volume over 5 minutes, USD (negative when sells lead)
  • holdersnumber | nullAddresses with a positive balance
  • top10Pctnumber | null% of supply the 10 largest holders hold (pools and burn excluded)
  • creatorHoldingPctnumber | null% of supply the creator holds
  • snipersPctnumber | null% of supply snipers hold now
  • bundlersPctnumber | null% of supply bundlers hold now
  • creatorTokensnumber | nullTokens the creator has launched, this one included
  • taxPoolTax | nullWhat a trade pays the pool
  • pulsePulseInfo | nullThe token's Pulse stage
  • launchpadLaunchpadRef | nullThe launchpad that made the pool
TokenThe same token object everywhere
  • addressstringLowercase address
  • namestring | nullThe token's name
  • symbolstring | nullThe ticker
  • decimalsnumber | nullERC-20 decimals
  • totalSupplystring | nullBase units, as a decimal string
  • imagestring | nullOur copy of the logo (add ?s=64 or ?s=128 for smaller)
  • descriptionstring | nullPlain text, at most 2,000 characters
  • links{ website?, x?, telegram?, discord? } | nullValidated https links
  • metadataSourcestring | nullWhere the metadata came from
PoolTaxWhat a trade pays the pool
  • buyPctnumber% of a buy the pool takes: LP fee plus hook cut
  • sellPctnumber% of a sell the pool takes
  • feePctnumberThe LP fee part, %
  • sourcestring | nullWhose hook or token sets the rest; null when the LP fee is all of it
PulseInfoThe token's Pulse stage
  • stagenew | stretch | migratedThe column it is in
  • mainbooleanThis pool is the one Pulse shows for the token
  • sincenumberWhen it entered this stage (ms)
  • migratedAtnumber | nullWhen it first reached the migration market cap (ms)
LaunchpadRefThe launchpad that made the pool
  • idstringThe registry's id
  • namestringThe launchpad's own name
DiscoverPairA card plus its figures over the Discover windowEvery field of PairCard, plus:
  • discover.windowstringThe window
  • discover.volumeUsdstringUSD volume of the token in the window
  • discover.buysnumberBuys in the window
  • discover.sellsnumberSells in the window
  • discover.changePctnumber | nullUSD price change over the window, %
  • discover.spark(string | null)[]25 USD prices across the window, for a sparkline
PairDetailA card plus the pair page's figuresEvery field of PairCard, plus:
  • totalSupplystring | nullBase units, re-read from the chain
  • decimalsnumber | nullERC-20 decimals
  • marketCapUsdstring | nullMarket cap, USD
  • fdvUsdstring | nullFully diluted value, USD
  • priceHypestring | nullPrice of one token in HYPE
  • changePeriods<number | null>USD price change, %
  • volumeUsdPeriods<string>USD volume
  • buysPeriods<number>Buys
  • sellsPeriods<number>Sells
  • makers24hnumberDistinct traders in the last 24 hours
  • creatorstring | nullWho created the pool
PeriodsOne figure per period
  • m5TLast 5 minutes
  • h1TLast hour
  • h6TLast 6 hours
  • h24TLast 24 hours
TradeOne swap
  • pairIdstringThe pair's id (a v2/v3 pool address, or a v4 pool id)
  • tsnumberUnix time in milliseconds
  • blocknumberBlock number
  • txHashstringTransaction hash
  • logIndexnumberThe swap's log index in its block
  • sidebuy | sellBuy or sell of the token
  • traderstringWho traded (for a retryable, its refundTo)
  • amountTokenstringToken amount, base units
  • amountQuotestringQuote amount, base units
  • priceUsdstring | nullUSD, as a decimal string; null without a price
  • volumeUsdstring | nullUSD, as a decimal string; null without a price
CandleOne bucket, USD prices
  • tnumberBucket start (ms)
  • ostringOpening price
  • hstringHighest price
  • lstringLowest price
  • cstringClosing price
  • vstringUSD volume
TopTraderOne trader of the pair
  • addressstringLowercase address
  • boughtUsdstringUSD spent buying
  • soldUsdstringUSD received selling
  • boughtTokenstringTokens bought, base units
  • soldTokenstringTokens sold, base units
  • buysnumberBuys
  • sellsnumberSells
  • realizedUsdstringRealized PnL, USD
  • unrealizedUsdstring | nullUnrealized PnL, USD
  • pnlUsdstring | nullTotal PnL, USD
  • heldTokenstringWhat its swaps leave held, base units
  • balancestring | nullIts token balance now, base units; null while the holder index fills
  • remainingUsdstring | nullWhat it still holds, at today's price, USD
  • hypeBalancestring | nullHYPE in wei, as a decimal string
  • lastActiveAtnumber | nullIts newest swap in any pool (ms)
  • feesHypestring | nullGas paid for its swaps in this pair, wei
  • fundingWalletFunding | nullIts first HYPE in on Elysium
  • tags(creator | sniper | bundler | pro | fresh)[]What kind of trader it is
  • tradesnumberBuys plus sells
  • firstAtnumberIts first trade in the pair (ms)
  • lastAtnumberIts last trade in the pair (ms)
WalletFundingA wallet's first HYPE in
  • fromstringThe sender
  • kindtransfer | depositA transfer on Elysium, or a bridge deposit from HyperEVM
  • labelstring | nullA known sender's name
  • amountstringHYPE in wei, as a decimal string
  • atnumberUnix time in milliseconds
  • txHashstringTransaction hash
PairRouteThe pools a HYPE trade of the pair crosses
  • pairIdstringThe pair's id (a v2/v3 pool address, or a v4 pool id)
  • sidebuy | sellThe trade's direction
  • hopsRouteHop[]1–3 pools, in trade order
  • viastring[]Symbols along the route, e.g. HYPE, USDC, TKN
  • liquidityUsdstring | nullThe thinnest pool on the route, USD
  • asOfnumberWhen the route was picked (ms)
RouteHopOne pool of a route
  • pairIdstringThe pair's id (a v2/v3 pool address, or a v4 pool id)
  • protocolv2 | v3 | v4The pool type
  • poolstringThe v2 pair, v3 pool or v4 PoolManager
  • venuestringThe venue's address
  • tokenInstringWhat goes in (0x000…000: native HYPE)
  • tokenOutstringWhat comes out
  • feenumber | nullv3/v4 fee in hundredths of a basis point
  • tickSpacingnumber | nullv3/v4 tick spacing
  • hooksstring | nullv4 hook address
  • v2FeeBpsnumber | nullv2 only: the pair fee in basis points
  • liquidityUsdstring | nullLiquidity in the pool, USD
PairHolderStatsThe Holders panel's figures
  • pairIdstringThe pair's id (a v2/v3 pool address, or a v4 pool id)
  • completebooleanFalse while the token's holder index is still filling: the figures are then partial
  • insidersPctnumber | null% of supply; null until the holder index is complete
  • insidersnumber | nullInsiders holding some now
  • freshPctnumber | null% of supply; null until the holder index is complete
  • freshWalletsnumber | nullFresh wallets holding some now
  • proTradersPctnumber | null% of supply; null until the holder index is complete
  • proTradersnumber | nullPro traders holding some now
  • lpBurnedPctnumber | null% of the pool's liquidity nobody can ever withdraw
  • asOfnumberWhen these figures were computed (ms)
HolderOne holder of a token
  • addressstringLowercase address
  • balancestringBase units, as a decimal string
  • pctnumber | null% of supply, 4 decimals
  • tags(creator | pool | burn | router | contract)[]What the address is
BubbleMapThe largest holders and the links between them
  • tokenstringLowercase address
  • holdersHolder[]The largest holders, as /holders
  • fundersBubbleFunder[]Wallets that funded two or more of them
  • linksBubbleLink[]Every link between the holders and the funders
  • transfersbooleanFalse when transfers couldn't be read: links are funding only
  • holderCountnumber | nullAddresses with a positive balance
  • completebooleanFalse while the token's holder index is still filling: the figures are then partial
  • asOfnumberWhen these figures were computed (ms)
BubbleFunderA wallet that funded several holders
  • addressstringLowercase address
  • labelstring | nullA known sender's name
  • creatorbooleanIt created one of the token's pools
CreatorTokenA token its creator launched
  • addressstringLowercase address
  • symbolstring | nullThe ticker
  • namestring | nullThe token's name
  • imagestring | nullOur copy of the logo (add ?s=64 or ?s=128 for smaller)
  • pairIdstringIts most liquid pool
  • createdAtnumberUnix time in milliseconds
  • marketCapUsdstring | nullMarket cap, USD
  • liquidityUsdstring | nullLiquidity in the pool, USD
VenueA factory or PoolManager we index
  • addressstringLowercase address
  • kindv2 | v3 | v4The pool type
  • namestring | nullIts name
  • universalRouterstring | nullIts Universal Router, if any
  • v2FeeBpsnumber | nullv2 only: the pair fee in basis points
  • pairsnumberPools indexed on it
  • firstSeennumberBlock it was first seen at
  • routersRouterInfo[]The routers that trade it (the Elysa Router)
  • preferredstring | nullThe router to use
  • wethstring[]The wrapped HYPE its pools pair against
  • quoterstring | nullIts quoter contract
  • sellablebooleanFalse when its tokens can't be sold
  • sellableReasonstring | nullWhy not, when they can't
  • launchpads{ id, name }[]Launchpads running on it
RouterInfoA router that trades a venue
  • addressstringLowercase address
  • kindstringWhat kind of router it is
  • namestringIts name
  • versionstring | nullIts version
  • approvalpermit2 | erc20 | noneHow a sell approves it
  • wethstring | nullThe wrapped HYPE it uses
  • quoterstring | nullIts quoter contract
  • verifiedbooleanIts bytecode matches a reviewed build
  • upgradeablebooleanIt can be changed by its owner
  • safetystring[]Plain-words flags; empty when none
  • supports{ nativeIn, nativeOut, feeOnTransfer, multicall }What it can do
  • launchpad{ id, name, referral } | nullThe launchpad it belongs to
  • preferredbooleanThe router to use
  • adapterstringHow to call it
  • abistring | nullIts ABI file
  • feeOptionsstring[]How the platform fee is taken on it

Questions

Who can get a key?

Any wallet holding at least 500,000 ELYSA. Your tokens stay in your wallet: you sign in once, and the key works from any machine.

What happens if I move my ELYSA?

The key works while the wallet holds the minimum. Below it the key pauses, and it picks up again the moment the balance is back, with nothing to redo.

Can I use one key on several bots?

Yes. Use it from as many machines as you like, with up to 50 WebSockets open at once. Each wallet has one key; another wallet with its own 500,000 ELYSA gets its own.

I lost my key. What now?

Sign in and rotate it: you get a new key at once, and the old one stops working.

Where do the nodes run?

In Singapore, Europe, US East and US West, on servers that serve key holders only, so your traffic never shares capacity with the terminal. Pick the region nearest your bot on the endpoints card: every key works on all of them. For sending, Singapore sits closest to Elysium's sequencer in Tokyo.

Can I send transactions now?

Yes, from every region, through HyperEVM's Inbox: sign the Elysium transaction, wrap it as 0x04 followed by the signed transaction in a HyperEVM transaction to the Inbox's sendL2Message, signed by the same wallet, and send that with eth_sendRawTransaction through your key. The answer is the HyperEVM hash; the Elysium transaction runs about 10–17 seconds later under its own hash. The wallet needs a little HYPE on HyperEVM for gas, and another wallet can't sign the HyperEVM side. Direct sends to Elysium open with its public launch on Nov 9. The Send (Inbox) quickstart has the code.

Why was a call refused as heavy?

Each key runs up to 8 heavy calls at once: eth_getLogs, eth_getBlockReceipts, eth_simulateV1 and traces, the calls that can keep a node busy for seconds. One more while they run is answered with an error and the rest of its batch goes through; send it again when one finishes.

What does Elysa keep about my requests?

A count per day, for your usage chart. Never what you asked for, your IP address or the wallets your bot uses.