{"openapi":"3.1.0","info":{"title":"Femtos API","version":"1.0.0","description":"REST + WebSocket data for Elysium (testnet, chain 99801), HyperEVM and HyperCore: launches, candles, trades, holders, launch lifecycle, bridges, cross-layer wallets. Decimals are exact strings, times Unix ms, addresses lowercase 0x. A named wallet's address (the KOLs, traders and funds of /v1/entities) never appears as such: every field, string, URL and WebSocket frame gives its handle `<entityId>.<hex>` (e.g. `loraclexyz.3f9a1c2e`, stable), and a handle is accepted as input anywhere an address is (path, query, WebSocket filters). Auth: `Authorization: Bearer <key>` or `X-API-KEY: <key>` (WebSocket: `POST /v1/ws-ticket` with the key, then `/v1/ws?ticket=<ticket>`; `/v1/ws?token=<key>` still works but is deprecated: proxies log URLs, so the key would be written in their logs). A source that cannot answer = 503 {error, unavailable}; unknown token / market / launch = 404. While a layer syncs (`state: syncing` in /v1/status), answers hold what is indexed: objects carry `syncing: true, dataUntil`, arrays the headers `X-Layer-State: syncing`, `X-Data-Until`. Provenance: a row cites the chain event it comes from by `block` + `tx` (the transaction hash) + `logIndex` (EVM layers: the log) — HyperCore: the block and the hash of the transaction whose fills made it; rows of several layers say which in `layer`. An aggregate (candles, holders, volume, NFT holdings) cites the head it is cut at: `height` = a block every event up to which is counted, `asOf` = its time."},"servers":[{"url":"https://api.femtos.xyz/v1"}],"security":[{"bearer":[]},{"apiKey":[]}],"tags":[{"name":"Launches"},{"name":"Market data"},{"name":"Liquidations & positions"},{"name":"Holders"},{"name":"Bridges"},{"name":"NFTs"},{"name":"Wallet"},{"name":"Meta"}],"paths":{"/whoami":{"get":{"tags":["Meta"],"summary":"The key used: name, tier, billing state, limits in force","operationId":"whoami","description":"Answers the key this request authenticated with (never the key itself): the name it is registered under, its tier, its billing state and the limits in force. The cheapest way to check a key works; never metered.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"key":{"type":["string","null"],"description":"Name the key is registered under (never the key itself)","example":"acct_3f9a"},"tier":{"type":["string","null"],"enum":["free","builder","pro","scale","enterprise","partner",null],"description":"null: internal key"},"billing":{"type":["string","null"],"enum":["ok","exhausted","capped",null],"description":"exhausted / capped: the key runs at the free tier limits (and heavy calls may answer 402)"},"limits":{"type":["object","null"],"description":"Limits in force (the free row while billing is exhausted / capped); null: no limit (internal key)","properties":{"rps":{"type":"number","description":"Requests per second (refill of the bucket)","example":30},"burst":{"type":"integer","description":"Bucket capacity","example":60},"maxConns":{"type":"integer","description":"WebSocket connections at once","example":5}}}},"required":["key","tier","billing","limits"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ws-ticket":{"post":{"tags":["Meta"],"summary":"A single-use WebSocket ticket (30 s): open `/ws?ticket=<ticket>` with it","operationId":"wsTicket","description":"The key goes in a header here, the ticket in the WebSocket URL: the key never travels in a URL (tunnels and proxies log URLs, query included). One ticket opens one connection, within ttlS seconds. Counts against the key's rps / burst, never billed. `/ws?token=<key>` still works but is deprecated.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ticket":{"type":"string","description":"Pass as /ws?ticket=","example":"wst_9mX2…"},"ttlS":{"type":"integer","description":"Seconds to use it","example":30},"expiresAt":{"type":"integer","description":"Unused after (Unix ms)","example":1792236158000}},"required":["ticket","ttlS","expiresAt"]}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the key's rps / burst (Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/status":{"get":{"tags":["Meta"],"summary":"Layer heads and lag","operationId":"status","description":"Measured now, per layer: state (live, or syncing while its indexer is behind the chain), indexed head block and time, lag behind real time; on the EVM layers the node's own head and how far the indexed head is behind it; Elysium's network (testnet / mainnet). Also the state of the live feeds and the HyperCore <> HyperEVM bridge matching coverage. Check it when an answer looks stale. Free (never metered).","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Status"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/audit":{"get":{"tags":["Meta"],"summary":"Public correctness audit (no key)","description":"Every few minutes per layer, random items of what we serve are compared with their source of truth: HyperCore fills, trades, positions and spot balances vs Hyperliquid public API (same request, same instant); HyperEVM and Elysium blocks, transactions, logs and balances vs the archive node at the same block, block hashes vs a public RPC; HyperEVM balances, supplies and pools by hyperevm-verify. Counts over 24 h and 7 d, each mismatch with both values.","operationId":"audit","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Audit"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/audit/open":{"get":{"tags":["Meta"],"summary":"Open audit mismatches and their triage (no key)","description":"The items of the audit that differed from their source of truth and are neither corrected nor explained yet (last 7 days, newest first), each with its latest triage. Polled every minute by the triage runner and the notifications; 503 (same body, with reason) when the audit store does not answer.","operationId":"auditOpen","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditOpen"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Audit store unavailable: the same body with reason, counts 0","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AuditOpen"}}}}}}},"/audit/triage":{"get":{"tags":["Meta"],"summary":"Triages of audit mismatches, newest first (no key)","operationId":"auditTriage","description":"The latest triages of the audit's mismatches, newest first: for each, the cause found, whether it was corrected or explained, and when. Public, no key; cached 15 s.","security":[],"parameters":[{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"example":50}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/AuditTriage"}}},"required":["items"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/x402/networks":{"get":{"tags":["Meta"],"summary":"x402: the networks USDC is accepted on, cheapest settlement first (no key)","description":"The networks a keyless agent can buy a credit pack on with x402 (scheme `exact`, USDC, EIP-3009), ranked by what one settlement costs Femtos now (refreshed every minute). A network is offered for a pack only when that cost is at most `maxFeeRatio` of the pack: `packsUsd` per network. The 402 lists the same networks in the same order, the first one `recommended`. `{enabled: false, networks: []}` while x402 is off.","operationId":"x402Networks","security":[],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"enabled":{"type":"boolean"},"x402Version":{"type":"array","items":{"type":"integer"},"description":"Protocol versions spoken (1, 2)"},"scheme":{"type":"string","description":"exact"},"packsUsd":{"type":"array","items":{"type":"number"},"description":"Credit packs (USD), ascending"},"packParam":{"type":"string","description":"Query parameter asking a 402 for a bigger pack (x402_pack=<USD>)"},"maxFeeRatio":{"type":"number","description":"Largest settlement cost / pack offered"},"networks":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","description":"CAIP-2 (x402 v2 `network`)","example":"eip155:8453"},"id":{"type":"string","description":"Short name","example":"base"},"name":{"type":"string","description":"Chain","example":"Base"},"chainId":{"type":"integer","description":"EVM chain id"},"v1Network":{"type":["string","null"],"description":"x402 v1 network name (null: v2 only)"},"asset":{"type":"string","description":"USDC contract (6 decimals)"},"decimals":{"type":"integer","description":"6"},"eip712":{"type":"object","properties":{"name":{"type":"string","description":"EIP-712 domain name of the token"},"version":{"type":"string","description":"EIP-712 domain version"}},"required":["name","version"]},"payTo":{"type":"string","description":"Femtos address receiving the USDC on that chain"},"settleCostUsd":{"type":"number","description":"Estimated cost of one settlement (USD)"},"costSource":{"type":"string","description":"live (gas price × gas × native price), fallback (static, conservative) or facilitator (its fee)"},"gasPriceGwei":{"type":"number"},"offered":{"type":"boolean","description":"In the 402 now"},"recommended":{"type":"boolean","description":"The cheapest: the first `accepts` entry"},"packsUsd":{"type":"array","items":{"type":"number"},"description":"Packs offered on this network"},"reason":{"type":"string","description":"Why not offered"}},"required":["network","id","name","chainId","v1Network","asset","decimals","eip712","payTo","settleCostUsd","costSource","gasPriceGwei","offered","recommended","packsUsd","reason"]}}},"required":["enabled","x402Version","scheme","packsUsd","packParam","maxFeeRatio","networks"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/openapi.json":{"get":{"tags":["Meta"],"summary":"This document (public)","operationId":"openapi","description":"This OpenAPI 3.1 document, no key needed. The same API in Markdown for agents: https://femtos.xyz/agents.md (index: https://femtos.xyz/llms.txt).","security":[],"responses":{"200":{"description":"OpenAPI 3.1"}}}},"/launches":{"get":{"tags":["Launches"],"summary":"Latest launches, newest first","operationId":"listLaunches","description":"Elysium (Ascend) by default; launchpad=liquidlaunch (or layer=hyperevm): HyperEVM LiquidLaunch. While the layer syncs (`state: syncing` in /v1/status: its indexer is behind the chain) the array holds what is indexed and the response carries the headers `X-Layer-State: syncing` and `X-Data-Until: <ms>` (indexed head time).","parameters":[{"name":"launchpad","in":"query","required":false,"description":"Launchpad name: ascend (Elysium), liquidlaunch (HyperEVM)","schema":{"type":"string"},"example":"ascend"},{"name":"layer","in":"query","required":false,"description":"hyperevm = LiquidLaunch","schema":{"type":"string","enum":["elysium","hyperevm"]}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":200,"default":50},"example":20},{"name":"creator","in":"query","required":false,"description":"Elysium: launched by this wallet (creator at launch or current creator)","schema":{"type":"string"}},{"name":"quote","in":"query","required":false,"description":"Elysium: quote token of the pool (USDC, an RWA token…)","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Elysium: symbol or name contains (case ignored)","schema":{"type":"string","maxLength":64}},{"name":"since","in":"query","required":false,"description":"Elysium: launched at or after (ms)","schema":{"type":"integer"}},{"name":"until","in":"query","required":false,"description":"Elysium: launched before (ms)","schema":{"type":"integer"}},{"name":"before","in":"query","required":false,"description":"Elysium: cursor block:logIndex, the X-Next-Cursor header of the previous page","schema":{"type":"string"}},{"name":"includeSpam","in":"query","required":false,"description":"Show spam tokens (tokens.spam: homoglyph, impostor, phishing name, fake transfers…) flagged spam / spamReason; left out of the list by default","schema":{"type":"boolean","default":false}},{"name":"minMcapUsd","in":"query","required":false,"description":"Ascended criterion: minimum market cap, USD (decimal string)","schema":{"type":"string"},"example":"100000"},{"name":"minHolders","in":"query","required":false,"description":"Ascended criterion: minimum unique holders (system excluded)","schema":{"type":"integer","minimum":1},"example":300},{"name":"minVolumeUsd","in":"query","required":false,"description":"Ascended criterion: minimum volume since launch, USD","schema":{"type":"string"}},{"name":"maxTop10Share","in":"query","required":false,"description":"Ascended criterion: maximum top-10 share of the supply","schema":{"type":"number","exclusiveMinimum":0,"maximum":1}}],"responses":{"200":{"description":"OK; X-Next-Cursor (block:logIndex) when the page is full","headers":{"X-Next-Cursor":{"schema":{"type":"string"},"description":"Pass as `before` for the next page"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LaunchRow"}}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/launches/{token}":{"get":{"tags":["Launches"],"summary":"One launch: Ascended metrics, dev wallet, early buyers, signals, fees","operationId":"getLaunch","description":"The full story of one launched token: the launch event, current market cap and 24 h volume, holders and concentration, the dev wallet and its funding before the launch, early buyers (first `earlyWindowSec` seconds) with their flags, coordination signals, the fees (exact from the launchpad ledger when indexed) and, on Elysium, the progress toward the derived \"Ascended\" status. Elysium first, then HyperEVM LiquidLaunch. Ascend publishes no threshold and its launchpad contract has no graduation state or event (checked on chain): `ascend.status` is derived from the thresholds of the request, else of the server (none configured: null).","parameters":[{"name":"token","in":"path","required":true,"description":"Launched token address","schema":{"type":"string"},"example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},{"name":"earlyWindowSec","in":"query","required":false,"description":"Early-buyer window after the launch block","schema":{"type":"integer","minimum":1,"maximum":3600,"default":60}},{"name":"fundingLookbackSec","in":"query","required":false,"description":"Funding lookback before the launch","schema":{"type":"integer","minimum":1,"maximum":604800,"default":86400}},{"name":"layer","in":"query","required":false,"description":"Default: Elysium, then HyperEVM LiquidLaunch when Elysium has no launch for the token","schema":{"type":"string","enum":["elysium","hyperevm"]}},{"name":"minMcapUsd","in":"query","required":false,"description":"Ascended criterion: minimum market cap, USD (decimal string)","schema":{"type":"string"},"example":"100000"},{"name":"minHolders","in":"query","required":false,"description":"Ascended criterion: minimum unique holders (system excluded)","schema":{"type":"integer","minimum":1},"example":300},{"name":"minVolumeUsd","in":"query","required":false,"description":"Ascended criterion: minimum volume since launch, USD","schema":{"type":"string"}},{"name":"maxTop10Share","in":"query","required":false,"description":"Ascended criterion: maximum top-10 share of the supply","schema":{"type":"number","exclusiveMinimum":0,"maximum":1}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchDetail"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"No launch for this token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/tokens/{address}/lifecycle":{"get":{"tags":["Launches"],"summary":"One token across the 3 layers, from launch to perp: stages, addresses, links (exact or inferred)","operationId":"getTokenLifecycle","description":"Any layer's id in: an Elysium or HyperEVM address, `core:<index>`, a HyperCore token id (0x + 32 hex), a token name or a perp coin (`dex:COIN`). Out: the token on each layer and its stages: Elysium launch (Ascend Launched), listing desk (Registered, Enrolled, Committed), HyperEVM mirror (bridge registry, on-chain checks), HyperCore spot (token registry, or the desk's Delivered relayed by CoreListingVerifier), perps (HIP-3: same name = inferred; dex collateral = exact). Each stage: `at` = chain evidence, `observedAt` = first seen by our registry. A link that cannot be proven is not made: the layer is null and `unavailable` says why. Testnet Elysium (99801) links to HyperEVM / HyperCore testnet.","parameters":[{"name":"address","in":"path","required":true,"description":"Elysium / HyperEVM address, core:<index>, HyperCore token id, name or perp coin","schema":{"type":"string"},"example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},{"name":"minMcapUsd","in":"query","required":false,"description":"Ascended criterion: minimum market cap, USD (decimal string)","schema":{"type":"string"},"example":"100000"},{"name":"minHolders","in":"query","required":false,"description":"Ascended criterion: minimum unique holders (system excluded)","schema":{"type":"integer","minimum":1},"example":300},{"name":"minVolumeUsd","in":"query","required":false,"description":"Ascended criterion: minimum volume since launch, USD","schema":{"type":"string"}},{"name":"maxTop10Share","in":"query","required":false,"description":"Ascended criterion: maximum top-10 share of the supply","schema":{"type":"number","exclusiveMinimum":0,"maximum":1}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Lifecycle"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"No layer knows this token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/launches/{token}/holders":{"get":{"tags":["Launches"],"summary":"Holders of a launched token: page, concentration, dev / early-buyer tags","operationId":"getLaunchHolders","description":"Largest first, system addresses apart (PancakeSwap Infinity vault and PoolManager, AscendLaunchpad and its treasuries / listing desk, zero/dead). Tags and signal flags from the launch detail (default windows). Same resolution as /v1/launches/{token}.","parameters":[{"name":"token","in":"path","required":true,"description":"Launched token address","schema":{"type":"string"},"example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100},"example":20},{"name":"offset","in":"query","required":false,"description":"Rows to skip (`next`)","schema":{"type":"integer","minimum":0,"default":0}},{"name":"layer","in":"query","required":false,"description":"Default: Elysium, then HyperEVM","schema":{"type":"string","enum":["elysium","hyperevm"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchHolders"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"No launch for this token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/launches/{token}/timeline":{"get":{"tags":["Launches"],"summary":"Replayable life of a launch: launch, swaps, transfers with running holders / market cap, graduation links","operationId":"getLaunchTimeline","description":"Same resolution as /v1/launches/{token}. LiquidLaunch: holders replayed from the swaps (holdersFrom: swaps, approximate: wallet-to-wallet transfers not seen).","parameters":[{"name":"token","in":"path","required":true,"description":"Launched token address","schema":{"type":"string"},"example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},{"name":"layer","in":"query","required":false,"description":"Default: Elysium, then HyperEVM","schema":{"type":"string","enum":["elysium","hyperevm"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Timeline"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"No launch for this token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/markets":{"get":{"tags":["Market data"],"summary":"Tradable markets; EVM pools most traded first, paged","operationId":"listMarkets","description":"EVM pools (elysium, hyperevm) sorted by 24 h USD volume; default limit: elysium 5000 (whole list), hyperevm 100 (13k pools). X-Total-Count = pools matching q on the layer asked. While the layer syncs (`state: syncing` in /v1/status: its indexer is behind the chain) the array holds what is indexed and the response carries the headers `X-Layer-State: syncing` and `X-Data-Until: <ms>` (indexed head time).","parameters":[{"name":"layer","in":"query","required":false,"description":"Layer (none: HyperCore + Elysium + top 100 HyperEVM pools)","schema":{"type":"string","enum":["hypercore","hyperevm","elysium"]},"example":"hyperevm"},{"name":"q","in":"query","required":false,"description":"EVM pools: substring of symbol, base, quote, addresses or protocol","schema":{"type":"string","maxLength":64}},{"name":"limit","in":"query","required":false,"description":"EVM pools per layer (default: elysium 5000, hyperevm 100)","schema":{"type":"integer","minimum":1,"maximum":5000},"example":50},{"name":"offset","in":"query","required":false,"description":"EVM pools to skip","schema":{"type":"integer","minimum":0,"default":0}},{"name":"includeOutcomes","in":"query","required":false,"description":"HyperCore outcome markets","schema":{"type":"integer","enum":[0,1],"default":0}},{"name":"includeSpam","in":"query","required":false,"description":"EVM pools of spam tokens (base or quote flagged in tokens.spam), flagged spam / spamReason; left out by default (and out of X-Total-Count)","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Market"}}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/candles":{"get":{"tags":["Market data"],"summary":"OHLCV candles (EVM pools: in quote, plus usd / mcap; from the first trade)","operationId":"getCandles","description":"HyperEVM while syncing: without `to` the window ends at the indexed head, the gap fill stops there, and the answer carries syncing / dataUntil. asOf / height: the head the candles are cut at (every trade up to that block is in them).","parameters":[{"name":"layer","in":"query","required":true,"description":"Layer","schema":{"type":"string","enum":["elysium","hyperevm","hypercore"]},"example":"elysium"},{"name":"market","in":"query","required":true,"description":"Elysium / HyperEVM: pair address (pool key); HyperCore: coin","schema":{"type":"string"},"example":"0x12e84206cb53ae0df055482ebc4658635096e1aa:0x8a9480e70c99d18d9bde3a7f5cd565be58064945963f62e0c5cc303b6b627847"},{"name":"tf","in":"query","required":true,"description":"Candle unit","schema":{"type":"string","enum":["1s","15s","1m","5m","15m","1h","4h","1d"]},"example":"1m"},{"name":"from","in":"query","required":false,"description":"Start (ms, inclusive)","schema":{"type":"integer"}},{"name":"to","in":"query","required":false,"description":"End (ms, exclusive; default now)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Candles","schema":{"type":"integer","minimum":1,"maximum":5000,"default":1000}},{"name":"fill","in":"query","required":false,"description":"1: flat candles for units without trade","schema":{"type":"integer","enum":[0,1],"default":1}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"market":{"type":"string","description":"Market"},"tf":{"type":"string","description":"Unit"},"candles":{"type":"array","items":{"$ref":"#/components/schemas/Candle"},"description":"Ascending"},"asOf":{"type":"integer","description":"Time of `height` (HyperCore: ingested head; EVM: indexed head, committed with the candles) (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Head block of the layer the answer is cut at: every event up to it is counted (HyperCore: ingested head; EVM: indexed head, committed with the candles)"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","market","tf","candles"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/trades":{"get":{"tags":["Market data"],"summary":"Latest trades / swaps, newest first","operationId":"getTrades","description":"EVM: px = pool price after the swap as the indexer computes it (V3: sqrtPriceX96), not the amount ratio. While the layer syncs (`state: syncing` in /v1/status: its indexer is behind the chain) the array holds what is indexed and the response carries the headers `X-Layer-State: syncing` and `X-Data-Until: <ms>` (indexed head time).","parameters":[{"name":"layer","in":"query","required":true,"description":"Layer","schema":{"type":"string","enum":["elysium","hyperevm","hypercore"]},"example":"elysium"},{"name":"market","in":"query","required":true,"description":"Pair address (pool key) or coin","schema":{"type":"string"},"example":"0x12e84206cb53ae0df055482ebc4658635096e1aa:0x8a9480e70c99d18d9bde3a7f5cd565be58064945963f62e0c5cc303b6b627847"},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Trade"}}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/holders":{"get":{"tags":["Holders"],"summary":"Holders and concentration (system addresses excluded by default)","operationId":"getHolders","description":"Current balances of a token, largest first, with concentration (total holders, top-10 share). Elysium and HyperEVM: ERC-20 balances at the indexed head, `token` = 0x address. HyperCore: `token` = token name (HYPE) for spot balances, or a perp coin with kind=positions for open interest by account. System addresses (pools, PoolManager, hooks, bridges, launchpad, zero / dead) are counted apart unless excludeSystem=0. Named wallets carry `entity`.","parameters":[{"name":"layer","in":"query","required":false,"description":"Layer","schema":{"type":"string","enum":["hypercore","hyperevm","elysium"],"default":"hypercore"},"example":"hyperevm"},{"name":"token","in":"query","required":true,"description":"Token address (Elysium, HyperEVM), token name or perp coin (HyperCore)","schema":{"type":"string"},"example":"0x5555555555555555555555555555555555555555"},{"name":"kind","in":"query","required":false,"description":"HyperCore: spot balances of a token, or perp positions (open interest by account) of a coin","schema":{"type":"string","enum":["balances","positions"],"default":"balances"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"name":"excludeSystem","in":"query","required":false,"description":"1: pools, PoolManager, hooks, gateways, bridge system addresses, LiquidLaunch curve, zero/dead counted apart","schema":{"type":"integer","enum":[0,1],"default":1}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Holders"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Unknown token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/coins":{"get":{"tags":["Market data"],"summary":"Tokens and their links Elysium <-> HyperEVM <-> HyperCore (HyperEVM: every ERC-20 of the indexer)","operationId":"listCoins","description":"While the layer syncs (`state: syncing` in /v1/status: its indexer is behind the chain) the array holds what is indexed and the response carries the headers `X-Layer-State: syncing` and `X-Data-Until: <ms>` (indexed head time).","parameters":[{"name":"layer","in":"query","required":false,"description":"Layer","schema":{"type":"string","enum":["hypercore","hyperevm","elysium"]}},{"name":"q","in":"query","required":false,"description":"Symbol, name or address (an exact address always answers its token, flagged)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows per layer","schema":{"type":"integer","maximum":1000,"default":100}},{"name":"includeSpam","in":"query","required":false,"description":"Show spam tokens (tokens.spam: homoglyph, impostor, phishing name, fake transfers…) flagged spam / spamReason; left out of the list by default","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"type":"object","description":"{layer, id, symbol, name, decimals, totalSupply, priceUsd, links:{core?, evm?, elysium?}, coverage?, spam, spamReason} (spam / spamReason on HyperEVM and Elysium coins)"}}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/bridges":{"get":{"tags":["Bridges"],"summary":"Bridge movements and 24 h stats (route=evm_elysium: HyperEVM <-> Elysium)","operationId":"getBridges","description":"Bridge movements, newest first (at most 7 days), with 24 h stats. route=core_evm: HyperCore <> HyperEVM transfers, each leg paired with its other leg (`matched_by`: nonce = exact, order = same key in order), deposit wallets resolved to their depositor and final beneficiary (Circle's CoreDepositWallet forwards, CCTP mints with their source chain). route=evm_elysium: HyperEVM <> Elysium (Arbitrum Orbit) deposits and withdrawals in their latest state; Kinetiq's system retryables counted apart (`system`). Heavy call.","parameters":[{"name":"route","in":"query","required":true,"description":"Bridge","schema":{"type":"string","enum":["evm_elysium","core_evm"]},"example":"evm_elysium"},{"name":"direction","in":"query","required":false,"description":"Direction","schema":{"type":"string","enum":["to_child","to_parent","evm_to_core","core_to_evm"]}},{"name":"token","in":"query","required":false,"description":"Token address (`hype` for native HYPE)","schema":{"type":"string"}},{"name":"account","in":"query","required":false,"description":"Sender or recipient","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"name":"system","in":"query","required":false,"description":"Kinetiq system retryables (evm_elysium)","schema":{"type":"string","enum":["exclude","include","only"],"default":"exclude"}},{"name":"includeSpam","in":"query","required":false,"description":"evm_elysium: rows of spam parent tokens (HyperEVM tokens.spam), left out by default","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Bridges"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/bridges/coverage":{"get":{"tags":["Bridges"],"summary":"HyperCore <> HyperEVM matching coverage: matched legs per direction and token, why the others are not, latency","operationId":"getBridgeCoverage","description":"Every HyperCore <> HyperEVM bridge leg since our data starts (HyperCore and HyperEVM from 2026-06-01) is paired with its other leg: EVM -> Core deposits with their HyperCore credit, Core -> EVM sends with the HyperEVM system transaction crediting them (exact by nonce for coreReceiveWithData, else same system address, account and amount in order). Counts per direction and per token, the reason of each unmatched leg, the credits no leg took, and the latency distribution of the matched ones. Cached 60 s.","parameters":[{"name":"window","in":"query","required":false,"description":"Legs of the window (by sending time)","schema":{"type":"string","enum":["all","30d","7d","24h"],"default":"all"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Coverage"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/coins/{layer}/{id}":{"get":{"tags":["Market data"],"summary":"One coin: links, the markets it trades on, its 5 largest holders","operationId":"getCoin","description":"HyperCore: spot + perp markets of the same name, `id` = name, index or tokenId; HyperEVM: the linked HyperCore markets + its 20 most traded pools; Elysium: its pools. holders = {unavailable} when the source cannot answer.","parameters":[{"name":"layer","in":"path","required":true,"description":"Layer","schema":{"type":"string","enum":["hypercore","hyperevm","elysium"]},"example":"hypercore"},{"name":"id","in":"path","required":true,"description":"HyperCore token name (HYPE) or 0x address (HyperEVM, Elysium)","schema":{"type":"string"},"example":"HYPE"},{"name":"includeSpam","in":"query","required":false,"description":"Pools of spam tokens in `markets` (a spam coin always lists its own pools)","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coin":{"type":"object","description":"/v1/coins item; a spam token still answers, flagged spam / spamReason"},"markets":{"type":"array","items":{"$ref":"#/components/schemas/Market"}},"holders":{"type":"object","description":"Holders (5 largest) or {unavailable}"}},"required":["coin","markets","holders"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Unknown coin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/nfts/collections":{"get":{"tags":["NFTs"],"summary":"Most active NFT collections over the last 1 h or 24 h (transfers, mints, burns)","operationId":"listNftCollections","description":"Window ending at the indexed head (HyperEVM while syncing) or now. Read from the block range of nft_transfers, top 200 kept 60 s.","parameters":[{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"},{"name":"window","in":"query","required":false,"description":"Window","schema":{"type":"string","enum":["1h","24h"],"default":"24h"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"window":{"type":"string","description":"Window"},"from":{"type":"integer","description":"Window start (Unix ms)","example":1792236158000},"to":{"type":"integer","description":"Window end (Unix ms)","example":1792236158000},"fromBlock":{"type":"integer","description":"First block"},"toBlock":{"type":"integer","description":"Last block"},"collections":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Collection"},{"type":"object","properties":{"transfers":{"type":"integer","description":"Transfers in the window"},"mints":{"type":"integer","description":"Mints"},"burns":{"type":"integer","description":"Burns"},"lastBlock":{"type":"integer","description":"Last transfer block"}},"required":["transfers","mints","burns","lastBlock"]}]}},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","window","collections"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/nfts/collections/{address}":{"get":{"tags":["NFTs"],"summary":"One NFT collection: metadata, tokens seen (counted up to 1,000), 24 h activity","operationId":"getNftCollection","description":"One NFT collection of an EVM layer: its metadata (name, symbol, standard), how many token ids were seen (counted up to 1,000) and its transfers, mints and burns over the 24 h before the indexed head.","parameters":[{"name":"address","in":"path","required":true,"description":"Collection contract","schema":{"type":"string"},"example":"0x9ea4459c8defbf561495d95414b9cf1e2242a3e2"},{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"collection":{"$ref":"#/components/schemas/Collection"},"standards":{"type":"array","items":{"type":"string"}},"tokens":{"type":"object","properties":{"count":{"type":"integer","description":"Tokens seen, at most 1000"},"capped":{"type":"boolean","description":"true: 1000 or more"}},"required":["count","capped"]},"activity24h":{"type":"object","properties":{"from":{"type":"integer","description":"Start (Unix ms)","example":1792236158000},"to":{"type":"integer","description":"End (Unix ms)","example":1792236158000},"fromBlock":{"type":"integer","description":"First block read"},"toBlock":{"type":"integer","description":"Last block read (indexed head)"},"transfers":{"type":"integer","description":"Transfers"},"mints":{"type":"integer","description":"Mints"},"burns":{"type":"integer","description":"Burns"},"lastBlock":{"type":["integer","null"]}},"required":["from","to","fromBlock","toBlock","transfers","mints","burns","lastBlock"]},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","collection","tokens","activity24h"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Unknown collection","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/nfts/tokens":{"get":{"tags":["NFTs"],"summary":"Tokens of a collection by id: current ERC-721 owner, metadata URI","operationId":"listNftTokens","description":"Tokens of one collection by token id, ascending: the current owner (ERC-721; null for ERC-1155) and the metadata URI as the contract returned it. Page with `after` = the `next` of the previous page.","parameters":[{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"},{"name":"collection","in":"query","required":true,"description":"Collection contract","schema":{"type":"string"},"example":"0x9ea4459c8defbf561495d95414b9cf1e2242a3e2"},{"name":"after","in":"query","required":false,"description":"Last token id of the previous page (`next`)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"collection":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Collection","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"tokens":{"type":"array","items":{"type":"object","properties":{"tokenId":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Token id (exact decimal string)"},"standard":{"type":"string","description":"erc721 | erc1155"},"owner":{"type":["string","null"],"description":"ERC-721 owner (0x0 once burnt); null for ERC-1155"},"uri":{"type":["string","null"],"description":"tokenURI / uri as returned; null when it reverted or is longer than 2048 characters (then uriLength)"},"uriLength":{"type":"integer","description":"Length of a URI left out"},"firstSeenBlock":{"type":"integer","description":"First block"},"lastTransferBlock":{"type":["integer","null"]}},"required":["tokenId","standard","owner","uri","firstSeenBlock","lastTransferBlock"]}},"next":{"type":["string","null"]},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","collection","tokens","next"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/nfts/owned":{"get":{"tags":["NFTs"],"summary":"NFTs held by an address: ERC-721 ownership and ERC-1155 balances","operationId":"getNftsOwned","description":"NFTs an address holds on an EVM layer at the indexed head: ERC-721 tokens it owns and ERC-1155 token ids with a positive balance, counted per collection (100 largest collections), the tokens listed up to `limit`.","parameters":[{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"},{"name":"owner","in":"query","required":true,"description":"Holder address","schema":{"type":"string"},"example":"0x1b86c68e4003a8e139d71a9f06a1b1cc18678626"},{"name":"limit","in":"query","required":false,"description":"Tokens listed","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"owner":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"Holder: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"erc721":{"type":"integer","description":"ERC-721 tokens owned (counted up to 10,000)"},"erc1155":{"type":"integer","description":"ERC-1155 token ids with a positive balance (up to 10,000)"},"capped":{"type":"boolean"},"collections":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Collection","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"name":{"type":["string","null"]},"symbol":{"type":["string","null"]},"erc721":{"type":"integer","description":"Tokens"},"erc1155":{"type":"integer","description":"Token ids"}},"required":["address","name","symbol","erc721","erc1155"]},"description":"100 largest"},"tokens":{"type":"array","items":{"type":"object","description":"{collection, tokenId, standard, amount, uri, lastTransferBlock}"}},"asOf":{"type":"integer","description":"Time of `height` (indexed head the holdings include) (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Head block of the layer the answer is cut at: every event up to it is counted (indexed head the holdings include)"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","owner","erc721","erc1155","collections","tokens"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/nfts/transfers":{"get":{"tags":["NFTs"],"summary":"Transfers of a collection or one token, newest first","operationId":"listNftTransfers","description":"scope = all: whole history (index by token). scope = 24h | 7d: the block window before the indexed head, while that index is missing (a layer still syncing).","parameters":[{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"},{"name":"collection","in":"query","required":true,"description":"Collection contract","schema":{"type":"string"},"example":"0x9ea4459c8defbf561495d95414b9cf1e2242a3e2"},{"name":"tokenId","in":"query","required":false,"description":"One token","schema":{"type":"string"}},{"name":"window","in":"query","required":false,"description":"Window when scope is not all","schema":{"type":"string","enum":["24h","7d"],"default":"24h"}},{"name":"before","in":"query","required":false,"description":"Cursor block:logIndex:batchIndex (`next`)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"collection":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Collection","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"tokenId":{"type":["string","null"]},"scope":{"type":"string","enum":["all","24h","7d"]},"fromBlock":{"type":["integer","null"],"description":"First block read when scope is a window"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/NftTransfer"}},"next":{"type":["string","null"]},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","collection","scope","rows","next"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/volume":{"get":{"tags":["Market data"],"summary":"Daily USD swap volume of a token (both sides of every priced swap), oldest first","operationId":"getTokenVolume","description":"UTC days up to the indexed head; the head day is partial. Elysium: testnet pool prices (testnet: true).","parameters":[{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"},{"name":"token","in":"query","required":true,"description":"Token address","schema":{"type":"string"},"example":"0x5555555555555555555555555555555555555555"},{"name":"days","in":"query","required":false,"description":"Days","schema":{"type":"integer","minimum":1,"maximum":365,"default":30}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"symbol":{"type":["string","null"]},"spam":{"type":"boolean","description":"Flagged spam by the indexer (tokens.spam). GET /v1/tokens/spam lists them"},"spamReason":{"type":["string","null"],"description":"Why the indexer flags it, comma list, strongest first: homoglyph:<T> (looks like token T), impostor:<T> (claims to be T; never alone), phishing_name, fake_transfers, unreadable_balance (balanceOf reverts: no ERC-20 behind its Transfer logs), verifier_ignore; null when not spam","example":"homoglyph:USDC"},"from":{"type":"integer","description":"First day (Unix ms)","example":1792236158000},"to":{"type":"integer","description":"End (exclusive) (Unix ms)","example":1792236158000},"days":{"type":"array","items":{"type":"object","properties":{"day":{"type":"integer","description":"UTC day (Unix ms)","example":1792236158000},"volumeUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"USD, to the cent (exact decimal string)"},"partial":{"type":"boolean","description":"The indexed head day"},"suspect":{"type":"boolean","description":"Over 1e12 USD for the day: a mispriced swap upstream, left out of totalUsd"}},"required":["day","volumeUsd"]},"description":"Days with volume only"},"totalUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Sum of the days not suspect (exact decimal string)"},"suspectDays":{"type":"integer","description":"Days flagged suspect"},"testnet":{"type":"boolean"},"asOf":{"type":"integer","description":"Time of `height` (indexed head: the partial day counts every swap up to it) (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Head block of the layer the answer is cut at: every event up to it is counted (indexed head: the partial day counts every swap up to it)"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","token","days","totalUsd"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/token-families":{"get":{"tags":["Holders"],"summary":"Tokens whose balance moves without Transfer logs (Aave aTokens / debt tokens, stHYPE, wstHYPE, xStocks, rebasing)","operationId":"listTokenFamilies","description":"Tokens whose balances change without Transfer logs, so a Transfer-based holder count is wrong for them: Aave aTokens and variable debt tokens (scaled balances x index), stHYPE / wstHYPE (shares), xStocks and other backed or rebasing tokens. Each with its family and how balanceOf follows from what the contract stores.","parameters":[{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"},{"name":"family","in":"query","required":false,"description":"One family","schema":{"type":"string","enum":["aave_atoken","aave_vtoken","sthype","wrapped_shares","backed","scaling_factor"]}},{"name":"includeSpam","in":"query","required":false,"description":"Show spam tokens (tokens.spam: homoglyph, impostor, phishing name, fake transfers…) flagged spam / spamReason; left out of the list by default","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"families":{"type":"object","additionalProperties":{"type":"integer"},"description":"Tokens per family"},"tokens":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"family":{"type":"string","description":"Family"},"description":{"type":["string","null"],"description":"How balanceOf follows from the base"},"symbol":{"type":["string","null"]},"name":{"type":["string","null"]},"decimals":{"type":["integer","null"]},"params":{"type":"object"},"firstSeenBlock":{"type":"integer","description":"First block"}},"required":["token","family","description","symbol","name","decimals","params","firstSeenBlock"]}},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","families","tokens"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/token-families/{token}":{"get":{"tags":["Holders"],"summary":"One family token: state, holders, largest holders with balanceOf at the indexed head","operationId":"getTokenFamily","description":"One family token (see /token-families): the state its balance formula reads, the number of holders with a positive base, and the largest holders with the base the contract keeps and balanceOf computed at the indexed head.","parameters":[{"name":"token","in":"path","required":true,"description":"Family token","schema":{"type":"string"},"example":"0xffaa4a3d97fe9107cef8a3f48c069f577ff76cc1"},{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"},{"name":"limit","in":"query","required":false,"description":"Holders listed","schema":{"type":"integer","minimum":1,"maximum":200,"default":20}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"family":{"type":"string","description":"Family"},"state":{"type":["object","null"],"description":"Token state the formula reads, as the indexer stores it"},"stateBlock":{"type":["integer","null"]},"balancesAt":{"type":"object","properties":{"block":{"type":"integer","description":"Indexed head"},"t":{"type":"integer","description":"Its time (Unix ms)","example":1792236158000}},"required":["block","t"]},"holders":{"type":"integer","description":"Holders with a positive base"},"top":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"Holder: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"base":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Base the contract keeps (scaled balance, shares, internal balance), raw integer (exact decimal string)"},"balance":{"type":["string","null"],"description":"balanceOf at the head, token units (exact decimal string, null when unknown)"},"lastBlock":{"type":"integer","description":"Block of its last base change"}},"required":["address","base","balance","lastBlock"]}},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","token","family","holders","top"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Not a family token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/transfers":{"get":{"tags":["Market data"],"summary":"ERC-20 Transfer events of a token, newest first","operationId":"listErc20Transfers","description":"Needs the events index by contract: a layer whose index is not built yet answers 503.","parameters":[{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"},{"name":"token","in":"query","required":true,"description":"Token address","schema":{"type":"string"},"example":"0xcd57f65c2b0e5881cfc2e609f7cd53b746e1f234"},{"name":"before","in":"query","required":false,"description":"Cursor block:logIndex (`next`)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"symbol":{"type":["string","null"]},"decimals":{"type":["integer","null"]},"spam":{"type":"boolean","description":"Flagged spam by the indexer (tokens.spam). GET /v1/tokens/spam lists them"},"spamReason":{"type":["string","null"],"description":"Why the indexer flags it, comma list, strongest first: homoglyph:<T> (looks like token T), impostor:<T> (claims to be T; never alone), phishing_name, fake_transfers, unreadable_balance (balanceOf reverts: no ERC-20 behind its Transfer logs), verifier_ignore; null when not spam","example":"homoglyph:USDC"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/Erc20Transfer"}},"next":{"type":["string","null"]},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","token","rows","next"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/liquidity":{"get":{"tags":["Market data"],"summary":"Liquidity added to / removed from a pool, newest first","operationId":"listLiquidity","description":"V2 / V3: token amounts and the USD value the indexer computed; V4: the liquidity delta and ticks (the event has no token amounts). Needs the events index by contract: a layer whose index is not built yet answers 503.","parameters":[{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"},{"name":"pair","in":"query","required":true,"description":"Pool address or <PoolManager>:<PoolId>","schema":{"type":"string"},"example":"0x889a96eedb1df35a012d7e48baf7f9c780f1243b:0xfd93e1ba852feba3f05d7089513049c168a87fd058f64f4eb15f1c0bd3534467"},{"name":"before","in":"query","required":false,"description":"Cursor block:logIndex (`next`)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"pair":{"type":"string","description":"Pool"},"protocol":{"type":"string","description":"DEX protocol"},"token0":{"type":"object","description":"{address, symbol, decimals, spam, spamReason}"},"token1":{"type":"object","description":"{address, symbol, decimals, spam, spamReason}"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/LiquidityEvent"}},"next":{"type":["string","null"]},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","pair","protocol","rows","next"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Unknown pool","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/tokens/spam":{"get":{"tags":["Market data"],"summary":"Tokens flagged spam on an EVM layer and the latest flag changes (what the lists leave out)","operationId":"listSpamTokens","description":"The indexer flags homoglyph / impostor / phishing-name tokens, fake transfer campaigns and tokens its verifier ignores (tokens.spam). Every EVM list (markets, coins, launches, wallet balances and moves, KOL activity, token families, evm_elysium bridges, WS launch channels) leaves them out unless includeSpam=true / include_spam: true; a detail of a spam token still answers, flagged. available = false: the layer has no spam flags yet (nothing flagged, nothing hidden).","parameters":[{"name":"layer","in":"query","required":false,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"],"default":"hyperevm"}},{"name":"limit","in":"query","required":false,"description":"Changes listed","schema":{"type":"integer","minimum":1,"maximum":500,"default":50}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer","example":"hyperevm"},"available":{"type":"boolean","description":"The layer has the spam columns (migration 020)"},"count":{"type":"integer","description":"Tokens flagged now"},"tokens":{"type":"array","items":{"$ref":"#/components/schemas/SpamToken"},"description":"Newest flag first"},"changes":{"type":["array","null"],"items":{"$ref":"#/components/schemas/SpamChange"},"description":"Newest first (token_spam_log); null when the layer has no log"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","available","count","tokens","changes"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/book":{"get":{"tags":["Market data"],"summary":"L2 order book of one HyperCore market, with order counts, from our node","operationId":"getBook","description":"Live L2 order book of one HyperCore market (perp, spot `@index`, HIP-3 `dex:COIN`) from our own node: price levels best first with size and order count, and the block it was read at. 503 when the book service does not answer.","parameters":[{"name":"coin","in":"query","required":true,"description":"HyperCore coin (perp name, spot @index, HIP-3 dex:COIN)","schema":{"type":"string"},"example":"BTC"},{"name":"depth","in":"query","required":false,"description":"Levels per side","schema":{"type":"integer","minimum":1,"maximum":100000,"default":20},"example":20}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"height":{"type":"integer","description":"Block of the book"},"bids":{"type":"array","items":{"type":"array","description":"[px, sz, n]: price, size (exact decimal strings), order count"},"description":"Best first"},"asks":{"type":"array","items":{"type":"array","description":"[px, sz, n]: price, size (exact decimal strings), order count"},"description":"Best first"}},"required":["height","bids","asks"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Unknown coin","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/liquidations":{"get":{"tags":["Liquidations & positions"],"summary":"Perp liquidations, newest first: one row per account, coin and block","operationId":"listLiquidations","description":"Window: the last 24 h by default; `from` older than the lookback (7 days, 30 with `coin`) is clamped to it, the answer's `from` says where it starts.","parameters":[{"name":"coin","in":"query","required":false,"description":"One coin","schema":{"type":"string"},"example":"BTC"},{"name":"user","in":"query","required":false,"description":"One liquidated account (0x)","schema":{"type":"string"}},{"name":"minNotional","in":"query","required":false,"description":"Smallest notional (USD, decimal string)","schema":{"type":"string"},"example":"100000"},{"name":"from","in":"query","required":false,"description":"Window start (ms)","schema":{"type":"integer"}},{"name":"to","in":"query","required":false,"description":"Window end (ms, exclusive)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":1000,"default":200}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"from":{"type":"integer","description":"Start of the window read (Unix ms)","example":1792236158000},"events":{"type":"array","items":{"type":"object","description":"{block, time, coin, user, side (long | short: of the liquidated position), method (market | backstop), trades, sz, notional, avgPx, markPx}; userEntity for a named wallet"}}},"required":["from","events"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Too many caller-ranged scans queued: retry after Retry-After","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/liquidations/stats":{"get":{"tags":["Liquidations & positions"],"summary":"Liquidations over a window: totals, per coin, per time bucket, the largest and the most liquidated accounts","operationId":"liquidationStats","description":"Liquidations of every HyperCore perp (or one coin) over 1 h, 24 h, 7 d or 30 d: totals (notional, count, accounts, long / short, market / backstop), per coin, per time bucket, the 20 most liquidated accounts and the 10 largest events.","parameters":[{"name":"window","in":"query","required":false,"description":"Window","schema":{"type":"string","enum":["1h","24h","7d","30d"],"default":"24h"}},{"name":"coin","in":"query","required":false,"description":"One coin","schema":{"type":"string"},"example":"BTC"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"window":{"type":"string","description":"Window","example":"24h"},"from":{"type":"integer","description":"Window start (Unix ms)","example":1792236158000},"to":{"type":"integer","description":"Window end (Unix ms)","example":1792236158000},"bucketMs":{"type":"integer","description":"Bucket width"},"total":{"type":"object","description":"{notional, count, accounts, longNotional, shortNotional, market, backstop}"},"byCoin":{"type":"array","items":{"type":"object","description":"{coin, notional, count, longNotional, shortNotional}"},"description":"Largest first (30)"},"buckets":{"type":"array","items":{"type":"object","description":"{t, longNotional, shortNotional, count}"},"description":"bucketMs apart"},"topAccounts":{"type":"array","items":{"type":"object","description":"{user, notional, count}"},"description":"20 most liquidated accounts"},"largest":{"type":"array","items":{"type":"object","description":"Liquidation events (same shape as /v1/liquidations)"},"description":"10 largest"}},"required":["window","from","to","bucketMs","total","byCoin","buckets","topAccounts","largest"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/positions":{"get":{"tags":["Liquidations & positions"],"summary":"Open positions of one perp, with leverage and liquidation price","operationId":"listPositions","description":"Open positions of one HyperCore perp at the latest holders snapshot: size, side, entry price, notional and unrealized PnL at the mark (last trade), with leverage, margin mode and liquidation price when the snapshot has them. Sort by notional, upnl or distance to liquidation.","parameters":[{"name":"coin","in":"query","required":true,"description":"Perp coin","schema":{"type":"string"},"example":"BTC"},{"name":"side","in":"query","required":false,"description":"One side","schema":{"type":"string","enum":["long","short"]},"example":"long"},{"name":"sort","in":"query","required":false,"description":"Sort","schema":{"type":"string","enum":["notional","upnl","liqDistance"],"default":"notional"}},{"name":"order","in":"query","required":false,"description":"Order (default: desc, liqDistance asc)","schema":{"type":"string","enum":["desc","asc"]}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"asOf":{"type":"integer","description":"Snapshot time (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Snapshot block"},"coin":{"type":"string","description":"Coin","example":"BTC"},"markPx":{"type":["string","null"],"description":"Mark used (exact decimal string, null when unknown)"},"sort":{"type":"string","description":"Sort applied"},"order":{"type":"string","description":"Order applied"},"positions":{"type":"array","items":{"type":"object","description":"{address, szi, side, entryPx, notional, upnl, leverage?, marginMode?, liqPx?, liqDistancePct?, label?}; entity for a named wallet"}}},"required":["asOf","height","coin","markPx","sort","order","positions"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/positions/overview":{"get":{"tags":["Liquidations & positions"],"summary":"Open interest, accounts and unrealized PnL per perp","operationId":"positionsOverview","description":"Per HyperCore perp at the latest holders snapshot: long and short open interest, accounts on each side, unrealized PnL of each side at the mark, and the biggest position.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"asOf":{"type":"integer","description":"Snapshot time (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Snapshot block"},"coins":{"type":"array","items":{"type":"object","description":"{coin, markPx, longOi, shortOi, longAccounts, shortAccounts, upnlLong, upnlShort, biggest: {address, szi, notional}}"}}},"required":["asOf","height","coins"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/positions/liqmap":{"get":{"tags":["Liquidations & positions"],"summary":"Notional that would be liquidated at each price around the mark","operationId":"liquidationMap","description":"Where liquidations would happen: the notional of open positions whose liquidation price falls in each price bucket around the mark (± range), long and short apart, from the latest holders snapshot.","parameters":[{"name":"coin","in":"query","required":true,"description":"Perp coin","schema":{"type":"string"},"example":"BTC"},{"name":"range","in":"query","required":false,"description":"Half-width around the mark (0.3 = ±30 %)","schema":{"type":"number","exclusiveMinimum":0,"maximum":1,"default":0.3}},{"name":"buckets","in":"query","required":false,"description":"Price buckets","schema":{"type":"integer","minimum":1,"maximum":400,"default":80}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coin":{"type":"string","description":"Coin","example":"BTC"},"markPx":{"type":["string","null"],"description":"Centre (exact decimal string, null when unknown)"},"asOf":{"type":"integer","description":"Snapshot time (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Snapshot block"},"range":{"type":"number","description":"Half-width"},"buckets":{"type":"array","items":{"type":"object","description":"{px (bucket centre), longNotional, shortNotional, accounts}"}},"unavailable":{"type":"string","description":"Present when no liquidation price is known for this coin (buckets empty)"}},"required":["coin","markPx","asOf","height","range","buckets","unavailable"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/wallet/{address}":{"get":{"tags":["Wallet"],"summary":"One address on HyperCore, HyperEVM and Elysium","operationId":"getWallet","description":"One address (or a named wallet's handle) on the three layers at once: HyperCore perp account (value, positions with liquidation price) and spot balances; HyperEVM and Elysium token balances with USD values and NFTs; bridge legs in flight and journeys across the layers; latest events (fills, ledger, swaps, transfers, bridges). Each section carries its freshness. Heavy call.","parameters":[{"name":"address","in":"path","required":true,"description":"0x address, or a named wallet's handle <entityId>.<hex>","schema":{"type":"string"},"example":"0xabd08eb33d972302d0b3fc588e4676cb8514f547"},{"name":"includeSpam","in":"query","required":false,"description":"Show spam tokens (tokens.spam: homoglyph, impostor, fake transfers…), flagged spam / spamReason; hidden from lists and USD totals by default","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Wallet"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/entities":{"get":{"tags":["Named wallets"],"summary":"Named wallets: KOLs, traders, funds and their wallets","operationId":"listEntities","description":"Names come from public lists (`sources`): who they attribute a wallet to, not a verified identity. X-Total-Count = entities matching. A named wallet's address (the KOLs, traders and funds of /v1/entities) never appears as such: every field, string, URL and WebSocket frame gives its handle `<entityId>.<hex>` (e.g. `loraclexyz.3f9a1c2e`, stable), and a handle is accepted as input anywhere an address is (path, query, WebSocket filters).","parameters":[{"name":"kind","in":"query","required":false,"description":"Kind contains (whale, market maker…)","schema":{"type":"string"}},{"name":"q","in":"query","required":false,"description":"Name, X handle, alias, wallet address or handle","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Entities","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"name":"offset","in":"query","required":false,"description":"Skip","schema":{"type":"integer","minimum":0,"default":0}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"integer","description":"Entities matching"},"entities":{"type":"array","items":{"$ref":"#/components/schemas/Entity"}}},"required":["total","entities"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/entities/{id}":{"get":{"tags":["Named wallets"],"summary":"One entity: its wallets on HyperCore, HyperEVM and Elysium, totals, 30 days of HyperCore trading","operationId":"getEntity","description":"One named wallet (KOL, trader, fund, market maker) from public attribution lists: its wallets with their HyperCore account value, positions and spot, HyperEVM and Elysium holdings, latest moves; the totals across its wallets; 30 days of HyperCore trading (fills, volume, realized and net PnL, fees, win rate).","parameters":[{"name":"id","in":"path","required":true,"description":"Entity id","schema":{"type":"string"},"example":"loraclexyz"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"entity":{"$ref":"#/components/schemas/Entity"},"totals":{"type":"object","properties":{"hypercoreAccountValue":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ perp account value (exact decimal string)"},"hypercoreSpotUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ spot balances, USD (exact decimal string)"},"hyperevmUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ HyperEVM token balances, USD (exact decimal string)"},"openPerpNotional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ open perp notional (exact decimal string)"}},"required":["hypercoreAccountValue","hypercoreSpotUsd","hyperevmUsd","openPerpNotional"]},"hypercore30d":{"type":["object","null"],"description":"{fills, volume, realizedPnl, fees, netPnl, winRate} over 30 days"},"wallets":{"type":"array","items":{"type":"object","description":"{address, notes?, hypercore:{accountValue, perpNotional, spotUsd, positions[]}, hyperevm:{totalUsd, count, balances[≤10]}, elysium:{…}, recent[≤10]} (the /v1/wallet answer, summed up)"}}},"required":["entity","totals","hypercore30d","wallets"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Unknown entity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/kols/leaderboard":{"get":{"tags":["Named wallets"],"summary":"Named wallets ranked by their trading on a layer: HyperCore PnL / volume / positions, or HyperEVM / Elysium swaps, transfers, bridge legs, holdings","operationId":"kolLeaderboard","description":"Per entity (its wallets summed). hypercore: fills of the window from the per-user fills table, open perp positions of the latest snapshot at mark (rows: KolRow; sorts netPnl, realizedPnl, volume, fills, winRate, openNotional; default window 7d). hyperevm / elysium: swaps sent by its wallets, ERC-20 transfers, bridge legs and HyperEVM holdings (rows: EvmKolRow; sorts volume, swaps, transfers, netBuy, holdings, bridges, lastActivity; default window 24h). An address is the same account on every layer: every named wallet counts on each. Without the address indexes on the indexer database, an EVM layer answers 24h only (7d / 30d: 503). hypercore: cached 60 s. EVM layers: every window computed in the background (24h every minute, 7d every 5 min, 30d every 15 min) and answered at once from the last one, `computedAt` / `asOfBlock` saying how fresh; right after a restart, a window not computed yet answers 503 with Retry-After (seconds) within ~2 s.","parameters":[{"name":"layer","in":"query","required":false,"description":"Layer","schema":{"type":"string","enum":["hypercore","hyperevm","elysium"],"default":"hypercore"}},{"name":"window","in":"query","required":false,"description":"Window (hypercore: 7d by default, EVM layers: 24h)","schema":{"type":"string","enum":["24h","7d","30d"]}},{"name":"sort","in":"query","required":false,"description":"Sort (per layer, see above; default netPnl / volume)","schema":{"type":"string","enum":["netPnl","realizedPnl","volume","fills","winRate","openNotional","swaps","transfers","netBuy","holdings","bridges","lastActivity"]}},{"name":"order","in":"query","required":false,"description":"Order","schema":{"type":"string","enum":["desc","asc"],"default":"desc"}},{"name":"kind","in":"query","required":false,"description":"Kind contains (whale, market maker…)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"includeSpam","in":"query","required":false,"description":"Show spam tokens (tokens.spam: homoglyph, impostor, fake transfers…), flagged spam / spamReason; hidden from lists and USD totals by default","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"window":{"type":"string","description":"Window"},"from":{"type":"integer","description":"Window start (Unix ms)","example":1792236158000},"to":{"type":"integer","description":"Window end (EVM: the indexed head) (Unix ms)","example":1792236158000},"positionsAsOf":{"type":["integer","null"],"description":"hypercore"},"scope":{"$ref":"#/components/schemas/EvmScope"},"holdingsAsOf":{"type":["integer","null"],"description":"EVM layers: time of the holdings (indexed head)"},"computedAt":{"type":"integer","description":"EVM layers: when this leaderboard was computed (background, see above) (Unix ms)","example":1792236158000},"asOfBlock":{"type":"integer","description":"EVM layers: indexed head block it was computed at"},"testnet":{"type":"boolean","description":"Elysium testnet: no USD values"},"entities":{"type":"integer","description":"Entities with activity"},"sort":{"type":"string","description":"Sort"},"order":{"type":"string","description":"Order"},"rows":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/KolRow"},{"$ref":"#/components/schemas/EvmKolRow"}]}}},"required":["layer","window","rows"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}},"/kols/activity":{"get":{"tags":["Named wallets"],"summary":"Recent moves of the named wallets, newest first: HyperCore fills, HyperEVM / Elysium swaps and transfers","operationId":"kolActivity","description":"hypercore: fills of at least minNotional (default 1000), cursor <time ms>:<block>:<event>. hyperevm / elysium: DEX swaps sent by the named wallets and their ERC-20 transfers (both sides), cursor <block>:<logIndex>, a widening window (1 h, 6 h, 24 h, then 7 / 30 days through the address indexes): `scope` says what was read; the first page also carries their latest bridge legs (`bridges`, 7 days). minNotional on EVM layers: only priced moves of at least that USD value.","parameters":[{"name":"layer","in":"query","required":false,"description":"Layer","schema":{"type":"string","enum":["hypercore","hyperevm","elysium"],"default":"hypercore"}},{"name":"entity","in":"query","required":false,"description":"One entity only","schema":{"type":"string"},"example":"loraclexyz"},{"name":"kind","in":"query","required":false,"description":"Entities whose kind contains this","schema":{"type":"string"}},{"name":"minNotional","in":"query","required":false,"description":"Smallest USD value (hypercore: px × sz, default 1000; EVM: none by default)","schema":{"type":"string"}},{"name":"before","in":"query","required":false,"description":"Cursor (`next`)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}},{"name":"includeSpam","in":"query","required":false,"description":"Show spam tokens (tokens.spam: homoglyph, impostor, fake transfers…), flagged spam / spamReason; hidden from lists and USD totals by default","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"minNotional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Smallest notional (exact decimal string)"},"scope":{"$ref":"#/components/schemas/EvmScope"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/KolItem"}},"next":{"type":["string","null"]},"bridges":{"type":"array","items":{"$ref":"#/components/schemas/KolItem"},"description":"EVM layers, first page: the latest bridge legs of the named wallets"}},"required":["layer","rows"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, unknown, disabled or expired key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment required. A heavy call of a key whose credits are used up (billing on): top up (`checkoutUrl`). With x402 on (pay with USDC, disabled until announced): a request with no key at all gets the x402 payment requirements, a credit pack to buy on each network accepted (Base, Arbitrum One, HyperEVM; cheapest settlement first, the first `recommended`), in the `PAYMENT-REQUIRED` header (x402 v2, base64 JSON) and in this body (x402 v1 for the networks that have a v1 name, every network in `x402Networks`); packs start at $0.01, a bigger one is asked with `?x402_pack=<USD>` on the same URL; the same request sent again with the signed payment (`PAYMENT-SIGNATURE`, or `X-PAYMENT` in v1) is served, its answer carrying the new key in `X-Femtos-Key` and the settlement in `PAYMENT-RESPONSE` (`X-PAYMENT-RESPONSE`). An exhausted key's 402 offers the same packs: paid, they credit that key's account. Prices: the body, never fixed here.","headers":{"PAYMENT-REQUIRED":{"description":"x402 v2 PaymentRequired, base64 JSON (x402 on only)","schema":{"type":"string"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/PaymentRequired"}}}},"404":{"description":"Unknown entity","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): {error, unavailable}","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Your API key"},"apiKey":{"type":"apiKey","in":"header","name":"X-API-KEY","description":"Your API key (same key, other header)"}},"schemas":{"EntityRef":{"type":"object","description":"A named wallet: who public lists attribute it to (`sources` on /v1/entities), not a verified identity. Next to the subject address of a row as `entity`, next to the other parties as `<field>Entity` (fromEntity, toEntity, buyerEntity…); absent when the wallet is not named. Its address is given as its handle `<entityId>.<hex>` in every field, accepted as an address anywhere. A caller who already knows a raw address can still ask about it (/v1/wallet/0x…) and see whether it is named.","properties":{"id":{"type":"string","description":"Entity id (/v1/entities/{id})","example":"loraclexyz"},"name":{"type":["string","null"],"description":"Display name"},"x":{"type":["string","null"],"description":"X (Twitter) handle, without @"},"kinds":{"type":"array","items":{"type":"string"},"description":"Trader / investor kinds the lists give (Momentum Trader, Whale, Market Maker…)"},"confidence":{"type":["string","null"],"enum":["high","medium","low",null],"description":"How sure the attribution is (our research rates each wallet); null = from a public list, unrated"}},"required":["id","name","x","kinds","confidence"]},"Entity":{"type":"object","properties":{"id":{"type":"string","description":"Entity id","example":"loraclexyz"},"name":{"type":["string","null"]},"x":{"type":["string","null"]},"kinds":{"type":"array","items":{"type":"string"}},"aliases":{"type":"array","items":{"type":"string"},"description":"Other names the lists use"},"sources":{"type":"array","items":{"type":"string"},"description":"Lists the entity comes from (research:hyperliquid, research:evm, sheet:debank, dataset1, debank…)"},"confidence":{"type":["string","null"],"enum":["high","medium","low",null],"description":"Best confidence of its wallets; null = public lists only"},"wallets":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"Wallet: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"chain":{"type":"string","description":"Where the source saw it (ethereum, hyperliquid, multi-evm…)"},"confidence":{"type":"string","enum":["high","medium","low"],"description":"Of this attribution; absent = public list, unrated"},"notes":{"type":"array","items":{"type":"string"}}},"required":["address"]}}},"required":["id","name","x","kinds","confidence","aliases","sources","wallets"]},"KolRow":{"type":"object","properties":{"entity":{"$ref":"#/components/schemas/EntityRef"},"wallets":{"type":"integer","description":"Named wallets of the entity"},"activeWallets":{"type":"integer","description":"Wallets with fills in the window"},"fills":{"type":"integer","description":"HyperCore fills in the window"},"volume":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ px × sz, quote units (USDC on perps) (exact decimal string)"},"realizedPnl":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ closedPnl of the fills (exact decimal string)"},"fees":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ fees paid in USDC (exact decimal string)"},"netPnl":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"realizedPnl − fees (exact decimal string)"},"winRate":{"type":["number","null"],"description":"Closing fills with a positive closedPnl / closing fills (0–1)"},"closingFills":{"type":"integer","description":"Fills that closed some position"},"lastTradeAt":{"type":["integer","null"],"description":"Last fill (Unix ms)"},"open":{"type":"object","properties":{"positions":{"type":"integer","description":"Open perp positions (latest snapshot)"},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ |szi| × mark (exact decimal string)"},"upnl":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ unrealized PnL at mark (exact decimal string)"},"top":{"type":"array","items":{"type":"object"},"description":"Largest 3: {wallet, coin, szi, side, notional, upnl}"}},"required":["positions","notional","upnl","top"]}},"required":["entity","wallets","activeWallets","fills","volume","realizedPnl","fees","netPnl","winRate","closingFills","lastTradeAt","open"]},"KolItem":{"type":"object","properties":{"layer":{"type":"string","enum":["hypercore","hyperevm","elysium"]},"kind":{"type":"string","enum":["trade","liquidation","swap","transfer","bridge"],"description":"trade / liquidation: HyperCore; swap (DEX, the wallet as tx sender), transfer (ERC-20), bridge (a leg: core_evm on hyperevm, evm_elysium on elysium): EVM layers"},"t":{"type":"integer","description":"Event time (Unix ms)","example":1792236158000},"wallet":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"Named wallet: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"entity":{"$ref":"#/components/schemas/EntityRef"},"walletChain":{"type":"string","description":"Where the label source saw the wallet (hyperliquid, ethereum, multi-evm…), when it says"},"coin":{"type":"string","description":"HyperCore market"},"pair":{"type":"string","description":"EVM pool"},"base":{"type":["string","null"],"description":"swap: base symbol"},"quote":{"type":["string","null"],"description":"swap: quote symbol"},"side":{"type":"string","enum":["buy","sell","long","short","in","out"],"description":"trade / swap: the wallet bought or sold; liquidation: the side liquidated; transfer: tokens into / out of the wallet; bridge: funds into / out of the item layer (core_evm legs: HyperEVM, Orbit legs: Elysium)"},"px":{"type":["string","null"],"description":"Price (exact decimal string, null when unknown)"},"sz":{"type":["string","null"],"description":"Size (exact decimal string, null when unknown)"},"notional":{"type":["string","null"],"description":"USD value: px × sz on perps; swap: USD volume as the indexer priced it; transfer: amount × the token pool price; bridge: null. Elysium testnet: null (exact decimal string, null when unknown)"},"dir":{"type":"string","description":"HyperCore fill direction (Open Long, Close Short…), REST only"},"closedPnl":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Realized PnL of the fill, REST only (exact decimal string)"},"tid":{"type":"string","description":"Trade id"},"hash":{"type":"string","description":"Provenance: transaction hash (HyperCore: the fill's; bridge: the cited leg's)"},"block":{"type":"integer","description":"Provenance: block (bridge: the cited leg's)"},"logIndex":{"type":"integer","description":"Provenance, EVM layers: log index of the swap / Transfer (bridge: evm_to_core legs)"},"token":{"type":"string","description":"transfer: ERC-20 address; bridge: Core token name (core_evm), HyperEVM token address or HYPE (evm_elysium)"},"symbol":{"type":["string","null"],"description":"transfer: token symbol"},"amount":{"type":["string","null"],"description":"transfer / bridge: amount in token units (exact decimal string, null when unknown)"},"amountRaw":{"type":["string","null"],"description":"bridge (Orbit ERC-20): amount in base units (exact decimal string, null when unknown)"},"counterparty":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"transfer: the other party: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"route":{"type":"string","enum":["core_evm","evm_elysium"],"description":"bridge: which bridge"},"direction":{"type":"string","enum":["evm_to_core","core_to_evm","to_child","to_parent"],"description":"bridge: the leg direction"},"status":{"type":"string","description":"bridge: the leg state (as /v1/bridges): one item per state"},"testnet":{"type":"boolean","description":"Elysium testnet: no USD values"},"spam":{"type":"boolean","description":"EVM: a token of the move is flagged spam (tokens.spam); only with includeSpam=true / include_spam: true"},"spamReason":{"type":["string","null"],"description":"homoglyph:<T>, impostor:<T>, phishing_name, fake_transfers, unreadable_balance, verifier_ignore"},"liquidation":{"type":"boolean","description":"REST: the fill liquidated the wallet"},"cursor":{"type":"string","description":"REST: this row as `before` (HyperCore <time>:<block>:<event>, EVM <block>:<logIndex>)"},"id":{"type":"string","description":"WS: event id (dedupe)"}},"required":["layer","kind","t","wallet","entity","side"]},"EvmKolRow":{"type":"object","description":"One entity on an EVM layer (layer=hyperevm|elysium)","properties":{"entity":{"$ref":"#/components/schemas/EntityRef"},"wallets":{"type":"integer","description":"Named wallets of the entity"},"activeWallets":{"type":"integer","description":"Wallets with swaps or transfers in the window"},"swaps":{"type":"integer","description":"DEX swaps sent by its wallets"},"volumeUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ USD volume of the priced swaps (exact decimal string)"},"buyUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ USD of the buys (exact decimal string)"},"sellUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ USD of the sells (exact decimal string)"},"netBuyUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"buyUsd − sellUsd (exact decimal string)"},"unpricedSwaps":{"type":"integer","description":"Swaps the indexer could not price"},"transfersIn":{"type":"integer","description":"ERC-20 transfers received"},"transfersOut":{"type":"integer","description":"ERC-20 transfers sent"},"transferInUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ USD received (priced tokens) (exact decimal string)"},"transferOutUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ USD sent (priced tokens) (exact decimal string)"},"bridges":{"type":"integer","description":"Bridge legs (hyperevm: Core <> HyperEVM and HyperEVM <> Elysium; elysium: Orbit)"},"holdingsUsd":{"type":["string","null"],"description":"HyperEVM: USD held at the indexed head (null on Elysium testnet) (exact decimal string, null when unknown)"},"holdingsComplete":{"type":["boolean","null"],"description":"Every token held had a price"},"lastActivityAt":{"type":["integer","null"],"description":"Last swap, transfer or bridge leg (Unix ms)"},"topTokens":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Base token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"symbol":{"type":["string","null"]},"volumeUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"USD (exact decimal string)"},"swaps":{"type":"integer","description":"Swaps"}},"required":["token","symbol","volumeUsd","swaps"]},"description":"Most traded bases (3)"}},"required":["entity","wallets","activeWallets","swaps","volumeUsd","buyUsd","sellUsd","netBuyUsd","unpricedSwaps","transfersIn","transfersOut","transferInUsd","transferOutUsd","bridges","holdingsUsd","holdingsComplete","lastActivityAt","topTokens"]},"EvmScope":{"type":"object","description":"What an EVM read covered, per kind: from which block / time to the indexed head. windowSec 30 days through an address index (indexed: true), else 24 h of blocks at most (HyperEVM until its trader / sender / recipient indexes exist).","properties":{"toBlock":{"type":"integer","description":"Indexed head block"},"to":{"type":"integer","description":"Indexed head time (Unix ms)","example":1792236158000},"swaps":{"type":"object","properties":{"fromBlock":{"type":"integer","description":"First block read"},"from":{"type":"integer","description":"Window start (Unix ms)","example":1792236158000},"windowSec":{"type":"integer","description":"Window (s)"},"indexed":{"type":"boolean"}},"required":["fromBlock","from","windowSec","indexed"]},"transfers":{"type":"object","properties":{"fromBlock":{"type":"integer","description":"First block read"},"from":{"type":"integer","description":"Window start (Unix ms)","example":1792236158000},"windowSec":{"type":"integer","description":"Window (s)"},"indexed":{"type":"boolean"}},"required":["fromBlock","from","windowSec","indexed"]}}},"PaymentRequired":{"type":"object","description":"HTTP 402: a heavy call of an exhausted key, or (x402 on) a request with no key","properties":{"error":{"type":"string","description":"payment_required (or why a payment was refused: payment_refused, payment_failed)"},"message":{"type":"string","description":"What to do"},"reason":{"type":"string","description":"A refused payment: the x402 error code (invalid_exact_evm_signature, insufficient_funds, invalid_exact_evm_nonce_already_used…)"},"checkoutUrl":{"type":"string","description":"Top up a key (agents: POST it with the key)"},"freeKeyUrl":{"type":"string","description":"Get a free key, no payment (keyless 402)"},"x402Version":{"type":"integer","const":1,"description":"x402 on: the v1 payment requirements follow"},"accepts":{"type":"array","items":{"type":"object","properties":{"scheme":{"type":"string","const":"exact"},"network":{"type":"string","description":"x402 v1 network name (base); the v2 header has every network by CAIP-2 id"},"maxAmountRequired":{"type":"string","description":"USDC atomic units (6 decimals) of the credit pack"},"asset":{"type":"string","description":"USDC on that network"},"payTo":{"type":"string","description":"Femtos address receiving the USDC"},"resource":{"type":"string","description":"The URL asked"},"description":{"type":"string","description":"What the payment buys"},"maxTimeoutSeconds":{"type":"integer","description":"Validity the authorization should give itself"},"extra":{"type":"object","properties":{"name":{"type":"string","description":"EIP-712 domain name of the token (USD Coin, USDC)"},"version":{"type":"string","description":"EIP-712 domain version (2)"},"recommended":{"type":"boolean","description":"The cheapest network to settle (first entry)"},"settleCostUsd":{"type":"number","description":"Our estimate of one settlement on that network (USD)"}},"required":["name","version","recommended","settleCostUsd"]}},"required":["scheme","network","maxAmountRequired","asset","payTo","resource","description","maxTimeoutSeconds","extra"]},"description":"x402 on: one entry per network with a v1 name (EIP-3009 transferWithAuthorization, signed EIP-712)"},"x402Networks":{"type":"array","items":{"type":"object","properties":{"network":{"type":"string","description":"CAIP-2"},"name":{"type":"string","description":"Chain"},"chainId":{"type":"integer","description":"EVM chain id"},"asset":{"type":"string","description":"USDC"},"amount":{"type":"string","description":"USDC atomic units of the pack offered there"},"payTo":{"type":"string","description":"Femtos address"},"settleCostUsd":{"type":"number"},"recommended":{"type":"boolean"}},"required":["network","name","chainId","asset","amount","payTo","settleCostUsd","recommended"]},"description":"x402 on: every offer, in the order of the v2 `accepts` (cheapest settlement first)"},"packsUsd":{"type":"array","items":{"type":"number"},"description":"x402 on: the credit packs (USD)"},"packParam":{"type":"string","description":"x402 on: query parameter asking for a bigger pack (x402_pack)"},"networksUrl":{"type":"string","description":"x402 on: the network ranking (GET, no key)"}},"required":["error","message","reason","checkoutUrl","freeKeyUrl","x402Version","accepts","x402Networks","packsUsd","packParam","networksUrl"]},"Error":{"type":"object","properties":{"error":{"type":"string","description":"Error message"},"reqId":{"type":"string","description":"5xx without a message of ours: the request id to quote to support (the detail stays in our logs)"}},"required":["error","reqId"]},"Unavailable":{"type":"object","description":"HTTP 503: the source of the layer cannot answer","properties":{"error":{"type":"string","description":"Why the data is not available"},"unavailable":{"type":"string","description":"Same text"},"retryAfter":{"type":"integer","description":"An answer computed in the background, not there yet (process start): retry in that many seconds (also the Retry-After header)"}},"required":["error","unavailable","retryAfter"]},"Market":{"type":"object","description":"One tradable market","properties":{"layer":{"type":"string","enum":["hypercore","hyperevm","elysium"]},"id":{"type":"string","description":"Market id: HyperCore coin, EVM pair address (use as `market` / `pair`)","example":"0x6c9a33e3b592c0d65b3ba59355d5be0d38259285"},"symbol":{"type":"string","description":"BASE/QUOTE","example":"USDC/WHYPE"},"base":{"type":"string","description":"Base symbol"},"quote":{"type":"string","description":"Quote symbol"},"kind":{"type":"string","enum":["perp","spot","hip3","outcome","pool"]},"price":{"type":["string","null"],"description":"Last price in quote (EVM: last daily close) (exact decimal string, null when unknown)"},"priceUsd":{"type":["string","null"],"description":"EVM pools: base price in USD at the last daily close (exact decimal string, null when unknown)"},"change24h":{"type":["number","null"],"description":"% change over 24 h"},"volume24hUsd":{"type":["string","null"],"description":"24 h volume, USD (exact decimal string, null when unknown)"},"trades24h":{"type":"integer","description":"24 h trades"},"protocol":{"type":"string","description":"EVM pools: DEX protocol","example":"hyperswap_v3"},"baseAddress":{"type":"string","description":"EVM pools: base token"},"quoteAddress":{"type":"string","description":"EVM pools: quote token"},"feeTier":{"type":"integer","description":"EVM pools: fee tier"},"createdAt":{"type":["integer","null"],"description":"EVM pools: pool creation (ms)"},"mcapUsd":{"type":["string","null"],"description":"EVM pools: market cap at the last daily close (exact decimal string, null when unknown)"},"hooks":{"type":["string","null"],"description":"V4 / Infinity hooks contract"},"ambiguous":{"type":"boolean","description":"Another active pool has the same symbol"},"spam":{"type":"boolean","description":"EVM pools: base or quote is a spam token (tokens.spam); out of /v1/markets unless includeSpam"},"spamReason":{"type":["string","null"],"description":"EVM pools: the spam token's reason. Why the indexer flags it, comma list, strongest first: homoglyph:<T> (looks like token T), impostor:<T> (claims to be T; never alone), phishing_name, fake_transfers, unreadable_balance (balanceOf reverts: no ERC-20 behind its Transfer logs), verifier_ignore; null when not spam"}},"required":["layer","id","symbol","base","quote","kind","price","change24h","volume24hUsd","trades24h"]},"LaunchRow":{"type":"object","description":"One launch (GET /v1/launches, WS elysium.launches / hyperevm.launches). Elysium = Ascend; HyperEVM = LiquidLaunch (layer, bondedAt, bondingProgress, curvePair, dexPair, imageUri)","properties":{"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Launched token (Elysium)","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"symbol":{"type":["string","null"],"example":"SMPL"},"name":{"type":["string","null"],"example":"Sample Token"},"decimals":{"type":"integer","description":"Token decimals","example":18},"launchpad":{"type":"string","description":"Launchpad contract address (lowercase)"},"launchpadName":{"type":"string","description":"Launchpad name","example":"ascend"},"pair":{"type":"string","description":"Pool key: <CLPoolManager>:<PoolId> (use as `market` / `pair`)","example":"0x12e84206cb53ae0df055482ebc4658635096e1aa:0x8a9480e70c99d18d9bde3a7f5cd565be58064945963f62e0c5cc303b6b627847"},"poolId":{"type":"string","description":"bytes32 PoolId"},"creator":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"Creator (dev) wallet: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"quote":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Quote token (USDC)","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"quoteSymbol":{"type":["string","null"],"example":"USDC"},"launchedAt":{"type":"integer","description":"Block time of the launch (Unix ms)","example":1792236158000},"block":{"type":"integer","description":"Launch block"},"tx":{"type":"string","description":"Launch transaction hash"},"logIndex":{"type":"integer","description":"Log index of the Launched event"},"supply":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Total supply (1B for Ascend) (exact decimal string)","example":"1000000000"},"supplySeeded":{"type":["string","null"],"description":"Tokens seeded into the pool at launch (exact decimal string, null when unknown)"},"devBuyTokens":{"type":["string","null"],"description":"Tokens bought by the creator in the launch transaction (exact decimal string, null when unknown)"},"priceUsd":{"type":["string","null"],"description":"Last swap price in USD (exact decimal string, null when unknown)"},"priceQuote":{"type":["string","null"],"description":"Last swap price in the quote token (exact decimal string, null when unknown)"},"mcapUsd":{"type":["string","null"],"description":"supply × priceUsd, rounded to the cent (exact decimal string, null when unknown)"},"volume24hUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Swap volume over the last 24 h, USD (exact decimal string)"},"trades24h":{"type":"integer","description":"Swaps over the last 24 h"},"holders":{"type":"integer","description":"Addresses with a positive balance, system addresses excluded (pool, PoolManager, hooks, launchpad, gateways, zero/dead)"},"top10Share":{"type":["number","null"],"description":"Sum of the 10 largest non-system balances / supply (0–1)"},"devHoldsShare":{"type":["number","null"],"description":"Creator balance / supply (0–1)"},"devSold":{"type":"boolean","description":"The creator sold the token at least once in this pool"},"volumeSinceLaunchUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Elysium: volume of the pool since the launch, USD (exact decimal string)"},"tradesSinceLaunch":{"type":"integer","description":"Elysium: swaps of the pool since the launch"},"ascend":{"$ref":"#/components/schemas/AscendProgress"},"layer":{"type":"string","enum":["elysium","hyperevm"]},"bondedAt":{"type":["integer","null"],"description":"LiquidLaunch: bonding time (ms), null while on the curve"},"bondingProgress":{"type":["number","null"],"description":"LiquidLaunch: curve progress 0–1 (1 once bonded; estimate from the HYPE reserve vs the median reserve of the latest bondings, capped at 0.99)"},"curvePair":{"type":"string","description":"LiquidLaunch: bonding-curve pair (= the token address)"},"dexPair":{"type":["string","null"],"description":"LiquidLaunch: DEX pair after bonding (null before); `pair` is this one once bonded"},"imageUri":{"type":["string","null"],"description":"LiquidLaunch: token image"},"spam":{"type":"boolean","description":"Flagged spam by the indexer (tokens.spam). GET /v1/tokens/spam lists them"},"spamReason":{"type":["string","null"],"description":"Why the indexer flags it, comma list, strongest first: homoglyph:<T> (looks like token T), impostor:<T> (claims to be T; never alone), phishing_name, fake_transfers, unreadable_balance (balanceOf reverts: no ERC-20 behind its Transfer logs), verifier_ignore; null when not spam","example":"homoglyph:USDC"}},"required":["token","symbol","name","decimals","launchpad","launchpadName","pair","poolId","creator","quote","quoteSymbol","launchedAt","block","tx","logIndex","supply","supplySeeded","devBuyTokens","priceUsd","priceQuote","mcapUsd","volume24hUsd","trades24h","holders","top10Share","devHoldsShare","devSold","spam","spamReason"]},"AscendCriterion":{"type":"object","description":"One \"Ascended\" criterion","properties":{"value":{"type":["string","number","null"],"description":"Current value: USD decimal string (mcapUsd, volumeUsd), integer (holders), share 0–1 (top10Share)"},"op":{"type":"string","enum":["min","max"]},"threshold":{"type":["string","number","null"],"description":"null: no threshold for this criterion"},"met":{"type":["boolean","null"]},"progress":{"type":["number","null"],"description":"min: value / threshold capped at 1; max: 1 when met, else threshold / value"}},"required":["value","op","threshold","met","progress"]},"AscendProgress":{"type":"object","description":"Progress of an Ascend launch toward \"Ascended\" (Elysium rows only)","properties":{"status":{"type":["string","null"],"enum":["ascended","launched",null],"description":"\"ascended\" = every criterion with a threshold is met. Ascend publishes no threshold and its launchpad contract has no graduation state or event (checked on chain): `ascend.status` is derived from the thresholds of the request, else of the server (none configured: null)."},"thresholds":{"type":["string","null"],"enum":["config","request",null],"description":"Whose thresholds: the server (ASCEND_THRESHOLDS) or the request"},"met":{"type":"integer","description":"Criteria met"},"of":{"type":"integer","description":"Criteria with a threshold"},"criteria":{"type":"object","properties":{"mcapUsd":{"$ref":"#/components/schemas/AscendCriterion"},"holders":{"$ref":"#/components/schemas/AscendCriterion"},"volumeUsd":{"$ref":"#/components/schemas/AscendCriterion"},"top10Share":{"$ref":"#/components/schemas/AscendCriterion"}},"required":["mcapUsd","holders","volumeUsd","top10Share"]}},"required":["status","thresholds","met","of","criteria"]},"LaunchHolders":{"type":"object","description":"Holders of a launched token, largest first","properties":{"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Launched token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"symbol":{"type":["string","null"]},"spam":{"type":"boolean","description":"Flagged spam by the indexer (tokens.spam). GET /v1/tokens/spam lists them"},"spamReason":{"type":["string","null"],"description":"Why the indexer flags it, comma list, strongest first: homoglyph:<T> (looks like token T), impostor:<T> (claims to be T; never alone), phishing_name, fake_transfers, unreadable_balance (balanceOf reverts: no ERC-20 behind its Transfer logs), verifier_ignore; null when not spam","example":"homoglyph:USDC"},"pair":{"type":"string","description":"Launch pool"},"decimals":{"type":"integer","description":"Token decimals"},"supply":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Total supply (exact decimal string)"},"totalHolders":{"type":"integer","description":"Positive balances, system addresses excluded"},"concentration":{"type":"object","properties":{"top1Share":{"type":["number","null"],"description":"Largest holder / supply"},"top10Share":{"type":["number","null"],"description":"10 largest / supply"},"top20Share":{"type":["number","null"],"description":"20 largest / supply"},"top50Share":{"type":["number","null"],"description":"50 largest / supply"},"hhi":{"type":["number","null"],"description":"Herfindahl index of the non-system balances over the supply (Σ share², 1 = one holder)"},"devShare":{"type":["number","null"],"description":"Creator / supply"},"flaggedShare":{"type":["number","null"],"description":"Early buyers cited by a signal rule: their balances / supply (null while tags are pending)"},"heldShare":{"type":["number","null"],"description":"Non-system balances / supply (the rest: pool liquidity, treasuries, burned)"}},"required":["top1Share","top10Share","top20Share","top50Share","hhi","devShare","flaggedShare","heldShare"]},"system":{"type":"object","properties":{"holders":{"type":"integer","description":"System addresses holding the token (Infinity vault, PoolManager, Ascend treasuries, launchpad, zero/dead)"},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Their balance (exact decimal string)"},"shareOfSupply":{"type":["number","null"],"description":"Their share of supply"}},"required":["holders","amount","shareOfSupply"]},"offset":{"type":"integer","description":"Rows skipped"},"limit":{"type":"integer","description":"Rows asked"},"tags":{"type":"string","enum":["complete","pending"],"description":"pending: the launch detail the early / flags tags come from is still loading (dev is always tagged)"},"next":{"type":["integer","null"],"description":"offset of the next page"},"holders":{"type":"array","items":{"type":"object","properties":{"rank":{"type":"integer","description":"1 = largest"},"address":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"Holder: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Balance (exact decimal string)"},"shareOfSupply":{"type":["number","null"],"description":"Balance / supply"},"firstSeenAt":{"type":["integer","null"],"description":"First balance change (ms)"},"lastActiveAt":{"type":["integer","null"],"description":"Last balance change (ms)"},"tag":{"type":"string","enum":["dev","early"]},"flags":{"type":"array","items":{"type":"string"},"description":"Signal rules citing this early buyer"},"entity":{"type":"object","description":"Named wallet (labels), when known"}},"required":["rank","address","amount","shareOfSupply"]}},"asOf":{"type":"integer","description":"Head time of the layer (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Head block of the layer"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["token","totalHolders","concentration","system","holders","next"]},"AscendSwap":{"type":"object","description":"A swap of an Ascend pool (WS ascend.swaps)","properties":{"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Launched token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"symbol":{"type":["string","null"]},"pair":{"type":"string","description":"Launch pool"},"launchpad":{"type":"string","description":"Launchpad name","example":"ascend"},"side":{"type":"string","enum":["buy","sell"],"description":"Side of the launched token"},"tokens":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Launched tokens bought / sold (exact decimal string)"},"quoteAmount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Quote token amount (USDC) (exact decimal string)"},"usd":{"type":["string","null"],"description":"USD value (exact decimal string, null when unknown)"},"priceUsd":{"type":["string","null"],"description":"Token price after the swap, USD (exact decimal string, null when unknown)"},"mcapUsd":{"type":["string","null"],"description":"Market cap after the swap, USD (exact decimal string, null when unknown)"},"trader":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"tx.from: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"t":{"type":"integer","description":"Block time (Unix ms)","example":1792236158000},"block":{"type":"integer","description":"Block"},"tx":{"type":"string","description":"Transaction hash (provenance)"},"logIndex":{"type":"integer","description":"Log index of the Swap event (provenance)"},"id":{"type":"string","description":"<tx>:<log index>, same id as /v1/trades and elysium.trades"}},"required":["token","symbol","pair","launchpad","side","tokens","quoteAmount","usd","priceUsd","mcapUsd","trader","t","block","tx","logIndex","id"]},"AscendStatusEvent":{"type":"object","description":"A transition of the derived status (WS ascend.status). Ascend publishes no threshold and its launchpad contract has no graduation state or event (checked on chain): `ascend.status` is derived from the thresholds of the request, else of the server (none configured: null).","properties":{"kind":{"type":"string","enum":["ascended","lost","criterion"],"description":"ascended: the derived status became ascended; lost: it left it; criterion: one criterion flipped"},"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Launched token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"symbol":{"type":["string","null"]},"pair":{"type":"string","description":"Launch pool"},"launchpad":{"type":"string","description":"Launchpad name"},"previous":{"type":["string","null"]},"status":{"type":["string","null"]},"crossed":{"type":"array","items":{"type":"object","properties":{"criterion":{"type":"string","enum":["mcapUsd","holders","volumeUsd","top10Share"]},"met":{"type":"boolean"}},"required":["criterion","met"]}},"ascend":{"$ref":"#/components/schemas/AscendProgress"},"t":{"type":"integer","description":"Block time of the swap that moved the figures (Unix ms)","example":1792236158000},"block":{"type":"integer","description":"Its block"}},"required":["kind","token","symbol","pair","launchpad","previous","status","crossed","ascend","t","block"]},"Signal":{"type":"object","description":"A coordinated-buying hint (not a proof)","properties":{"rule":{"type":"string","enum":["launch_block","same_block","dev_funded","common_funder","dev_transferred","dev_sold"]},"severity":{"type":"string","enum":["high","medium","info"]},"addresses":{"type":"array","items":{"type":"string"}},"detail":{"type":"string","description":"Human-readable explanation"},"block":{"type":"integer","description":"Block concerned (launch_block, same_block)"},"funder":{"type":"string","description":"Funding address (dev_funded, common_funder)"},"evidence":{"type":"array","items":{"$ref":"#/components/schemas/Funding"},"description":"Funding transfers (≤ 20)"}},"required":["rule","severity","addresses","detail"]},"Funding":{"type":"object","properties":{"from":{"type":"string","description":"Sender"},"to":{"type":"string","description":"Early buyer"},"kind":{"type":"string","enum":["native","token"]},"token":{"type":["string","null"]},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Amount (exact decimal string)"},"t":{"type":"integer","description":"Time (Unix ms)","example":1792236158000},"block":{"type":"integer","description":"Block"},"tx":{"type":"string","description":"Transaction"}},"required":["from","to","kind","token","amount","t","block","tx"]},"LaunchDetail":{"type":"object","properties":{"launch":{"$ref":"#/components/schemas/LaunchRow"},"metrics":{"type":"object","description":"Raw \"Ascended\" metrics: Ascend's thresholds are not published, nothing is declared qualified","properties":{"priceUsd":{"type":["string","null"],"description":"Last price, USD (exact decimal string, null when unknown)"},"mcapUsd":{"type":["string","null"],"description":"Market cap, USD (exact decimal string, null when unknown)"},"athMcapUsd":{"type":["string","null"],"description":"All-time-high market cap (max of the 1h candle highs) (exact decimal string, null when unknown)"},"holders":{"type":"integer","description":"Unique holders, system excluded"},"top10Share":{"type":["number","null"],"description":"Top 10 share of supply"},"devHoldsShare":{"type":["number","null"],"description":"Creator share of supply"},"volume24hUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"24 h volume, USD (exact decimal string)"},"trades24h":{"type":"integer","description":"24 h swaps"},"volumeSinceLaunchUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Volume since launch, USD (exact decimal string)"},"tradesSinceLaunch":{"type":"integer","description":"Swaps since launch"},"traders":{"type":"integer","description":"Distinct traders (tx.from)"},"buyers":{"type":"integer","description":"Distinct buyers"},"sellers":{"type":"integer","description":"Distinct sellers"},"firstTradeAt":{"type":["integer","null"]},"lastTradeAt":{"type":["integer","null"]},"earlyBuyers":{"type":"integer","description":"Early buyers in the window"},"flaggedWallets":{"type":"integer","description":"Wallets cited by an address rule"}},"required":["priceUsd","mcapUsd","athMcapUsd","holders","top10Share","devHoldsShare","volume24hUsd","trades24h","volumeSinceLaunchUsd","tradesSinceLaunch","traders","buyers","sellers","firstTradeAt","lastTradeAt","earlyBuyers","flaggedWallets"]},"dev":{"type":"object","properties":{"address":{"type":"string","description":"Creator"},"devBuyTokens":{"type":["string","null"],"description":"Dev buy at launch (exact decimal string, null when unknown)"},"balance":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Current balance (exact decimal string)"},"holdsShare":{"type":["number","null"],"description":"Share of supply"},"buys":{"type":"object"},"sells":{"type":"object"},"sold":{"type":"boolean"},"transfersOut":{"type":"array","items":{"type":"object"}}},"required":["address","devBuyTokens","balance","holdsShare","buys","sells","sold","transfersOut"]},"holders":{"type":"object","properties":{"total":{"type":"integer","description":"Unique holders"},"top":{"type":"array","items":{"type":"object"},"description":"Top 20 non-system holders: {address, amount, shareOfSupply, tag?, flags?}"}},"required":["total","top"]},"earlyBuyers":{"type":"object","properties":{"windowSec":{"type":"integer","description":"Window after the launch block"},"fundingLookbackSec":{"type":"integer","description":"Funding lookback"},"list":{"type":"array","items":{"type":"object"}}},"required":["windowSec","fundingLookbackSec","list"]},"signals":{"type":"array","items":{"$ref":"#/components/schemas/Signal"}},"fees":{"type":["object","null"],"description":"Estimated fees (1 % of volume; creator 25 %, approved creator 50 %), with `exact` (ExactFees, Elysium): the launchpad's own fee events (null without the indexer's ascend_ledger). null for LiquidLaunch (fees not published)","properties":{"exact":{"anyOf":[{"$ref":"#/components/schemas/ExactFees"},{"type":"null"}]}}},"lifecycle":{"type":["object","null"],"description":"Elysium: the token's lifecycle (stage, stages reached with their evidence, addresses per layer, links exact or not): GET /v1/tokens/{address}/lifecycle without the per-stage detail"},"partial":{"type":"array","items":{"type":"string","enum":["funding","devTransfersOut"]},"description":"HyperEVM: reads skipped (no address indexes yet): no funding signals, no dev transfers out"},"ascend":{"allOf":[{"$ref":"#/components/schemas/AscendProgress"}],"description":"Elysium: progress toward \"Ascended\", plus coordination = {flaggedWallets, flaggedHoldShare (their balances / supply), highSignals}: the evidence of the coordinated-accumulation check, not a criterion"},"asOf":{"type":"integer","description":"Head time of the layer (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Head block of the layer"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["launch","metrics","dev","holders","earlyBuyers","signals","fees","asOf","height"]},"Candle":{"type":"object","properties":{"t":{"type":"integer","description":"Bucket start (Unix ms)","example":1792236158000},"o":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Open (quote per base: USDC) (exact decimal string)"},"h":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"High (exact decimal string)"},"l":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Low (exact decimal string)"},"c":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Close (exact decimal string)"},"v":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Base volume (exact decimal string)"},"vq":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Quote volume (exact decimal string)"},"n":{"type":"integer","description":"Trades"},"vUsd":{"type":["string","null"],"description":"USD volume (Elysium, HyperEVM) (exact decimal string, null when unknown)"},"mcUsd":{"type":["string","null"],"description":"Market cap at close, USD (Elysium, HyperEVM; absent on filled candles) (exact decimal string, null when unknown)"},"usd":{"type":"object","description":"Same candle priced in USD {o,h,l,c} (Elysium, HyperEVM; when the quote has a USD price)","properties":{"o":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"USD open (exact decimal string)"},"h":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"USD high (exact decimal string)"},"l":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"USD low (exact decimal string)"},"c":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"USD close (exact decimal string)"}}},"mcap":{"type":"object","description":"Same candle as market cap in USD {o,h,l,c} (Elysium, HyperEVM)","properties":{"o":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"mcap open (exact decimal string)"},"h":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"mcap high (exact decimal string)"},"l":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"mcap low (exact decimal string)"},"c":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"mcap close (exact decimal string)"}}}},"required":["t","o","h","l","c","v","vq","n"]},"Trade":{"type":"object","properties":{"t":{"type":"integer","description":"Block time (Unix ms)","example":1792236158000},"px":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Price in quote (exact decimal string)"},"sz":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Base size (exact decimal string)"},"side":{"type":"string","enum":["B","A"],"description":"B = buy of the base, A = sell"},"id":{"type":"string","description":"EVM: 0x<tx hash>:<log index>; HyperCore: trade id (tid)"},"block":{"type":"integer","description":"Block of the trade (provenance)"},"tx":{"type":["string","null"],"description":"Provenance: transaction hash. EVM: the Swap log's transaction; HyperCore: the hash of the transaction whose fills made the trade (null when the fill carries none)"},"logIndex":{"type":"integer","description":"EVM: log index of the Swap event in the block (provenance)"},"vq":{"type":["string","null"],"description":"Quote amount (exact decimal string, null when unknown)"},"usd":{"type":["string","null"],"description":"USD value (exact decimal string, null when unknown)"},"pxUsd":{"type":["string","null"],"description":"Base price in USD at the swap (exact decimal string, null when unknown)"},"mcapUsd":{"type":["string","null"],"description":"Market cap at the swap, USD (exact decimal string, null when unknown)"},"trader":{"type":"string","description":"tx.from of the swap"}},"required":["t","px","sz","side","id","block","tx"]},"Holder":{"type":"object","properties":{"address":{"type":"string","description":"Holder"},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Balance (exact decimal string)"},"share":{"type":"number","description":"Balance / total (0–1)"},"usd":{"type":["string","null"],"description":"USD value (exact decimal string, null when unknown)"},"label":{"type":"string","description":"System label"},"system":{"type":"boolean"},"entity":{"$ref":"#/components/schemas/EntityRef"}},"required":["address","amount","share"]},"Holders":{"type":"object","properties":{"layer":{"type":"string","description":"Layer","example":"elysium"},"token":{"type":"string","description":"Token"},"kind":{"type":"string","enum":["balances","positions"]},"asOf":{"type":"integer","description":"Snapshot time (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Block of the snapshot (HyperCore: snapshot height; EVM: the indexed head the balances include)"},"totalHolders":{"type":"integer","description":"Holders (system excluded by default)"},"total":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Sum of balances counted (exact decimal string)"},"top10Share":{"type":["number","null"],"description":"Sum of the top-10 shares"},"excludeSystem":{"type":"boolean"},"systemHolders":{"type":"integer","description":"System holders, counted apart"},"systemTotal":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Balance held by system addresses (exact decimal string)"},"source":{"type":"string","description":"Source table"},"spam":{"type":"boolean","description":"EVM: the token is flagged spam (tokens.spam); its holders still answer"},"spamReason":{"type":["string","null"],"description":"EVM. Why the indexer flags it, comma list, strongest first: homoglyph:<T> (looks like token T), impostor:<T> (claims to be T; never alone), phishing_name, fake_transfers, unreadable_balance (balanceOf reverts: no ERC-20 behind its Transfer logs), verifier_ignore; null when not spam"},"holders":{"type":"array","items":{"$ref":"#/components/schemas/Holder"}},"system":{"type":"array","items":{"$ref":"#/components/schemas/Holder"},"description":"System addresses (≤ 50), share of supply including them"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while the layer syncs (Unix ms)","example":1792236158000}},"required":["layer","token","holders"]},"TimelineEvent":{"type":"object","description":"kind = launch | swap | transfer. Every event carries the running state after it: holders (system excluded, replayed from ERC-20 transfers) and top10Share; swaps also carry side, trader, tokens, usd, priceUsd, mcapUsd, newHolder and the cumulative volumeUsd / trades / traders.","properties":{"kind":{"type":"string","enum":["launch","swap","transfer"]},"t":{"type":"integer","description":"Block time (Unix ms)","example":1792236158000},"block":{"type":"integer","description":"Block"},"tx":{"type":"string","description":"Transaction"},"logIndex":{"type":"integer","description":"Log index (swap, transfer)"},"first":{"type":"boolean","description":"First swap of the pool"},"creator":{"type":"string","description":"launch: creator"},"supplySeeded":{"type":["string","null"],"description":"launch: tokens seeded in the pool (exact decimal string, null when unknown)"},"devBuyTokens":{"type":["string","null"],"description":"launch: dev buy (exact decimal string, null when unknown)"},"side":{"type":"string","enum":["buy","sell"],"description":"swap: side of the launched token"},"trader":{"type":"string","description":"swap: tx.from"},"tokens":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"swap: token amount (exact decimal string)"},"usd":{"type":["string","null"],"description":"swap: USD value (exact decimal string, null when unknown)"},"priceUsd":{"type":["string","null"],"description":"swap: token price in USD (exact decimal string, null when unknown)"},"mcapUsd":{"type":["string","null"],"description":"swap: market cap in USD (exact decimal string, null when unknown)"},"newHolder":{"type":"boolean","description":"swap: the trader became a holder with it"},"from":{"type":"string","description":"transfer: sender"},"to":{"type":"string","description":"transfer: recipient"},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"transfer: amount (exact decimal string)"},"holders":{"type":"integer","description":"Unique holders after the event"},"top10Share":{"type":["number","null"],"description":"Top-10 share of supply after the event"},"volumeUsd":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"swap: cumulative volume since launch, USD (exact decimal string)"},"trades":{"type":"integer","description":"swap: cumulative swaps"},"traders":{"type":"integer","description":"swap: cumulative distinct traders"}},"required":["kind","t","block","tx","holders"]},"Timeline":{"type":"object","properties":{"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"symbol":{"type":["string","null"]},"name":{"type":["string","null"]},"decimals":{"type":"integer","description":"Decimals"},"pair":{"type":"string","description":"Pool key"},"launchpad":{"type":"string","description":"Launchpad name"},"supply":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Supply (exact decimal string)"},"launch":{"type":"object","description":"{t, block, tx, creator, supplySeeded, devBuyTokens, quote, quoteSymbol}"},"events":{"type":"array","items":{"$ref":"#/components/schemas/TimelineEvent"},"description":"Chain order (block, log index)"},"truncated":{"type":"boolean","description":"More than 5,000 swaps or 20,000 transfers: the replay stops there"},"current":{"type":"object","description":"{priceUsd, mcapUsd, holders, top10Share, volume24hUsd, volumeSinceLaunchUsd, trades, traders, devHoldsShare}"},"graduation":{"type":"object","properties":{"mirror":{"type":["object","null"],"description":"HyperEVM token registered for this Elysium token {address, decimals} (Elysium <-> HyperEVM bridge)"},"core":{"type":["object","null"],"description":"HyperCore spot token linked to the mirror {index, tokenId, name}"}},"required":["mirror","core"]},"asOf":{"type":"integer","description":"Elysium head time (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Elysium head block"}},"required":["token","symbol","name","decimals","pair","launchpad","supply","launch","events","truncated","current","graduation","asOf","height"]},"OrbitTransfer":{"type":"object","description":"HyperEVM <-> Elysium (Orbit) movement in its latest state. Deposit (to_child): {status, detail, direction, chain, message_index, kind, parent_block, parent_time, parent_tx, sender, to, value, value_wei, deposit, deposit_wei, call_selector, token, child_block, child_time, child_tx, call_tx, ticket, redeem_tx, redeemed_by, bridge_latency_ms}. Withdrawal (to_parent): {status, detail, direction, chain, position, child_block, child_time, child_tx, caller, destination, value, value_wei, call_selector, token, parent_block, parent_time, parent_tx, bridge_latency_ms}. Same shape as WS elysium.bridge data.","properties":{"status":{"type":"string","enum":["executed","sent","claimable","failed"]},"detail":{"type":"string","description":"View status: credited, redeemed, awaiting_redeem, claimable, awaiting_batch, executed, pending…"},"direction":{"type":"string","enum":["to_child","to_parent"]},"chain":{"type":"string","enum":["hyperevm","elysium"],"description":"Layer of the last known leg"},"value":{"type":["string","null"],"description":"Native HYPE value (exact decimal string, null when unknown)"},"token":{"type":["object","null"],"description":"{address, from, to, amount_raw} for an ERC-20 movement"},"bridge_latency_ms":{"type":["integer","null"]}},"required":["status","direction","chain"]},"CoreEvmLeg":{"type":"object","description":"A HyperCore leg: the bridge credit or debit, or (`final`) the credit of a forwarded deposit's beneficiary","properties":{"block":{"type":"integer","description":"HyperCore block"},"event_idx":{"type":["integer","null"],"description":"Index of the event in the block (core_to_evm)"},"time":{"type":"integer","description":"Block time (Unix ms)","example":1792236158000},"hash":{"type":["string","null"],"description":"HyperCore transaction hash"},"kind":{"type":["string","null"],"description":"Ledger update kind (core_to_evm)"},"nonce":{"type":["integer","null"],"description":"Ledger nonce"}},"required":["block","event_idx","time","hash","kind","nonce"]},"CoreEvmTransfer":{"type":"object","description":"HyperCore <> HyperEVM transfer (route=core_evm), both legs paired. Same shape as WS bridge.transfers data.","properties":{"status":{"type":"string","enum":["completed","initiated","stuck"],"description":"completed: the beneficiary is credited (a forwarded deposit waits for the wallet's send); initiated: one leg only, under 2 min; stuck: one leg only, past 2 min"},"direction":{"type":"string","enum":["evm_to_core","core_to_evm"]},"token":{"type":"string","description":"HyperCore token name","example":"USDC"},"account":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Account of the bridge leg (sender on the first layer)","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"system_address":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"HyperCore system address of the token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"amount":{"type":["string","null"],"description":"Amount in token units (exact decimal string, null when unknown)"},"core":{"oneOf":[{"$ref":"#/components/schemas/CoreEvmLeg"},{"type":"null"}],"description":"HyperCore leg; null until it is seen"},"evm":{"type":["object","null"],"description":"HyperEVM leg {block, time, tx, amount_raw, log_index? (evm_to_core: the Transfer to the system address), tx_index?, method?, evm_nonce?, success? (core_to_evm: the system transaction crediting it)}"},"matched_by":{"type":["string","null"],"enum":["nonce","order",null],"description":"How the two legs were paired: nonce = exact (coreReceiveWithData), order = same system address, account and amount in order; null while unmatched"},"bridge_latency_ms":{"type":["integer","null"],"description":"First leg -> credited on the other layer (ms)"},"depositor":{"type":["string","null"],"description":"Who 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"},"beneficiary":{"type":["string","null"],"description":"Who 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"},"origin":{"type":["object","null"],"description":"CCTP mint: {domain (source chain, see cctpDomains), sender (burn sender: an address on EVM chains, 32 bytes otherwise)}"},"forwarding":{"type":["object","null"],"description":"evm_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"},"final":{"oneOf":[{"$ref":"#/components/schemas/CoreEvmLeg"},{"type":"null"}],"description":"evm_to_core: the HyperCore event crediting the beneficiary (the wallet's send for a forwarded deposit, the bridge credit otherwise)"},"final_latency_ms":{"type":["integer","null"],"description":"evm_to_core: HyperEVM leg -> beneficiary credited on HyperCore (ms); null until then"}},"required":["status","direction","token","account","amount","core","evm","matched_by","bridge_latency_ms"]},"Bridges":{"type":"object","properties":{"route":{"type":"string","enum":["core_evm","evm_elysium"]},"coverageFrom":{"type":["object","null"],"description":"core_evm: {evm_to_core, core_to_evm}: first block time (ms) each direction is scanned on HyperEVM; rows and stats start there"},"rows":{"type":"array","items":{"oneOf":[{"$ref":"#/components/schemas/CoreEvmTransfer"},{"$ref":"#/components/schemas/OrbitTransfer"}]},"description":"Newest first, ≤ 7 days: CoreEvmTransfer (core_evm) or OrbitTransfer (evm_elysium)"},"stats":{"type":"object","description":"24 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}"},"labels":{"type":"object","additionalProperties":{"type":"string"},"description":"Names 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)","example":{"0xb21d281dedb17ae5b501f6aa8256fe38c4e45757":"Circle CctpForwarder"}},"cctpDomains":{"type":"object","additionalProperties":{"type":"string"},"description":"core_evm: CCTP source domains (Circle's numbering) -> chain name, for origin.domain; others read `domain <n>`","example":{"0":"Ethereum","3":"Arbitrum","6":"Base"}},"system":{"type":"string","enum":["exclude","include","only"],"description":"evm_elysium: the system mode applied to Kinetiq's system retryables (exclude: left out of rows, counted in stats.system)"},"systemSenders":{"type":"array","items":{"type":"string"},"description":"evm_elysium: the system senders"},"tokens":{"type":"object","description":"evm_elysium: {<address>: {symbol, decimals, spam, spamReason}} (parent tokens flagged from HyperEVM mainnet; Elysium testnet: never flagged)"},"includeSpam":{"type":"boolean","description":"evm_elysium: rows of spam tokens shown"},"spamHidden":{"type":"integer","description":"evm_elysium: rows of spam tokens left out"}},"required":["route","rows","stats"]},"SpamToken":{"type":"object","description":"A token flagged spam","properties":{"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"symbol":{"type":["string","null"],"description":"As deployed (the homoglyph is kept)","example":"USDС"},"name":{"type":["string","null"]},"spamReason":{"type":["string","null"],"description":"Why the indexer flags it, comma list, strongest first: homoglyph:<T> (looks like token T), impostor:<T> (claims to be T; never alone), phishing_name, fake_transfers, unreadable_balance (balanceOf reverts: no ERC-20 behind its Transfer logs), verifier_ignore; null when not spam","example":"homoglyph:USDC"},"spamSince":{"type":["integer","null"],"description":"Flagged since (ms)"}},"required":["address","symbol","name","spamReason","spamSince"]},"SpamChange":{"type":"object","description":"One row of token_spam_log: a flag set, changed or cleared","properties":{"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"spam":{"type":"boolean","description":"Flagged after the change"},"spamReason":{"type":["string","null"],"description":"Reason after the change"},"previousReason":{"type":["string","null"],"description":"Reason before the change (null: was not spam)"},"changedAt":{"type":"integer","description":"Change time (Unix ms)","example":1792236158000}},"required":["token","spam","spamReason","previousReason","changedAt"]},"Wallet":{"type":"object","description":"One address on the three layers. hypercore + hyperevm = mainnet, elysium = testnet (testnet balances carry no USD value).","properties":{"address":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"Address: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"entity":{"$ref":"#/components/schemas/EntityRef"},"asOf":{"type":"integer","description":"Time (Unix ms)","example":1792236158000},"hypercore":{"type":"object","description":"{perp:{accountValue, positions[]}, dexes[], spot:{balances[], totalUsd}, freshness:{source: info-server, asOf, latencyMs, state, head, headTime, lagMs}} or {unavailable}: live state from the node info server; head = the HyperCore block of the fills ingested"},"hyperevm":{"type":"object","description":"{balances:[{token, symbol, name, decimals, amount, priceUsd, usd, spam, spamReason, family?}], count, totalUsd, totalUsdComplete, includeSpam, spamHidden, height, asOf, syncing?, dataUntil?, nfts, activity, freshness, bridges:[core_evm rows]}: token balances at the indexed head (token-family tokens at balanceOf from their formula), USD at the pool prices of the last daily close; {balances:{unavailable}} when the database cannot answer. nfts: {erc721, erc1155, capped, collections[≤20]:{address, name, symbol, erc721, erc1155}, tokens[≤20]}. activity: {scope: EvmScope, swaps, transfers, more} (the moves are in `recent`). freshness: the layer as /v1/status gives it {state, head, headTime, lagMs, chainHead?, blocksBehind?, behindMs?, clock?}"},"elysium":{"type":"object","description":"{balances:[{token, symbol, name, decimals, amount, priceUsd, usd, spam, spamReason, testnet}], count, totalUsd, includeSpam, spamHidden, testnet, nfts, activity, freshness, bridges:[evm_elysium rows]} (same nfts / activity / freshness as hyperevm)"},"bridges":{"type":"object","description":"The legs linking the layers over 7 days: {window: 7d, legs:{core_evm, evm_elysium}, inFlight:[{route, direction, status, detail?, token, amount, amountRaw?, t, ageMs, tx}] (core_evm initiated / stuck, evm_elysium sent / claimable), journeys:[{journey: core_to_elysium | elysium_to_core, link: same_tx | unique | ordered, status: complete | failed | stuck | in_flight, token (HyperEVM address, 0x2222…2222 = HYPE), amountRaw, startTime, endTime, evmMs, totalMs, hop1, hop2}]}: a journey = a hop into HyperEVM then a hop out of it of the same asset and amount by the same HyperEVM account within the hour (rules of the bridge_journeys view)"},"recent":{"type":"array","items":{"type":"object","properties":{"layer":{"type":"string","enum":["hypercore","hyperevm","elysium"]},"kind":{"type":"string","enum":["fill","ledger","bridge","swap","transfer"]},"t":{"type":"integer","description":"Time (Unix ms)","example":1792236158000},"data":{"type":"object","description":"swap: {t, px, sz, vq, usd, side B|A, id, block, tx, logIndex, trader, pair, base, quote, testnet?, spam?, spamReason?}; transfer: {t, token, symbol, amount, usd, side in|out, counterparty, tx, logIndex, block, testnet?, spam?, spamReason?}"}},"required":["layer","kind","t","data"]},"description":"50 latest events of the three layers, newest first"},"labels":{"type":"object","additionalProperties":{"type":"string"}}},"required":["address","hypercore","hyperevm","elysium","bridges","recent"]},"Collection":{"type":"object","description":"An NFT contract (one row per contract and standard)","properties":{"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Collection contract","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"standard":{"type":"string","enum":["erc721","erc1155"]},"name":{"type":["string","null"],"description":"name() at the first transfer seen, null when it reverts"},"symbol":{"type":["string","null"]},"firstSeenBlock":{"type":"integer","description":"Block of its first transfer"},"firstSeenAt":{"type":"integer","description":"Time of its first transfer (Unix ms)","example":1792236158000}},"required":["address","standard","name","symbol","firstSeenBlock","firstSeenAt"]},"NftTransfer":{"type":"object","properties":{"block":{"type":"integer","description":"Block"},"t":{"type":"integer","description":"Block time (Unix ms)","example":1792236158000},"tx":{"type":"string","description":"Transaction hash"},"logIndex":{"type":"integer","description":"Log index"},"batchIndex":{"type":"integer","description":"Position in an ERC-1155 TransferBatch (0 otherwise)"},"collection":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Collection","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"standard":{"type":"string","enum":["erc721","erc1155"]},"kind":{"type":"string","enum":["mint","burn","transfer"],"description":"mint = from 0x0, burn = to 0x0 (0x…dead is an ordinary holder)"},"tokenId":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Token id (exact decimal string)"},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"1 for ERC-721 (exact decimal string)"},"from":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"Sender: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"to":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"Recipient: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"operator":{"type":["string","null"],"description":"ERC-1155 operator, null for ERC-721"}},"required":["block","t","tx","logIndex","batchIndex","collection","standard","kind","tokenId","amount","from","to","operator"]},"Erc20Transfer":{"type":"object","properties":{"block":{"type":"integer","description":"Block"},"t":{"type":"integer","description":"Block time (Unix ms)","example":1792236158000},"tx":{"type":"string","description":"Transaction hash"},"logIndex":{"type":"integer","description":"Log index"},"from":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"Sender (0x0 = mint): 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"to":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"Recipient: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"amount":{"type":["string","null"],"description":"Amount in token units (null when the token decimals are unknown) (exact decimal string, null when unknown)"},"amountRaw":{"type":["string","null"],"description":"Raw integer value of the Transfer log (exact decimal string, null when unknown)"}},"required":["block","t","tx","logIndex","from","to","amount","amountRaw"]},"LiquidityEvent":{"type":"object","properties":{"block":{"type":"integer","description":"Block"},"t":{"type":"integer","description":"Block time (Unix ms)","example":1792236158000},"tx":{"type":"string","description":"Transaction hash"},"logIndex":{"type":"integer","description":"Log index"},"kind":{"type":"string","enum":["add","remove"]},"provider":{"type":["string","null"],"description":"Transaction sender as the indexer records it"},"amount0":{"type":["string","null"],"description":"token0 amount (V2 / V3; null for V4, whose event carries a liquidity delta) (exact decimal string, null when unknown)"},"amount1":{"type":["string","null"],"description":"token1 amount (V2 / V3; null for V4) (exact decimal string, null when unknown)"},"usd":{"type":["string","null"],"description":"USD value the indexer computed at the event, rounded to the cent (exact decimal string, null when unknown)"},"liquidityDelta":{"type":["string","null"],"description":"V4 ModifyLiquidity liquidity delta"},"tickLower":{"type":["integer","null"]},"tickUpper":{"type":["integer","null"]}},"required":["block","t","tx","logIndex","kind","provider","amount0","amount1","usd","liquidityDelta","tickLower","tickUpper"]},"Status":{"type":"object","properties":{"layers":{"type":"object","properties":{"hypercore":{"type":"object","description":"{state: live|stale, head, headTime, lagMs}"},"hyperevm":{"type":"object","description":"{state: syncing|live, head, headTime, lagMs, chainHead?, blocksBehind?, behindMs?, clock?, reason?}: indexed head of indexer_hyperevm vs nanoreth's head (> 300 blocks behind = syncing; without a node feed, headTime older than 5 min = syncing). chainHead, blocksBehind, behindMs, clock: freshness against the node's own head, pushed by newHeads: blocksBehind 0 and behindMs 0 = every block the node announced is indexed; else behindMs = how long block head+1 has been waiting since the node announced it (clock node), or since its block time when our feed did not see it (clock block). Absent without a live node feed"},"elysium":{"type":"object","description":"{state, network: testnet|mainnet, head, headTime, lagMs, chainHead?, blocksBehind?, behindMs?, clock?}: lagMs = now - block time (whole seconds). chainHead, blocksBehind, behindMs, clock: freshness against the node's own head, pushed by newHeads: blocksBehind 0 and behindMs 0 = every block the node announced is indexed; else behindMs = how long block head+1 has been waiting since the node announced it (clock node), or since its block time when our feed did not see it (clock block). Absent without a live node feed"}},"required":["hypercore","hyperevm","elysium"]},"stream":{"type":"object","description":"{connected, lagMs, messages, clients, subscriptions, slowClientsDropped}"},"flows":{"type":"object","description":"{connected, lagMs, messages}"},"audit":{"type":"object","description":"{state: ok|mismatch|stale|unavailable, checked24h, mismatches24h, open24h (not corrected nor explained yet), lastRunAt, lastMismatchAt, reason?}: the public correctness audit (GET /v1/audit)"},"slo":{"type":"object","description":"{elysium?, hyperevm?: {windowS, commitMs: {n, p50, p90, p99, max} | null, unseenCommits, lastCommitAgeMs}}: per EVM layer, time from our node announcing a block (newHeads) to the indexer committing it (pg_notify), on our clock, over the last windowS; unseenCommits = announced blocks not committed a minute later (since start)"},"bridges":{"type":"object","description":"{state: ok|loading, source: materialized|views, settledUntil, lagMs, computedAt, evm_to_core, core_to_evm: {legs, matched, coverage, unmatched: {<reason>: n}, p50Ms, p99Ms}}: HyperCore <> HyperEVM matching over the whole history, as GET /v1/bridges/coverage (last computed value, refreshed in the background)"},"serverTime":{"type":"integer","description":"Server time (Unix ms)","example":1792236158000}},"required":["layers","stream","flows","audit","slo","bridges","serverTime"]},"CoverageDirection":{"type":"object","properties":{"legs":{"type":"integer","description":"Legs on the sending side: EVM transfers to a system address (evm_to_core), Core sends to one (core_to_evm)"},"matched":{"type":"integer","description":"Legs paired with their credit on the other layer"},"coverage":{"type":["number","null"],"description":"matched / (legs - notALeg - in_flight): 1 = every settled leg has its other leg","example":0.99999},"unmatched":{"type":"object","description":"{<reason>: n}. in_flight: younger than the other layer read (2 min; 30 s for core_to_evm); missing_peer: no credit found; amount_mismatch: a credit of the same system address to the same account, another amount; late_peer (core_to_evm): an identical credit 10 s-10 min later, past the 10 s window; unknown_token: system address not in the token registry; unmatched: views source (no reason)"},"notALeg":{"type":"integer","description":"Not bridge legs: amount 0, or a supply minted to the system address when the token is linked"},"finalPending":{"type":"integer","description":"evm_to_core through a deposit wallet: the bridge credit found, the beneficiary credit not (yet)"},"reverted":{"type":"integer","description":"core_to_evm: credit found, reverted on HyperEVM (receipt status 0)"},"matchedBy":{"type":"object","description":"core_to_evm","properties":{"nonce":{"type":"integer","description":"Exact: coreReceiveWithData carries the Core nonce"},"order":{"type":"integer","description":"Same system address, account and amount, paired in order"}},"required":["nonce","order"]},"latencyMs":{"type":"object","description":"Matched legs: sending block -> crediting block (EVM block times are whole seconds: core_to_evm down to -999)","properties":{"p50":{"type":"integer","description":"Median"},"p90":{"type":"integer","description":"p90"},"p99":{"type":"integer","description":"p99"},"p999":{"type":"integer","description":"p99.9"},"max":{"type":"integer","description":"Max"}},"required":["p50","p90","p99","p999","max"]},"unpairedCredits":{"type":["object","null"],"description":"{in_flight, missing_peer}: credits on the receiving side no leg took (null: views source)"},"tokens":{"type":"array","items":{"type":"object","properties":{"token":{"type":"string","description":"HyperCore token name","example":"USDC"},"legs":{"type":"integer","description":"Legs"},"matched":{"type":"integer","description":"Matched"},"unmatched":{"type":"integer","description":"Unmatched (not counting notALeg)"},"p50Ms":{"type":"integer","description":"Median latency"},"p99Ms":{"type":"integer","description":"p99 latency"}},"required":["token","legs","matched","unmatched","p50Ms","p99Ms"]},"description":"Most bridged first (20)"}},"required":["legs","matched","coverage","unmatched","notALeg","finalPending","reverted","matchedBy","latencyMs","unpairedCredits","tokens"]},"Coverage":{"type":"object","properties":{"source":{"type":"string","enum":["materialized","views"],"description":"materialized: the tables bridge-match keeps (a reason per leg); views: the matching views read directly (every 10 min)"},"window":{"type":"string","enum":["all","30d","7d","24h"]},"from":{"type":"integer","description":"First leg of the data (Unix ms)","example":1792236158000},"settledUntil":{"type":["integer","null"],"description":"materialized: every leg before this time was matched with both layers read past it (Unix ms)"},"computedAt":{"type":"integer","description":"Computed at (cached 60 s) (Unix ms)","example":1792236158000},"directions":{"type":"object","properties":{"evm_to_core":{"$ref":"#/components/schemas/CoverageDirection"},"core_to_evm":{"$ref":"#/components/schemas/CoverageDirection"}},"required":["evm_to_core","core_to_evm"]}},"required":["source","window","directions"]},"Audit":{"type":"object","properties":{"state":{"type":"string","enum":["ok","mismatch","stale","unavailable"],"description":"mismatch: at least one item differed from its source of truth in the last 24 h; stale: a layer without a slice for 30 min"},"windows":{"type":"object","description":"{'24h', '7d'}: {checked, mismatches, errors, layers: {hypercore|hyperevm|elysium: {checked, mismatches, errors, kinds: {<kind>: {checked, mismatches}}}}}. checked = items compared (a fill, a trade, a position, a block header, a transaction, a log, a balance); errors = a source that did not answer (not a mismatch)"},"hourly":{"type":"array","items":{"type":"object"},"description":"Last 24 h: {hour (ms), checked, mismatches, errors}"},"lastRun":{"type":"object","description":"Last slice per layer (ms)"},"lastMismatch":{"type":["object","null"],"description":"Newest mismatch, as in mismatches"},"mismatches":{"type":"array","items":{"type":"object"},"description":"Latest 20: {id, at, layer, kind, subject, field, expected (source of truth), actual (ours), detail, fields, resolution, triage (AuditTriageRef or null: the latest triage of the item)}"},"method":{"type":"object","description":"Per layer: source of truth and what each kind compares"},"generatedAt":{"type":"integer","description":"Answer time (cached 30 s) (Unix ms)","example":1792236158000}},"required":["state","windows","hourly","lastRun","lastMismatch","mismatches","method","generatedAt"]},"AuditTriageRef":{"type":"object","description":"A triage of open mismatches (automatic or manual)","properties":{"id":{"type":"integer","description":"Triage id","example":4},"status":{"type":"string","enum":["running","done","failed"]},"startedAt":{"type":"integer","description":"Started (Unix ms)","example":1792236158000},"finishedAt":{"type":["integer","null"],"description":"Finished (Unix ms), null while running"},"summary":{"type":["string","null"],"description":"What the triage concluded (public), null while running"}},"required":["id","status","startedAt","finishedAt","summary"]},"AuditTriage":{"allOf":[{"$ref":"#/components/schemas/AuditTriageRef"},{"type":"object","properties":{"mismatchIds":{"type":"array","items":{"type":"integer"},"description":"Mismatch rows it covers (ids of /v1/audit/open items and their `ids`)"},"actions":{"type":"array","items":{"type":"object"},"description":"What it did, e.g. {type: \"note\", ids, status} (a note written: corrected / explained), {type: \"commit\", sha}"},"runner":{"type":"string","description":"Who ran it","example":"claude-auto"}},"required":["mismatchIds","actions","runner"]}]},"AuditOpenItem":{"type":"object","properties":{"id":{"type":"integer","description":"Item id: its first mismatch row","example":1234},"ids":{"type":"array","items":{"type":"integer"},"description":"Every mismatch row of the item (one per differing field); a note or a triage on any of them covers the item"},"at":{"type":"integer","description":"Slice time (Unix ms)","example":1792236158000},"layer":{"type":"string","description":"hypercore | hyperevm | elysium | bridges | wallet","example":"hypercore"},"kind":{"type":"string","description":"What was compared (method of /v1/audit)","example":"hc_fill"},"subject":{"type":"string","description":"The item (user, tx, block, token:holder…)"},"field":{"type":"string","description":"First differing field"},"expected":{"type":["string","null"],"description":"Source of truth"},"actual":{"type":["string","null"],"description":"Ours"},"detail":{"type":["object","null"]},"fields":{"type":"array","items":{"type":"object","properties":{"field":{"type":"string","description":"Field"},"expected":{"type":["string","null"]},"actual":{"type":["string","null"]}},"required":["field","expected","actual"]},"description":"Every differing field"},"triage":{"oneOf":[{"$ref":"#/components/schemas/AuditTriageRef"},{"type":"null"}],"description":"Latest triage of the item, null when none"},"untriaged":{"type":"boolean","description":"No triage, or only failed ones finished over 1 h ago (retry)"}},"required":["id","ids","at","layer","kind","subject","field","expected","actual","detail","fields","triage","untriaged"]},"AuditOpen":{"type":"object","properties":{"generatedAt":{"type":"integer","description":"Answer time (cached 15 s) (Unix ms)","example":1792236158000},"open":{"type":"integer","description":"Open items: mismatched, neither corrected nor explained, last 7 days (as resolved.open of /v1/audit 7d)","example":2},"open24h":{"type":"integer","description":"Of them, of the last 24 h (state of /v1/audit)","example":1},"untriaged":{"type":"integer","description":"Open items with no triage, or only failed ones finished over 1 h ago","example":1},"running":{"type":"integer","description":"Triages running now","example":0},"items":{"type":"array","items":{"$ref":"#/components/schemas/AuditOpenItem"},"description":"Open items, newest first"},"reason":{"type":"string","description":"Only when the audit store did not answer (HTTP 503)"}},"required":["generatedAt","open","open24h","untriaged","running","items"]},"LifecycleStage":{"type":"object","description":"One stage of a token lifecycle","properties":{"stage":{"type":"string","enum":["launched","registered","enrolled","committed","bridged","listed","perp"]},"reached":{"type":"boolean"},"exact":{"type":["boolean","null"],"description":"Reached and proven by an event or a registry check (null: not reached)"},"basis":{"type":["string","null"],"enum":["event","registry","attestation","metadata","name",null],"description":"event: a contract event; registry: our on-chain checks; attestation: the listing desk's Delivered (relayed by CoreListingVerifier); metadata: HyperCore metadata; name: same name only (inferred)"},"at":{"type":["object","null"],"description":"Chain evidence {layer, block, time (ms), tx, logIndex?}"},"observedAt":{"type":["integer","null"],"description":"First seen by our registry (ms): an observation, not a chain time"},"source":{"type":["string","null"]},"detail":{"type":"object"},"note":{"type":"string"}},"required":["stage","reached","exact","basis","at","observedAt","source","detail","note"]},"LifecycleLink":{"type":"object","description":"A link between two layers: exact (proven) or not (inferred, e.g. by name)","properties":{"from":{"type":"object","properties":{"layer":{"type":"string","description":"elysium | hyperevm | hypercore"},"id":{"type":"string","description":"Address, token index or perp coin"}},"required":["layer","id"]},"to":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"id":{"type":"string","description":"Id"}},"required":["layer","id"]},"relation":{"type":"string","enum":["mirror","representation","core_link","listing_attestation","perp_underlying","perp_collateral"]},"exact":{"type":"boolean"},"basis":{"type":"string","enum":["event","registry","attestation","metadata","name"]},"source":{"type":"string","description":"Where it is read"},"checks":{"type":"array","items":{"type":"string"},"description":"The on-chain checks behind a registry link"},"note":{"type":"string"}},"required":["from","to","relation","exact","basis","source","checks","note"]},"Lifecycle":{"type":"object","description":"One token across Elysium, HyperEVM and HyperCore, from its launch to its perp","properties":{"query":{"type":"string","description":"The address asked"},"origin":{"type":["string","null"],"enum":["elysium","hyperevm","hypercore",null],"description":"Layer the token is native to"},"stage":{"type":["string","null"],"description":"Last stage reached, in lifecycle order"},"networks":{"type":"object","properties":{"elysiumChainId":{"type":"integer","description":"Elysium chain"},"parent":{"type":"string","description":"Network of the HyperEVM / HyperCore links (99801: testnet)"},"coreMetadata":{"type":["string","null"],"description":"node | configured | null (no HyperCore metadata for that network)"}},"required":["elysiumChainId","parent","coreMetadata"]},"addresses":{"type":"object","properties":{"elysium":{"type":["object","null"],"description":"{address, role native | representation, symbol, decimals}"},"hyperevm":{"type":["object","null"],"description":"{address, role mirror | native, symbol, decimals}"},"hypercore":{"type":["object","null"],"description":"{index, tokenId, name, spot {index, name}}"},"perps":{"type":"array","items":{"type":"object"},"description":"{coin, dex, kind hip3 | validator, relation underlying | collateral, exact, basis, maxLeverage}"}},"required":["elysium","hyperevm","hypercore","perps"]},"stages":{"type":"array","items":{"$ref":"#/components/schemas/LifecycleStage"}},"links":{"type":"array","items":{"$ref":"#/components/schemas/LifecycleLink"}},"conflicts":{"type":"array","items":{"type":"string"},"description":"Sources that disagree (e.g. Delivered vs the registry): the stage is then not exact"},"unavailable":{"type":"array","items":{"type":"string"},"description":"Sources that could not answer"},"launch":{"type":["object","null"],"description":"Elysium launch {token, launchpad, poolId, pair, creator, quote}"},"derived":{"type":"object","description":"Ascend launch: `ascend` = the derived \"Ascended\" status (thresholds, not on chain: exact false)"},"fees":{"anyOf":[{"$ref":"#/components/schemas/ExactFees"},{"type":"null"}]},"asOf":{"type":"integer","description":"Answer time (Unix ms)","example":1792236158000}},"required":["query","origin","stage","networks","addresses","stages","links","conflicts","unavailable","launch","derived","fees","asOf"]},"ExactFees":{"type":"object","description":"Exact fees of an Ascend pool from its events, by conservation (creator owed = on-chain creatorOwed*, checked on every testnet pool)","properties":{"exact":{"type":"boolean","description":"The ledger covers the pool since its launch"},"source":{"type":"string","description":"ascend_ledger"},"coverage":{"type":"object","properties":{"ledgerFromBlock":{"type":["integer","null"]},"launchBlock":{"type":"integer","description":"Launch block"},"complete":{"type":"boolean"}},"required":["ledgerFromBlock","launchBlock","complete"]},"token":{"type":"object","description":"Token side: total (collected + bid fill fees + returned Core fees), protocol (Σ ProtocolFeesAllocated) and legs, creator, creatorClaimed, creatorOwed"},"quote":{"type":"object","description":"Quote side: total, protocol and legs, listingSetAside, recycledToBid, creator, creatorClaimed, creatorOwed"},"listing":{"type":"object","properties":{"setAside":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Set aside for the Core listing (exact decimal string)"},"withdrawn":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Paid back to the creator (exact decimal string)"},"paidOnDelivery":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Paid to the listing treasury (exact decimal string)"},"owed":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Still held (exact decimal string)"}},"required":["setAside","withdrawn","paidOnDelivery","owed"]},"bid":{"type":"object","description":"Bid: funded, recycledFromFees, fills, tokensBought, quotePaid, fillFees"},"collects":{"type":"integer","description":"Collected events"},"lastCollectAt":{"type":["integer","null"]},"usd":{"type":"object","description":"quoteSide (exact at $1 when the quote is a USD stable), tokenSideAtPrice (valuation), total, creator, protocol"},"note":{"type":"string","description":"What is and is not counted"}},"required":["exact","source","coverage","token","quote","listing","bid","collects","lastCollectAt","usd","note"]},"LifecycleEvent":{"type":"object","description":"A stage change of a launched token (WS ascend.lifecycle)","properties":{"kind":{"type":"string","enum":["stage","snapshot"]},"token":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Launched token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"symbol":{"type":["string","null"]},"previous":{"type":["string","null"]},"stage":{"type":["string","null"]},"reached":{"type":"array","items":{"type":"string"},"description":"Stages reached since the previous poll"},"lost":{"type":"array","items":{"type":"string"},"description":"Stages no longer reached (reorg, registry correction)"},"lifecycle":{"$ref":"#/components/schemas/Lifecycle"},"t":{"type":"integer","description":"Detection time (Unix ms)","example":1792236158000}},"required":["kind","token","symbol","previous","stage","reached","lost","lifecycle","t"]}}},"x-websocket":{"url":"wss://api.femtos.xyz/v1/ws?ticket=<ticket>","auth":"POST /v1/ws-ticket with the key (Authorization: Bearer <key>): {ticket, ttlS: 30}, single use. `?token=<key>` still works, deprecated (the key ends up in proxy logs). Closed with 4001 once the key is revoked, rotated or expires.","subscribe":{"op":"subscribe","channel":"<channel>","filter":{}},"unsubscribe":{"op":"unsubscribe","channel":"<channel>","filter":{}},"ping":{"op":"ping"},"message":"{channel, filter, snapshot?: true, data, ts:{source, ingested, sent}, latency_ms:{source_to_sent, ingested_to_sent}}; ts.source = block time","limits":"maxConns connections per key (429 at the upgrade); 64 subscriptions per connection; ping every 30 s. Messages sent: the key's rps / burst per connection, past it {error: 'rate limit exceeded', retryAfter} and the message ignored, 20 refused in a row close the connection (4029). New subscriptions that load a snapshot (no other client holds them): the key's rps / burst across its connections, past it {error: 'too many new subscriptions, retry later', retryAfter, channel, filter}","channels":[{"channel":"hc.trades","filter":{"coin":"required, e.g. BTC"},"snapshot":"last trades of the market","live":"HyperCore trades of the market as they happen, raced between our node and Hyperliquid's public feed (first copy sent)"},{"channel":"hc.candles","filter":{"coin":"required","tf":"required: 1s 15s 1m 5m 15m 1h 4h 1d"},"snapshot":"last candles","live":"the forming candle, once per block where it changes"},{"channel":"hc.bbo","filter":{"coin":"required"},"snapshot":"current top of book","live":"top of book each block (newest block wins)"},{"channel":"hc.book","filter":{"coin":"required"},"snapshot":"full-depth book","live":"the levels each block changes"},{"channel":"hc.orders","filter":{"coin":"optional","user":"optional","status":"optional"},"snapshot":"recent order status changes","live":"every order status change"},{"channel":"hc.liquidations","filter":{"coin":"optional","user":"optional","min_notional":"optional"},"snapshot":"recent liquidations","live":"each liquidation fill, the block it happens"},{"channel":"hc.positions","filter":{"coin":"optional","user":"optional","min_notional":"optional (default 100000, \"0\" = all)"},"snapshot":"open positions over the threshold","live":"each perp position change, one per block, account and coin"},{"channel":"hc.ledger","filter":{"kind":"optional","token":"optional","min_amount":"optional"},"snapshot":"recent ledger updates","live":"deposits, withdrawals, transfers and other non-trade balance moves"},{"channel":"prices.hype","filter":{},"snapshot":"current HYPE prices","live":"HYPE from the Hyperliquid oracle, perp mark and exchanges"},{"channel":"stats","filter":{},"snapshot":"current stream health","live":"HyperCore stream health, once a second"},{"channel":"elysium.blocks","filter":{},"snapshot":"last 50 blocks","live":"one Elysium block per message: {number, hash, parent_hash, timestamp (s), tx_count, gas_used, base_fee, l1_block_number}"},{"channel":"bridge.transfers","filter":{"token":"optional","direction":"optional: evm_to_core | core_to_evm","account":"optional"},"snapshot":"last 50 transfers","live":"one HyperCore <-> HyperEVM transfer per state change (core_evm row shape)"},{"channel":"hyperevm.trades","filter":{"pair":"required"},"snapshot":"last 50 swaps, chronological","live":"array: swaps of the pair as they are indexed (polled every 500 ms)"},{"channel":"hyperevm.candles","filter":{"pair":"required","tf":"required: 1s 15s 1m 5m 15m 1h 4h 1d"},"snapshot":"last 300 candles","live":"each candle that changed (while syncing: up to 50 per poll)"},{"channel":"hyperevm.launches","filter":{"include_spam":"optional: true also sends the launches of spam tokens (flagged spam)"},"snapshot":"last 50 LiquidLaunch LaunchRow, chronological","live":"one LaunchRow per new launch"},{"channel":"elysium.launches","filter":{"launchpad":"optional, e.g. ascend","include_spam":"optional: true also sends the launches of spam tokens (flagged spam)"},"snapshot":"last 50 LaunchRow, chronological","live":"one LaunchRow per message, as soon as its block is indexed"},{"channel":"ascend.swaps","filter":{"token":"optional launched token","launchpad":"optional, e.g. ascend","side":"optional: buy | sell (of the launched token)","trader":"optional","min_usd":"optional"},"snapshot":"last 50 matching AscendSwap, chronological","live":"array: the matching swaps of every Ascend pool in one block (AscendSwap), pushed when the indexer commits the block"},{"channel":"ascend.status","filter":{"token":"optional","launchpad":"optional","min_mcap_usd":"threshold","min_holders":"threshold","min_volume_usd":"threshold","max_top10_share":"threshold"},"snapshot":"{token, symbol, pair, launchpad, status, ascend} of the last 50 launches (or of `token`), chronological","live":"AscendStatusEvent: a launch whose derived status or a criterion flipped in the block just committed. Thresholds = the filter over the server ones; none at all: refused"},{"channel":"ascend.lifecycle","filter":{"token":"optional launched token"},"snapshot":"{kind: \"snapshot\", token, lifecycle} for `token`, else {kind: \"snapshot\", stages: {token: [stages reached]}} of every launch","live":"LifecycleEvent: a launched token reached (or lost) a stage: listing desk registered / enrolled / committed, HyperEVM mirror, HyperCore spot, perp (polled every 10 s)"},{"channel":"elysium.candles","filter":{"pair":"required","tf":"required: 1s 15s 1m 5m 15m 1h 4h 1d"},"snapshot":"last 300 candles","live":"the forming candle, once per block where it changes"},{"channel":"elysium.trades","filter":{"pair":"required"},"snapshot":"last 50 swaps, chronological","live":"array: the swaps of the pair in one block"},{"channel":"elysium.bridge","filter":{"token":"optional","direction":"optional: to_child | to_parent"},"snapshot":"last 50 movements","live":"one OrbitTransfer per message (or per block with \"batch\":\"block\")"},{"channel":"kol.activity","filter":{"entity":"optional entity id","kind":"optional: trade | liquidation | swap | transfer | bridge","layer":"optional: hypercore | hyperevm | elysium","min_notional":"optional","include_spam":"optional: true shows the moves of spam tokens (flagged spam)"},"snapshot":"last 50 KolItem of the named wallets, chronological","live":"one KolItem per move of a named wallet: HyperCore fills and liquidations as hl-flows sees them; HyperEVM / Elysium swaps and ERC-20 transfers on each block the indexer commits; bridge legs (core_evm, evm_elysium) on each state change"},{"channel":"wallet","filter":{"address":"required","channel":"optional list: hc.trades, hc.orders, hc.ledger, hc.liquidations, hc.positions, bridge.transfers, elysium.trades, elysium.bridge"},"snapshot":"last 50 events","live":"{channel, data}: any event of the three layers touching the address"}]}}