{"openapi":"3.1.0","info":{"title":"Femtos API","version":"1.0.0","termsOfService":"https://femtos.xyz/terms","contact":{"name":"Femtos","url":"https://femtos.xyz","email":"contact@femtos.xyz"},"description":"REST + WebSocket data for Elysium (testnet, chain 99801), HyperEVM and HyperCore: markets, candles, trades, order book, liquidations, positions, stop-loss / take-profit maps, balances (now or at a past block), USD prices and price history, token metadata and overviews, token security, holders, NFTs, launches and their lifecycle, new tokens and pools, a wallet's swaps and transfers, pools, transactions, bridges, cross-layer wallets, named wallets, webhooks. Decimals are exact strings, times Unix ms, addresses lowercase 0x. A named wallet's address (the KOLs, traders and funds of /api/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>` (WebSocket: `POST /api/ws-ticket` with the key, then `/ws?ticket=<ticket>`; `/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 / pool / transaction = 404. Every error body (REST, WebSocket frames, MCP tool errors) is {error, code, message, docs_url, request_id}: `code` is stable, what it means and what to do at https://femtos.xyz/errors; every answer carries X-Request-Id (yours when you send a valid one, up to 128 characters of [A-Za-z0-9_.:/+=-]). While a layer syncs (`state: syncing` in /api/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.","x-guidance":"Hyperliquid data (HyperCore, HyperEVM, Elysium) as JSON. With a key: Authorization: Bearer <key>. Without one, any route answers 402 with x402 payment requirements: a credit pack in USDC on Base, Arbitrum One or HyperEVM (cheapest settlement first; packs from the smallest, ?x402_pack=<USD> for a bigger one). Pay it (scheme exact, EIP-3009) and send the same request again: it is served and the answer carries your API key in X-Femtos-Key; keep it and use it for the next calls, the credit is prepaid. Free keys too: https://femtos.xyz/agents.md. Networks and their settlement costs: the x402Networks operation (no key)."},"servers":[{"url":"https://femtos.xyz"}],"security":[{"bearer":[]}],"tags":[{"name":"Launches","description":"Ascend (Elysium) and LiquidLaunch (HyperEVM) launches: list, detail and signals, holders, timeline, lifecycle across the layers"},{"name":"Market data","description":"Markets, candles, trades and wallet swap history, order book, ERC-20 transfers, liquidity, volume, coins, one pool, one transaction"},{"name":"Tokens & prices","description":"USD prices and price history, token metadata and overview, token security (honeypot check), new tokens and new pools, spam tokens"},{"name":"Liquidations & positions","description":"HyperCore perp liquidations, open positions, open interest and the liquidation map"},{"name":"Stops & take-profits","description":"HyperCore trigger orders: stop map, triggered stops, a wallet's stops, liquidation-price map, forced flow"},{"name":"Holders","description":"Holders of a token or a perp, token families (balances that move without Transfer logs)"},{"name":"Balances","description":"Every token an address holds on the three layers, one token, up to 100 addresses; now or at a past block"},{"name":"Wallet","description":"One address on HyperCore, HyperEVM and Elysium at once, with its latest events"},{"name":"Named wallets","description":"KOLs, traders and funds: entities, their wallets, leaderboards and latest moves"},{"name":"Bridges","description":"HyperCore <> HyperEVM and HyperEVM <> Elysium movements, both legs matched, and matching coverage"},{"name":"NFTs","description":"ERC-721 / ERC-1155 collections, tokens, holdings and transfers on HyperEVM and Elysium"},{"name":"Webhooks","description":"Events pushed to your HTTPS URL, signed (Standard Webhooks), retried, with a delivery log and replay"},{"name":"Meta","description":"Key, layer status, WebSocket tickets, correctness audit, x402 networks, this document"}],"paths":{"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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"}}}},"402":{"description":"Payment Required"},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","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"}}}}}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/api/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"}}}},"/api/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 /api/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"}},{"$ref":"#/components/parameters/cursor"},{"name":"before","in":"query","required":false,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. Elysium: cursor block:logIndex, the X-Next-Cursor header of the previous page","schema":{"type":"string"},"deprecated":true},{"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 (an array: the next page in the Link header); X-Next-Cursor (block:logIndex) when the page is full","headers":{"Link":{"$ref":"#/components/headers/Link"},"X-Next-Cursor":{"schema":{"type":"string"},"deprecated":true,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. Pass as `before` for the next page"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LaunchRow"}}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 /api/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},{"$ref":"#/components/parameters/cursor"},{"name":"offset","in":"query","required":false,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. Rows to skip (`next`)","schema":{"type":"integer","minimum":0,"default":0},"deprecated":true},{"name":"layer","in":"query","required":false,"description":"Default: Elysium, then HyperEVM","schema":{"type":"string","enum":["elysium","hyperevm"]}}],"responses":{"200":{"description":"OK","headers":{"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LaunchHolders"}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 /api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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; with layer = elysium or hyperevm, the next page of pools in the Link header. While the layer syncs (`state: syncing` in /api/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},{"$ref":"#/components/parameters/cursor"},{"name":"offset","in":"query","required":false,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. EVM pools to skip","schema":{"type":"integer","minimum":0,"default":0},"deprecated":true},{"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","headers":{"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/Market"}}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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":false,"description":"Elysium / HyperEVM: pair address (pool key); HyperCore: coin. Required unless `token` is given","schema":{"type":"string"},"example":"0x12e84206cb53ae0df055482ebc4658635096e1aa:0x8a9480e70c99d18d9bde3a7f5cd565be58064945963f62e0c5cc303b6b627847"},{"name":"token","in":"query","required":false,"description":"Instead of market: the candles of a token. EVM layers: its side of its reference pool, o/h/l/c in USD (unit: usd), v in the token, vq in the other token, buys / sells, mcap; the answer names the pool (`market`, `reference`). HyperCore: the candles of the token's USDC spot market (a perp coin: the perp). The reference pool of a token: among its active pools whose USD price is known (pools of a spam token left out, unless the token itself is spam), the one with the largest liquidityUsd of at least $1,000 (twice the smaller side of what the pool contract holds at the indexed head, valued at USD prices: HyperCore for HYPE, WHYPE and the Core-linked tokens); when none reaches it, the most 24 h USD volume, then the most trades, then the oldest pool. Uniswap V4 / PancakeSwap Infinity / Balancer pools keep their tokens in a shared vault: their liquidity is not measured (null), they rank by volume.","schema":{"type":"string"},"example":"0x5555555555555555555555555555555555555555"},{"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 (token form: the reference pool / USDC market)"},"tf":{"type":"string","description":"Unit"},"token":{"type":"string","description":"token form: the token asked"},"unit":{"type":"string","enum":["usd","usdc"],"description":"token form: what o/h/l/c are in"},"reference":{"type":"object","description":"token form, EVM: the reference pool (PoolRef) and its rule"},"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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/trades":{"get":{"tags":["Market data"],"summary":"Latest trades / swaps of a market; with filters, the swap history of a wallet, pool or token","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 /api/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). Without filters (market + limit only): the latest swaps of one pool, a bare array, as before. With any of trader, pool, token, side, minUsd, from, to, cursor (hyperevm / elysium): the swap history of a wallet (trader = tx.from), a pool or a token, newest first, paged with `cursor`: an object `{rows, next_cursor, scanned, coverage…}`. Index ranges only: by trader (lower(trader_address), block_timestamp), by pool (pair_address, block_timestamp), by token: every pool of a token with at most 20 pools, else the priced swaps of its token indexes (`coverage: priced`). Filters that the range does not apply (pool / token with trader, side, minUsd, spam) read at most 1000 rows per call: keep paging while next_cursor is not null. usd / minUsd: the indexer's USD value at the swap.","parameters":[{"name":"layer","in":"query","required":true,"description":"Layer","schema":{"type":"string","enum":["elysium","hyperevm","hypercore"]},"example":"elysium"},{"name":"market","in":"query","required":false,"description":"Pair address (pool key) or coin; required without trader / pool / token","schema":{"type":"string"},"example":"0x12e84206cb53ae0df055482ebc4658635096e1aa:0x8a9480e70c99d18d9bde3a7f5cd565be58064945963f62e0c5cc303b6b627847"},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"name":"trader","in":"query","required":false,"description":"History of a wallet (tx.from of the swaps); a named wallet's handle works too","schema":{"type":"string"},"example":"0x5a69a60ca8a4d189855b33bd9f1bbe71095c1039"},{"name":"pool","in":"query","required":false,"description":"History of a pool (alias: market)","schema":{"type":"string"}},{"name":"token","in":"query","required":false,"description":"Swaps where this token is base or quote","schema":{"type":"string"}},{"name":"side","in":"query","required":false,"description":"Buys or sells of the base","schema":{"type":"string","enum":["buy","sell"]}},{"name":"minUsd","in":"query","required":false,"description":"Smallest USD value (the indexer's, at the swap)","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Window start, Unix ms (inclusive)","schema":{"type":"integer"}},{"name":"to","in":"query","required":false,"description":"Window end, Unix ms (exclusive)","schema":{"type":"integer"}},{"name":"includeSpam","in":"query","required":false,"description":"Swaps of spam tokens too (flagged)","schema":{"type":"boolean","default":false}},{"$ref":"#/components/parameters/cursor"}],"responses":{"200":{"description":"Without filters: Trade[]; with any filter: WalletTrades","headers":{"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"oneOf":[{"type":"array","items":{"$ref":"#/components/schemas/Trade"}},{"$ref":"#/components/schemas/WalletTrades"}]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 /api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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":"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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. Next page: `cursor` = the `next_cursor` 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"},{"$ref":"#/components/parameters/cursor"},{"name":"after","in":"query","required":false,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. Last token id of the previous page (`next`)","schema":{"type":"string"},"deprecated":true},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}}],"responses":{"200":{"description":"OK","headers":{"Link":{"$ref":"#/components/headers/Link"}},"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"],"deprecated":true,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`."},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page: pass it as `cursor`, unchanged. null on the last page"},"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","next_cursor"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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"}},{"$ref":"#/components/parameters/cursor"},{"name":"before","in":"query","required":false,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. Cursor block:logIndex:batchIndex (`next`)","schema":{"type":"string"},"deprecated":true},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"OK","headers":{"Link":{"$ref":"#/components/headers/Link"}},"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"],"deprecated":true,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`."},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page: pass it as `cursor`, unchanged. null on the last page"},"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","next_cursor"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 /api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/transfers":{"get":{"tags":["Market data"],"summary":"ERC-20 transfers of a token, or from / to an address, newest first","operationId":"listErc20Transfers","description":"With `address`: the ERC-20 Transfer events from (direction=out), to (in) or either (any, default) an address, newest first, through the events indexes by sender / recipient (migration 024): optional token, window (from / to, Unix ms) and minUsd (amount × the token's current pool price: `usdBasis: current_price`, not the price at the transfer). Filters read at most 1000 rows per direction per call: keep paging while next_cursor is not null. Without `address`: the transfers of one token (needs the events index by contract: 503 on a layer without it). Without address the token is required and 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":false,"description":"Token address (required without address)","schema":{"type":"string"},"example":"0xcd57f65c2b0e5881cfc2e609f7cd53b746e1f234"},{"name":"address","in":"query","required":false,"description":"Transfers from / to this address (a named wallet's handle works too); token then optional","schema":{"type":"string"},"example":"0x5a69a60ca8a4d189855b33bd9f1bbe71095c1039"},{"name":"direction","in":"query","required":false,"description":"With address: received, sent or both","schema":{"type":"string","enum":["in","out","any"],"default":"any"}},{"name":"from","in":"query","required":false,"description":"With address: window start, Unix ms (inclusive)","schema":{"type":"integer"}},{"name":"to","in":"query","required":false,"description":"With address: window end, Unix ms (exclusive)","schema":{"type":"integer"}},{"name":"minUsd","in":"query","required":false,"description":"With address: smallest amount × current token price, USD","schema":{"type":"string"}},{"name":"includeSpam","in":"query","required":false,"description":"With address: transfers of spam tokens too (flagged)","schema":{"type":"boolean","default":false}},{"$ref":"#/components/parameters/cursor"},{"name":"before","in":"query","required":false,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. Cursor block:logIndex (`next`)","schema":{"type":"string"},"deprecated":true},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"OK","headers":{"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"By token","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 /api/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"],"deprecated":true,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`."},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page: pass it as `cursor`, unchanged. null on the last page"},"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","next_cursor"]},{"$ref":"#/components/schemas/AddressTransfers"}]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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"},{"$ref":"#/components/parameters/cursor"},{"name":"before","in":"query","required":false,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. Cursor block:logIndex (`next`)","schema":{"type":"string"},"deprecated":true},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"OK","headers":{"Link":{"$ref":"#/components/headers/Link"}},"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"],"deprecated":true,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`."},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page: pass it as `cursor`, unchanged. null on the last page"},"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","next_cursor"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/tokens/spam":{"get":{"tags":["Tokens & prices"],"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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/tokens/new":{"get":{"tags":["Tokens & prices"],"summary":"Every new token of an EVM layer, newest first","operationId":"listNewTokens","description":"Every ERC-20 the indexer saw appear on HyperEVM or Elysium (any deployer, not only launchpads; V2 LP tokens left out), newest first, with its creation transaction, creator, launchpad, first pool and, once it has a pool, market figures. Ordered by the indexer's serial id (indexing order); `since` / `sinceBlock` bound it. Filters other than since apply to the rows read: a page may hold fewer than `limit` rows (at most 1000 tokens examined per call, `scanned`), keep paging with `next_cursor` until null. Live: WS <layer>.tokens.new.","parameters":[{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"$ref":"#/components/parameters/cursor"},{"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":"launchpad","in":"query","required":false,"description":"ascend, liquidlaunch (a launchpad name), none (no launchpad), any (a launchpad), or a launchpad 0x address","schema":{"type":"string"}},{"name":"hasPool","in":"query","required":false,"description":"true: tokens with a pool; false: without","schema":{"type":"boolean"}},{"name":"minLiquidityUsd","in":"query","required":false,"description":"Minimum liquidityUsd","schema":{"type":"string"},"example":"1000"},{"name":"minHolders","in":"query","required":false,"description":"Minimum holders","schema":{"type":"integer","minimum":0,"maximum":1000000}},{"name":"creator","in":"query","required":false,"description":"Created by this wallet (0x)","schema":{"type":"string"}},{"name":"since","in":"query","required":false,"description":"Created at or after (Unix ms)","schema":{"type":"integer"}},{"name":"sinceBlock","in":"query","required":false,"description":"Created at or after this block","schema":{"type":"integer"}},{"name":"security","in":"query","required":false,"description":"summary: each row gets `security` = {verdict, reasons (3), asOf, height} of GET /api/tokens/{address}/security when a report is cached (< 10 min), else null (then computed in the background: ask again)","schema":{"type":"string","enum":["summary"]}}],"responses":{"200":{"description":"OK","headers":{"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer","example":"hyperevm"},"tokens":{"type":"array","items":{"$ref":"#/components/schemas/TokenNew"},"description":"Newest first"},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page: pass it as `cursor`, unchanged. null on the last page"},"scanned":{"type":"integer","description":"Tokens examined for this page"},"asOf":{"type":"integer","description":"Time of `height` (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"},"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","tokens","next_cursor","scanned"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/pools/{address}":{"get":{"tags":["Market data"],"summary":"One pool: dex, fee tier, tokens, liquidity in USD, depth, 5m / 1h / 6h / 24h windows, top LPs","operationId":"getPool","description":"Identity (dex, factory, fee tier, tick spacing, hooks, tokens, creation block / tx), price, what it holds (`liquidity.method`: balances of the pool contract for V2 / V3 / Algebra / Solidly pools, LiquidLaunch curve reserves, or for a V4 / Infinity pool in its PoolManager the virtual reserves L / √P and L · √P of the in-range liquidity after its last swap: not TVL, `exact: false`), depth to ±2 % from L and √P (approximate: no tick crossed), trades / buys / sells / USD volume / price change over 5m, 1h, 6h, 24h from the candle tables, and for V2-style pools the largest LP holders. Cached 15 s.","parameters":[{"name":"address","in":"path","required":true,"description":"Pool address, or <PoolManager>:<PoolId>","schema":{"type":"string"},"example":"0x6c9a33e3b592c0d65b3ba59355d5be0d38259285"},{"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":{"$ref":"#/components/schemas/PoolDetail"}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/tx/{hash}":{"get":{"tags":["Market data"],"summary":"One transaction: status, gas, value, decoded transfers / swaps / liquidity / NFTs, bridge legs and journey","operationId":"getTransaction","description":"Looked up on HyperEVM, then Elysium (or `layer`): from our tables (block, from / to, status, gas and fee, value, method id; decoded ERC-20 transfers, swaps, liquidity events, pools created, NFT transfers), the raw logs we do not decode from our node's receipt, and when the transaction is a bridge leg its legs, the matched /api/bridges rows (7 days) and the cross-layer journey it is a hop of. A transaction our indexer does not have yet answers from the node (`source: rpc`, nothing decoded). 404 when neither layer knows it.","parameters":[{"name":"hash","in":"path","required":true,"description":"Transaction hash (0x + 64 hex)","schema":{"type":"string","pattern":"^0x[0-9a-fA-F]{64}$"},"example":"0x72a36507af9667d7e97255cf2efa1494a6db3e908cd7ca96a1788ff2215802eb"},{"name":"layer","in":"query","required":false,"description":"Only this layer (default: HyperEVM, then Elysium)","schema":{"type":"string","enum":["hyperevm","elysium"]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Transaction"}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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 transaction","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/pools/new":{"get":{"tags":["Tokens & prices"],"summary":"Every new pool of an EVM layer, newest first","operationId":"listNewPools","description":"Every pair / pool of every DEX factory, PoolManager and launchpad curve the indexer knows (discovered ones included) on HyperEVM or Elysium, newest first: both tokens and whether each is new, creation transaction, initial and current liquidity, price and 24 h volume. Filters other than since / dex / token apply to the rows read (at most 1000 per call): keep paging with `next_cursor` until null. Live: WS <layer>.pools.new.","parameters":[{"name":"layer","in":"query","required":true,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"]},"example":"hyperevm"},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"$ref":"#/components/parameters/cursor"},{"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":"dex","in":"query","required":false,"description":"Protocol (hyperswap_v3, projectx_v3, uniswap_v4, pancake_infinity_cl, liquidlaunch…)","schema":{"type":"string"}},{"name":"token","in":"query","required":false,"description":"Pools of this token, either side (0x)","schema":{"type":"string"}},{"name":"quote","in":"query","required":false,"description":"Pools quoted in this token (0x), e.g. WHYPE","schema":{"type":"string"},"example":"0x5555555555555555555555555555555555555555"},{"name":"minLiquidityUsd","in":"query","required":false,"description":"Minimum liquidity.usd","schema":{"type":"string"}},{"name":"newTokenOnly","in":"query","required":false,"description":"Only pools with a new token (newToken not null)","schema":{"type":"boolean"}},{"name":"newWithinMin","in":"query","required":false,"description":"A side is new when created at most this many minutes before the pool","schema":{"type":"integer","minimum":1,"maximum":10080,"default":60}},{"name":"since","in":"query","required":false,"description":"Created at or after (Unix ms)","schema":{"type":"integer"}},{"name":"sinceBlock","in":"query","required":false,"description":"Created at or after this block","schema":{"type":"integer"}}],"responses":{"200":{"description":"OK","headers":{"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer","example":"hyperevm"},"pools":{"type":"array","items":{"$ref":"#/components/schemas/PoolNew"},"description":"Newest first"},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page: pass it as `cursor`, unchanged. null on the last page"},"scanned":{"type":"integer","description":"Pools examined for this page"},"asOf":{"type":"integer","description":"Time of `height` (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"},"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","pools","next_cursor","scanned"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","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"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 /api/liquidations)"},"description":"10 largest"}},"required":["window","from","to","bucketMs","total","byCoin","buckets","topAccounts","largest"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/hypercore/stops":{"get":{"tags":["Stops & take-profits"],"summary":"Stop-loss / take-profit map of one coin","operationId":"stopMap","description":"Where the open trigger orders of one HyperCore market sit: Stop and Take Profit orders (market and limit) bucketed by trigger price over mark ± range_pct %, per bucket the count, size and notional (size × trigger price) of stops and take-profits, sell (closes longs) and buy (closes shorts), market and limit. Position TP/SL placed with size 0 (the whole position) are counted apart under `whole`, sized from the latest positions snapshot (`positions`) when it holds the position. Bucket edges are exact multiples of `step`: with `buckets`, the width is rounded up to 1, 2, 2.5 or 5 × 10^k (never more buckets than asked). `totals`: every open trigger order of the coin; `below` / `above`: outside the grid. Mark = last trade, as /api/positions/liqmap. Cut at `height` / `asOf` (latest status of the open trigger-order table), cached about 3 s. Live: WS hc.stops.","parameters":[{"name":"coin","in":"query","required":true,"description":"HyperCore coin: perp (BTC), HIP-3 (xyz:TSLA)","schema":{"type":"string"},"example":"BTC"},{"name":"buckets","in":"query","required":false,"description":"Most buckets (width rounded up to a round number)","schema":{"type":"integer","minimum":1,"maximum":400,"default":40}},{"name":"step","in":"query","required":false,"description":"Bucket width in price units, instead of buckets (at most 400 buckets)","schema":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"example":"500"},{"name":"range_pct","in":"query","required":false,"description":"Half-width of the grid around the mark, percent, (0, 100]","schema":{"type":"string","pattern":"^\\d+(\\.\\d+)?$","default":"10"},"example":"10"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coin":{"type":"string","description":"Coin","example":"BTC"},"markPx":{"type":["string","null"],"description":"Mark: last trade (exact decimal string, null when unknown)","example":"108250"},"asOf":{"type":"integer","description":"Time of `height` (latest status of the open trigger-order table) (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 (latest status of the open trigger-order table)"},"rangePct":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"range_pct applied (exact decimal string)","example":"10"},"step":{"type":["string","null"],"description":"Bucket width (exact decimal string, null when unknown)","example":"500"},"buckets":{"type":"array","items":{"$ref":"#/components/schemas/StopBucket"},"description":"Ascending price; empty when the mark is unknown"},"below":{"type":"object","properties":{"count":{"type":"integer","description":"Orders under the first bucket"},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Their notional (exact decimal string)"}},"required":["count","notional"]},"above":{"type":"object","properties":{"count":{"type":"integer","description":"Orders at or over the last bucket high edge"},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Their notional (exact decimal string)"}},"required":["count","notional"]},"totals":{"$ref":"#/components/schemas/StopGroup"},"positions":{"type":["object","null"],"description":"The perp positions snapshot that sized the whole-position orders (asOf, height); null without one","properties":{"asOf":{"type":"integer","description":"Snapshot time (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Snapshot block"}}},"unavailable":{"type":"string","description":"Present when the mark is unknown (no recent trade): buckets empty, totals still given"}},"required":["coin","markPx","asOf","height","rangePct","step","buckets","below","above","totals","positions"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/hypercore/liquidation-map":{"get":{"tags":["Stops & take-profits"],"summary":"Liquidation prices of open positions, bucketed by price","operationId":"liquidationPriceMap","description":"Where open perp positions of one HyperCore market get liquidated: their real liquidation prices bucketed over mark ± range_pct %, per bucket the longs (a forced sell when price falls to them) and the shorts (a forced buy when it rises), count, |size| and |size| × liquidation price. Every account's open positions at the latest positions snapshot (`asOf` / `height`, about every 12 min); each liquidation price is Hyperliquid's formula on the account state (margin tiers, cross and isolated; checked against Hyperliquid's clearinghouseState, median gap 0.0024 %), not a model from leverage buckets. `coverage`: the share of open interest that has one (portfolio-margin cross accounts and positions that cannot be liquidated have none). Same grid parameters and buckets as /api/hypercore/stops and /api/hypercore/forced-flow. Live: WS hc.liquidations.map; liquidations as they happen: WS hc.liquidations.","parameters":[{"name":"coin","in":"query","required":true,"description":"HyperCore perp coin: BTC, xyz:TSLA","schema":{"type":"string"},"example":"BTC"},{"name":"buckets","in":"query","required":false,"description":"Most buckets (width rounded up to a round number)","schema":{"type":"integer","minimum":1,"maximum":400,"default":40}},{"name":"step","in":"query","required":false,"description":"Bucket width in price units, instead of buckets (at most 400 buckets)","schema":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"example":"500"},{"name":"range_pct","in":"query","required":false,"description":"Half-width of the grid around the mark, percent, (0, 100]","schema":{"type":"string","pattern":"^\\d+(\\.\\d+)?$","default":"10"},"example":"10"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coin":{"type":"string","description":"Coin","example":"BTC"},"markPx":{"type":["string","null"],"description":"Mark: last trade (exact decimal string, null when unknown)","example":"108250"},"asOf":{"type":"integer","description":"Time of `height` (the positions snapshot) (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 (the positions snapshot)"},"rangePct":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"range_pct applied (exact decimal string)","example":"10"},"step":{"type":["string","null"],"description":"Bucket width (exact decimal string, null when unknown)","example":"500"},"buckets":{"type":"array","items":{"type":"object","properties":{"pxLo":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Bucket low edge (inclusive) (exact decimal string)"},"pxHi":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Bucket high edge (exclusive) (exact decimal string)"},"long":{"$ref":"#/components/schemas/Liq"},"short":{"$ref":"#/components/schemas/Liq"}},"required":["pxLo","pxHi","long","short"]},"description":"Ascending price; empty when the mark is unknown"},"below":{"$ref":"#/components/schemas/LiqSides"},"above":{"$ref":"#/components/schemas/LiqSides"},"totals":{"$ref":"#/components/schemas/LiqSides"},"coverage":{"$ref":"#/components/schemas/LiqCoverage"},"unavailable":{"type":"string","description":"Present when the mark is unknown or no position of the coin has a liquidation price"}},"required":["coin","markPx","asOf","height","rangePct","step","buckets","below","above","totals","coverage"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/hypercore/forced-flow":{"get":{"tags":["Stops & take-profits"],"summary":"Stops and liquidations on the same price buckets","operationId":"forcedFlow","description":"The stop map and the liquidation map of one HyperCore market on one grid: per bucket the open stop-loss / take-profit orders by kind and side (market and limit, whole-position ones sized), the liquidation prices of open positions by side, and two flows. `cascade` = what fires with the move and feeds it: sell = sell stop-losses + long liquidations (met on the way down), buy = buy stop-losses + short liquidations (on the way up). Take-profits fire against the move (sell ones above the mark, buy ones below): they are in `stops.takeProfit`, and `forced` = cascade + take-profits. `cumCascadeSell` / `cumSell` sum the cascade / forced selling from the mark's bucket down to each bucket under it, `cumCascadeBuy` / `cumBuy` the buying from it up; `summary` = their totals inside the grid, plus the take-profits on the far side of the mark. Each source keeps its own cut (`stops`, `liquidations`). Live: WS hc.forced_flow.map.","parameters":[{"name":"coin","in":"query","required":true,"description":"HyperCore perp coin: BTC, xyz:TSLA","schema":{"type":"string"},"example":"BTC"},{"name":"buckets","in":"query","required":false,"description":"Most buckets (width rounded up to a round number)","schema":{"type":"integer","minimum":1,"maximum":400,"default":40}},{"name":"step","in":"query","required":false,"description":"Bucket width in price units, instead of buckets (at most 400 buckets)","schema":{"type":"string","pattern":"^\\d+(\\.\\d+)?$"},"example":"500"},{"name":"range_pct","in":"query","required":false,"description":"Half-width of the grid around the mark, percent, (0, 100]","schema":{"type":"string","pattern":"^\\d+(\\.\\d+)?$","default":"10"},"example":"10"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"coin":{"type":"string","description":"Coin","example":"BTC"},"markPx":{"type":["string","null"],"description":"Mark: last trade (exact decimal string, null when unknown)","example":"108250"},"rangePct":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"range_pct applied (exact decimal string)","example":"10"},"step":{"type":["string","null"],"description":"Bucket width (exact decimal string, null when unknown)","example":"500"},"stops":{"type":"object","description":"Cut of the stops","properties":{"asOf":{"type":["integer","null"],"description":"Open trigger-order table cut (Unix ms)"},"height":{"type":["integer","null"]},"positions":{"type":["object","null"],"description":"Snapshot sizing whole-position orders"}},"required":["asOf","height","positions"]},"liquidations":{"type":"object","description":"Cut of the liquidation prices","properties":{"asOf":{"type":"integer","description":"Positions snapshot time (Unix ms)","example":1792236158000},"height":{"type":"integer","description":"Its block"},"coverage":{"$ref":"#/components/schemas/LiqCoverage"}},"required":["asOf","height","coverage"]},"buckets":{"type":"array","items":{"type":"object","properties":{"pxLo":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Bucket low edge (inclusive) (exact decimal string)"},"pxHi":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Bucket high edge (exclusive) (exact decimal string)"},"stops":{"type":"object","description":"Open trigger orders by kind and side","properties":{"stop":{"type":"object","properties":{"sell":{"$ref":"#/components/schemas/Flow"},"buy":{"$ref":"#/components/schemas/Flow"}},"required":["sell","buy"]},"takeProfit":{"type":"object","properties":{"sell":{"$ref":"#/components/schemas/Flow"},"buy":{"$ref":"#/components/schemas/Flow"}},"required":["sell","buy"]}},"required":["stop","takeProfit"]},"liquidations":{"type":"object","description":"Positions liquidated in the bucket","properties":{"long":{"$ref":"#/components/schemas/Flow"},"short":{"$ref":"#/components/schemas/Flow"}},"required":["long","short"]},"cascade":{"type":"object","description":"Fires with the move: sell = sell stop-losses + long liquidations; buy = buy stop-losses + short liquidations","properties":{"sell":{"$ref":"#/components/schemas/Flow"},"buy":{"$ref":"#/components/schemas/Flow"}},"required":["sell","buy"]},"forced":{"type":"object","description":"cascade + take-profits: sell = sell stops / take-profits + long liquidations; buy = buy ones + short liquidations","properties":{"sell":{"$ref":"#/components/schemas/Flow"},"buy":{"$ref":"#/components/schemas/Flow"}},"required":["sell","buy"]},"cumCascadeSell":{"type":["string","null"],"description":"Buckets at or under the mark's: cascade sell notional from the mark down to this bucket; null over it (exact decimal string, null when unknown)"},"cumCascadeBuy":{"type":["string","null"],"description":"Buckets at or over the mark's: cascade buy notional from the mark up to this bucket; null under it (exact decimal string, null when unknown)"},"cumSell":{"type":["string","null"],"description":"Buckets at or under the mark's: forced sell notional from the mark down to this bucket; null over it (exact decimal string, null when unknown)"},"cumBuy":{"type":["string","null"],"description":"Buckets at or over the mark's: forced buy notional from the mark up to this bucket; null under it (exact decimal string, null when unknown)"}},"required":["pxLo","pxHi","stops","liquidations","cascade","forced","cumCascadeSell","cumCascadeBuy","cumSell","cumBuy"]},"description":"Ascending price"},"summary":{"type":"object","description":"Inside the grid: cascade selling at or under the mark's bucket and buying at or over it; sell take-profits at or over it and buy ones at or under it; forced = cascade + take-profits on each side","properties":{"cascadeSellBelow":{"$ref":"#/components/schemas/Flow"},"cascadeBuyAbove":{"$ref":"#/components/schemas/Flow"},"takeProfitSellAbove":{"$ref":"#/components/schemas/Flow"},"takeProfitBuyBelow":{"$ref":"#/components/schemas/Flow"},"sellBelow":{"$ref":"#/components/schemas/Flow"},"buyAbove":{"$ref":"#/components/schemas/Flow"}},"required":["cascadeSellBelow","cascadeBuyAbove","takeProfitSellAbove","takeProfitBuyBelow","sellBelow","buyAbove"]},"unavailable":{"type":"string","description":"Present when the mark is unknown"}},"required":["coin","markPx","rangePct","step","stops","liquidations","buckets","summary"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/hypercore/stops/triggered":{"get":{"tags":["Stops & take-profits"],"summary":"Stop-loss / take-profit orders that fired","operationId":"triggeredStops","description":"The trigger orders of one HyperCore market that fired, newest first: the trigger order (wallet, side, trigger and limit price, size; 0 = whole position), the order it placed with its status in the trigger block (`child`) and that order's fills in the block (`fill`: size, average price, notional). Window: since / until (default the last hour), at most 24 h per call, 7 days back (an older since is clamped: the answer's `since` says where it starts). Named wallets carry `entity`. Live: WS hc.stops (status triggered).","parameters":[{"name":"coin","in":"query","required":true,"description":"HyperCore coin","schema":{"type":"string"},"example":"BTC"},{"name":"since","in":"query","required":false,"description":"Window start (Unix ms, default until − 1 h)","schema":{"type":"integer"}},{"name":"until","in":"query","required":false,"description":"Window end (Unix ms, exclusive, default now)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"$ref":"#/components/parameters/cursor"}],"responses":{"200":{"description":"OK","headers":{"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","properties":{"coin":{"type":"string","description":"Coin","example":"BTC"},"since":{"type":"integer","description":"Window start read (Unix ms)","example":1792236158000},"until":{"type":"integer","description":"Window end (Unix ms)","example":1792236158000},"events":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/StopOrder"},{"type":"object","properties":{"triggeredAt":{"type":"integer","description":"When it fired (= statusTime) (Unix ms)","example":1792236158000},"child":{"type":["object","null"],"description":"The order the trigger placed: its status in the trigger block (filled, open, canceled…), size, limit price","properties":{"status":{"type":"string","description":"Status","example":"filled"},"sz":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Size (exact decimal string)"},"limitPx":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Limit price (exact decimal string)"}}},"fill":{"type":["object","null"],"description":"Fills of that order in the trigger block; null when none","properties":{"sz":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ size (exact decimal string)"},"avgPx":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Average price (exact decimal string)"},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ px × sz, 2 decimals (exact decimal string)"},"fills":{"type":"integer","description":"Fills"}}}},"required":["triggeredAt","child","fill"]}]},"description":"Newest first"},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page: pass it as `cursor`, unchanged. null on the last page"}},"required":["coin","since","until","events","next_cursor"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/hypercore/wallet/{address}/stops":{"get":{"tags":["Stops & take-profits"],"summary":"A wallet's stop-loss / take-profit orders","operationId":"walletStops","description":"One wallet's HyperCore trigger orders. Default: its open trigger orders now, newest placed first (at most 1000; `truncated` past that). `history=1`: every status event of its trigger orders instead (placed, triggered, canceled, rejected, and the fill or cancel of the order a trigger placed, `triggered: true`), newest first, from the per-wallet event table (kept 3 days): since / until (default the last 24 h), status, limit, cursor; billed as a heavy call. Live: WS hc.stops with filter.user.","parameters":[{"name":"address","in":"path","required":true,"description":"0x address, or a named wallet's handle <entityId>.<hex>","schema":{"type":"string"},"example":"0x419322ab2d1e401fe2d602999e347b844f9a3c90"},{"name":"history","in":"query","required":false,"description":"1: past status events instead of the open orders (heavy call)","schema":{"type":"integer","enum":[0,1],"default":0}},{"name":"since","in":"query","required":false,"description":"history: window start (Unix ms, default until − 24 h, 3 days back at most)","schema":{"type":"integer"}},{"name":"until","in":"query","required":false,"description":"history: window end (Unix ms, exclusive, default now)","schema":{"type":"integer"}},{"name":"status","in":"query","required":false,"description":"history: one status (open, triggered, canceled, filled…)","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"history: events","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"$ref":"#/components/parameters/cursor"}],"responses":{"200":{"description":"OK","headers":{"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"history absent or 0","properties":{"address":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"The wallet: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"asOf":{"type":"integer","description":"Time of `height` (latest status of the open trigger-order table) (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 (latest status of the open trigger-order table)"},"orders":{"type":"array","items":{"$ref":"#/components/schemas/StopOrder"},"description":"Open trigger orders, newest placed first"},"count":{"type":"integer","description":"Orders listed"},"truncated":{"type":"boolean","description":"More than 1000 open trigger orders: the newest 1000 listed"},"entity":{"$ref":"#/components/schemas/EntityRef"}},"required":["address","asOf","height","orders","count","truncated"]},{"type":"object","description":"history=1","properties":{"address":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"The wallet: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"since":{"type":"integer","description":"Window start read (Unix ms)","example":1792236158000},"until":{"type":"integer","description":"Window end (Unix ms)","example":1792236158000},"events":{"type":"array","items":{"$ref":"#/components/schemas/StopOrder"},"description":"Status events, newest first"},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page: pass it as `cursor`, unchanged. null on the last page"},"entity":{"$ref":"#/components/schemas/EntityRef"}},"required":["address","since","until","events","next_cursor"]}]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/balances/{address}":{"get":{"tags":["Balances"],"summary":"Token balances of an address on HyperCore, HyperEVM and Elysium","operationId":"getBalances","description":"One flat list of what the address holds: HyperCore spot tokens (live, node info server), HyperEVM and Elysium ERC-20s and native HYPE (indexer, one consistent snapshot at `layers.<layer>.height`), each with raw base units, decimal amount, USD price and value; spam tokens flagged and left out by default. HyperCore perp accounts (account value, withdrawable) apart in `perp`. Totals per layer and overall. Past balances: `block` or `at` on one layer (EVM: our archive node, for the `tokens` asked, at most 20; HyperCore: the spot holdings of the holder snapshot at or before it, ~12 min apart for 24 h then hourly, 7 days kept; no USD). `verify=true` (EVM layers): the rows answered read again on the node at the same block, each with `onchain` and `layers.<layer>.verify`.","parameters":[{"name":"address","in":"path","required":true,"description":"0x address, or a named wallet's handle <entityId>.<hex>","schema":{"type":"string"},"example":"0x24a44f1dc25540c62c1196ffc297dfc951c91ab4"},{"name":"layer","in":"query","required":false,"description":"Layer(s) read","schema":{"type":"string","enum":["hypercore","hyperevm","elysium","all"],"default":"all"}},{"name":"tokens","in":"query","required":false,"description":"Comma list (at most 50; 20 with block / at): EVM token addresses (`native` = HYPE) and HyperCore coin names; every token asked is listed, held or not (0)","schema":{"type":"string"}},{"name":"minUsd","in":"query","required":false,"description":"Leave out holdings worth less (and unpriced ones)","schema":{"type":"number","minimum":0}},{"name":"sort","in":"query","required":false,"description":"Order","schema":{"type":"string","enum":["usd","amount"],"default":"usd"}},{"name":"limit","in":"query","required":false,"description":"Rows","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"name":"includeSpam","in":"query","required":false,"description":"List spam tokens (flagged spam / spamReason); never in the totals","schema":{"type":"boolean","default":false}},{"name":"block","in":"query","required":false,"description":"Past balances at this block (one layer; EVM: tokens= required; HyperCore: the snapshot at or before this height)","schema":{"type":"integer","minimum":0}},{"name":"at","in":"query","required":false,"description":"Past balances at this time (Unix ms): the last block at or before it","schema":{"type":"integer"}},{"name":"verify","in":"query","required":false,"description":"EVM layers: read the rows answered (at most 50 per layer) again on the node at the same block","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Balances"}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/balances/{address}/{token}":{"get":{"tags":["Balances"],"summary":"One token balance of an address","operationId":"getTokenBalance","description":"One row, the fast path: HyperEVM / Elysium through the (token, holder) unique index of the indexer, HyperCore from the node; 0 when not held, 404 when the token is unknown on the layer. Layer: hypercore for a coin name, hyperevm for a 0x address unless `layer` says elysium. `block` / `at` and `verify` as on /api/balances/{address}.","parameters":[{"name":"address","in":"path","required":true,"description":"0x address, or a named wallet's handle <entityId>.<hex>","schema":{"type":"string"},"example":"0x24a44f1dc25540c62c1196ffc297dfc951c91ab4"},{"name":"token","in":"path","required":true,"description":"EVM token address, `native` (HYPE), or a HyperCore coin name","schema":{"type":"string"},"example":"0x5555555555555555555555555555555555555555"},{"name":"layer","in":"query","required":false,"description":"Default: hypercore for a coin name, hyperevm for an address","schema":{"type":"string","enum":["hypercore","hyperevm","elysium"]}},{"name":"block","in":"query","required":false,"description":"Past balance at this block","schema":{"type":"integer","minimum":0}},{"name":"at","in":"query","required":false,"description":"Past balance at this time (Unix ms)","schema":{"type":"integer"}},{"name":"verify","in":"query","required":false,"description":"EVM layers: read it again on the node at the same block","schema":{"type":"boolean","default":false}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"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":"The address: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"layer":{"type":"string","description":"Layer"},"token":{"type":"string","description":"Token asked"},"balance":{"$ref":"#/components/schemas/BalanceRow"},"layers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/BalanceLayer"}},"entity":{"type":"object"}},"required":["address","layer","token","balance","layers"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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 on this layer","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/balances/batch":{"post":{"tags":["Balances"],"summary":"Balances of up to 100 addresses","operationId":"batchBalances","description":"The /api/balances/{address} answer for each address, read together (one indexer read per EVM layer). Body: `addresses` (1..100, addresses or named-wallet handles) and the same options as the query of /api/balances/{address} (`layer`, `tokens` as an array or comma string, `minUsd`, `sort`, `limit`, `includeSpam`, `block` / `at`: addresses × tokens <= 400); no `verify`. Billed heavy: one unit per 20 addresses.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"addresses":{"type":"array","minItems":1,"maxItems":100,"items":{"type":"string"},"description":"Addresses (or named-wallet handles)"},"layer":{"type":"string","enum":["hypercore","hyperevm","elysium","all"],"default":"all"},"tokens":{"oneOf":[{"type":"array","items":{"type":"string"}},{"type":"string"}],"description":"EVM token addresses (`native`) and HyperCore coin names"},"minUsd":{"type":"number","minimum":0},"sort":{"type":"string","enum":["usd","amount"]},"limit":{"type":"integer","minimum":1,"maximum":1000},"includeSpam":{"type":"boolean"},"block":{"type":"integer","minimum":0},"at":{"type":"integer"}},"required":["addresses"]},"example":{"addresses":["0x24a44f1dc25540c62c1196ffc297dfc951c91ab4","0x5a69a60ca8a4d189855b33bd9f1bbe71095c1039"],"layer":"all","minUsd":1}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer(s) read"},"count":{"type":"integer","description":"Addresses answered"},"results":{"type":"array","items":{"$ref":"#/components/schemas/Balances"},"description":"One answer per distinct address, in the order asked"}},"required":["layer","count","results"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 /api/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":"Entities: named (people, funds, pseudonyms from public sources), cluster (anonymous smart-money clusters: HyperCore traders selected on their results), all, or a kind it contains (whale, market maker…). Default: all","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}},{"$ref":"#/components/parameters/cursor"},{"name":"offset","in":"query","required":false,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. Skip","schema":{"type":"integer","minimum":0,"default":0},"deprecated":true}],"responses":{"200":{"description":"OK","headers":{"Link":{"$ref":"#/components/headers/Link"}},"content":{"application/json":{"schema":{"type":"object","properties":{"total":{"type":"integer","description":"Entities matching"},"entities":{"type":"array","items":{"$ref":"#/components/schemas/Entity"}},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page: pass it as `cursor`, unchanged. null on the last page"}},"required":["total","entities","next_cursor"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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 /api/wallet answer, summed up)"}}},"required":["entity","totals","hypercore30d","wallets"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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":"Entities: named (people, funds, pseudonyms from public sources), cluster (anonymous smart-money clusters: HyperCore traders selected on their results), all, or a kind it contains (whale, market maker…). Default: named","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 (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/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: named (people, funds, pseudonyms from public sources), cluster (anonymous smart-money clusters: HyperCore traders selected on their results), all, or a kind it contains (whale, market maker…). Default: named","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"}},{"$ref":"#/components/parameters/cursor"},{"name":"before","in":"query","required":false,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. Cursor (`next`)","schema":{"type":"string"},"deprecated":true},{"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","headers":{"Link":{"$ref":"#/components/headers/Link"}},"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"],"deprecated":true,"description":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`."},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page: pass it as `cursor`, unchanged. null on the last page"},"bridges":{"type":"array","items":{"$ref":"#/components/schemas/KolItem"},"description":"EVM layers, first page: the latest bridge legs of the named wallets"}},"required":["layer","rows","next_cursor"]}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/webhooks":{"post":{"tags":["Webhooks"],"summary":"Create a webhook: your URL, its subscriptions","operationId":"createWebhook","description":"Outgoing webhooks: we POST the events of your subscriptions to your HTTPS URL. Channels and filters are the WebSocket's (bridge.transfers, elysium.bridge, wallet, hc.liquidations, hc.positions, elysium.launches, hyperevm.launches); `wallet` takes up to 100 addresses per subscription, `hc.positions` a min_notional of at least 10000. A delivery carries the events of one subscription from one source block (batch \"block\", at most 100 events or 256 KiB) or one event (batch \"none\"). Signed per the Standard Webhooks spec: headers webhook-id (stable across retries: dedupe on it), webhook-timestamp, webhook-signature (v1,<base64 HMAC-SHA256 of id.timestamp.body with the base64 part of your whsec_ secret>; two signatures during a secret rotation's 24 h overlap). At least once: answer 2xx within 10 s; anything else (3xx included, redirects are not followed) is retried after 5 s, 5 min, 30 min, 2 h, 5 h, 10 h (7 attempts, Retry-After of a 429 / 503 honoured), then the delivery is dead (kept 7 days, replayable). 410 Gone, or 50 failures in a row over more than 24 h, disables the webhook: its GET says so and every API answer of your key carries X-Femtos-Notice. A new or re-enabled webhook first gets a webhook.verification POST: answer it {\"challenge\": \"<data.challenge>\"}; nothing else is sent before. Per subscription, `seq` numbers the deliveries; after a restart of our stream a `gap` delivery {from, to, channels} names the window to re-read from the REST API. Limits per tier (endpoints / subscriptions / deliveries a day): free 2 / 5 / 10,000, builder 10 / 50 / 500,000, pro 50 / 500 / 5,000,000, scale 200 / 5000 / unlimited. Targets: https on port 443 or 8443, public addresses only. The secret (whsec_…) is answered here once.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"https, port 443 or 8443, a public address","example":"https://example.com/femtos"},"description":{"type":"string","description":"Your label (<= 200 characters)"},"subscriptions":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","description":"A channel and its filter, as on the WebSocket","properties":{"channel":{"type":"string","enum":["bridge.transfers","elysium.bridge","wallet","hc.liquidations","hc.positions","elysium.launches","hyperevm.launches"]},"filter":{"type":"object","description":"The WebSocket filter of the channel. wallet: {address: one, a comma list or an array of up to 100 (0x or named-wallet handles), channel?: event kinds}; hc.positions: min_notional >= 10000 (default 100000)","additionalProperties":true},"batch":{"type":"string","enum":["block","none"],"default":"block","description":"block: the events of one source block per delivery; none: one event per delivery"}},"required":["channel"]}}},"required":["url","subscriptions"]},"example":{"url":"https://example.com/femtos","subscriptions":[{"channel":"hc.liquidations","filter":{"min_notional":"100000"}},{"channel":"wallet","filter":{"address":["0xf122277ba28a959d2c1b675f6f76570696c9d819"]}}]}}}},"responses":{"201":{"description":"Created, pending verification","content":{"application/json":{"schema":{"type":"object","properties":{"webhook":{"$ref":"#/components/schemas/Webhook"},"secret":{"type":"string","description":"whsec_<base64>: verify our signatures with it; shown once"},"verification":{"type":"string","description":"What to answer the challenge"}}}}}},"400":{"description":"Invalid url (the target guard) or subscription (invalid_param, `param`)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or unknown key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required"},"403":{"description":"Demo pass (forbidden), or a tier limit (limit_reached)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such webhook for this key's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Webhooks not enabled on this server (source_unavailable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}},"get":{"tags":["Webhooks"],"summary":"Your account's webhooks","operationId":"listWebhooks","description":"Bound to the account, not the key: a rotated key sees the same webhooks.","parameters":[{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":50}},{"$ref":"#/components/parameters/cursor"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"webhooks":{"type":"array","items":{"$ref":"#/components/schemas/Webhook"}},"next_cursor":{"type":["string","null"]}}}}},"headers":{"Link":{"$ref":"#/components/headers/Link"}}},"401":{"description":"Missing or unknown key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required"},"403":{"description":"Demo pass (forbidden), or a tier limit (limit_reached)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such webhook for this key's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Webhooks not enabled on this server (source_unavailable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/webhooks/{id}":{"get":{"tags":["Webhooks"],"summary":"One webhook: state, failures, subscriptions, deliveries today","operationId":"getWebhook","parameters":[{"name":"id","in":"path","required":true,"description":"Webhook id","schema":{"type":"string","pattern":"^wh_[A-Za-z0-9_-]{16}$"},"example":"wh_3fJ9xQ2mV8kLp0aZ"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"description":"Missing or unknown key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required"},"403":{"description":"Demo pass (forbidden), or a tier limit (limit_reached)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such webhook for this key's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Webhooks not enabled on this server (source_unavailable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}},"patch":{"tags":["Webhooks"],"summary":"Change the URL (verified again), description or subscriptions (the whole list)","operationId":"updateWebhook","parameters":[{"name":"id","in":"path","required":true,"description":"Webhook id","schema":{"type":"string","pattern":"^wh_[A-Za-z0-9_-]{16}$"},"example":"wh_3fJ9xQ2mV8kLp0aZ"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"url":{"type":"string","description":"https, port 443 or 8443, a public address","example":"https://example.com/femtos"},"description":{"type":"string","description":"Your label (<= 200 characters)"},"subscriptions":{"type":"array","minItems":1,"maxItems":50,"items":{"type":"object","description":"A channel and its filter, as on the WebSocket","properties":{"channel":{"type":"string","enum":["bridge.transfers","elysium.bridge","wallet","hc.liquidations","hc.positions","elysium.launches","hyperevm.launches"]},"filter":{"type":"object","description":"The WebSocket filter of the channel. wallet: {address: one, a comma list or an array of up to 100 (0x or named-wallet handles), channel?: event kinds}; hc.positions: min_notional >= 10000 (default 100000)","additionalProperties":true},"batch":{"type":"string","enum":["block","none"],"default":"block","description":"block: the events of one source block per delivery; none: one event per delivery"}},"required":["channel"]}}},"required":[]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"400":{"description":"Invalid url or subscription","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or unknown key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required"},"403":{"description":"Demo pass (forbidden), or a tier limit (limit_reached)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such webhook for this key's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Webhooks not enabled on this server (source_unavailable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}},"delete":{"tags":["Webhooks"],"summary":"Delete a webhook and its pending deliveries","operationId":"deleteWebhook","parameters":[{"name":"id","in":"path","required":true,"description":"Webhook id","schema":{"type":"string","pattern":"^wh_[A-Za-z0-9_-]{16}$"},"example":"wh_3fJ9xQ2mV8kLp0aZ"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string","description":"Webhook id"},"deleted":{"type":"boolean"}}}}}},"401":{"description":"Missing or unknown key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required"},"403":{"description":"Demo pass (forbidden), or a tier limit (limit_reached)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such webhook for this key's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Webhooks not enabled on this server (source_unavailable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/webhooks/{id}/test":{"post":{"tags":["Webhooks"],"summary":"Send a webhook.test delivery (not billed)","operationId":"testWebhook","parameters":[{"name":"id","in":"path","required":true,"description":"Webhook id","schema":{"type":"string","pattern":"^wh_[A-Za-z0-9_-]{16}$"},"example":"wh_3fJ9xQ2mV8kLp0aZ"}],"responses":{"202":{"description":"Queued","content":{"application/json":{"schema":{"type":"object","properties":{"msgId":{"type":"string","description":"Its webhook-id"},"status":{"type":"string","description":"queued"}}}}}},"401":{"description":"Missing or unknown key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required"},"403":{"description":"Demo pass (forbidden), or a tier limit (limit_reached)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such webhook for this key's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Not verified yet, or disabled (invalid_state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Webhooks not enabled on this server (source_unavailable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/webhooks/{id}/deliveries":{"get":{"tags":["Webhooks"],"summary":"Deliveries, newest first, with every attempt (kept 7 days)","operationId":"listWebhookDeliveries","parameters":[{"name":"id","in":"path","required":true,"description":"Webhook id","schema":{"type":"string","pattern":"^wh_[A-Za-z0-9_-]{16}$"},"example":"wh_3fJ9xQ2mV8kLp0aZ"},{"name":"status","in":"query","schema":{"type":"string","enum":["pending","delivered","dead"]}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":20}},{"$ref":"#/components/parameters/cursor"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"deliveries":{"type":"array","items":{"$ref":"#/components/schemas/WebhookDelivery"}},"next_cursor":{"type":["string","null"]}}}}},"headers":{"Link":{"$ref":"#/components/headers/Link"}}},"401":{"description":"Missing or unknown key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required"},"403":{"description":"Demo pass (forbidden), or a tier limit (limit_reached)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such webhook for this key's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Webhooks not enabled on this server (source_unavailable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/webhooks/{id}/deliveries/{msg}/replay":{"post":{"tags":["Webhooks"],"summary":"Send one delivered or dead delivery again (same webhook-id)","operationId":"replayWebhookDelivery","parameters":[{"name":"id","in":"path","required":true,"description":"Webhook id","schema":{"type":"string","pattern":"^wh_[A-Za-z0-9_-]{16}$"},"example":"wh_3fJ9xQ2mV8kLp0aZ"},{"name":"msg","in":"path","required":true,"schema":{"type":"string","pattern":"^msg_[A-Za-z0-9_-]{27}$"},"description":"msgId of the delivery"}],"responses":{"202":{"description":"Queued","content":{"application/json":{"schema":{"type":"object","properties":{"replayed":{"type":"integer","description":"1"},"msgId":{"type":"string","description":"The delivery"}}}}}},"401":{"description":"Missing or unknown key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required"},"403":{"description":"Demo pass (forbidden), or a tier limit (limit_reached)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such webhook for this key's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Still pending (invalid_state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Webhooks not enabled on this server (source_unavailable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/webhooks/{id}/replay":{"post":{"tags":["Webhooks"],"summary":"Send every dead (or every) delivery since a time again","operationId":"replayWebhook","parameters":[{"name":"id","in":"path","required":true,"description":"Webhook id","schema":{"type":"string","pattern":"^wh_[A-Za-z0-9_-]{16}$"},"example":"wh_3fJ9xQ2mV8kLp0aZ"},{"name":"since","in":"query","required":true,"schema":{"type":"integer"},"description":"Unix ms, within the last 7 days"},{"name":"status","in":"query","schema":{"type":"string","enum":["dead","all"],"default":"dead"}}],"responses":{"202":{"description":"Queued","content":{"application/json":{"schema":{"type":"object","properties":{"replayed":{"type":"integer","description":"Deliveries queued again"}}}}}},"400":{"description":"since missing or older than 7 days","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing or unknown key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required"},"403":{"description":"Demo pass (forbidden), or a tier limit (limit_reached)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such webhook for this key's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Webhooks not enabled on this server (source_unavailable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/webhooks/{id}/enable":{"post":{"tags":["Webhooks"],"summary":"Turn a disabled webhook on again: a new verification challenge first","operationId":"enableWebhook","parameters":[{"name":"id","in":"path","required":true,"description":"Webhook id","schema":{"type":"string","pattern":"^wh_[A-Za-z0-9_-]{16}$"},"example":"wh_3fJ9xQ2mV8kLp0aZ"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Webhook"}}}},"401":{"description":"Missing or unknown key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required"},"403":{"description":"Demo pass (forbidden), or a tier limit (limit_reached)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such webhook for this key's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Already active (invalid_state)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Webhooks not enabled on this server (source_unavailable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/webhooks/{id}/rotate-secret":{"post":{"tags":["Webhooks"],"summary":"A new secret; the previous one keeps signing (a second signature) for 24 h","operationId":"rotateWebhookSecret","parameters":[{"name":"id","in":"path","required":true,"description":"Webhook id","schema":{"type":"string","pattern":"^wh_[A-Za-z0-9_-]{16}$"},"example":"wh_3fJ9xQ2mV8kLp0aZ"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"secret":{"type":"string","description":"The new whsec_ secret, shown once"},"previousValidUntil":{"type":["integer","null"],"description":"The previous secret signs until (Unix ms)"}}}}}},"401":{"description":"Missing or unknown key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"402":{"description":"Payment Required"},"403":{"description":"Demo pass (forbidden), or a tier limit (limit_reached)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No such webhook for this key's account","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Webhooks not enabled on this server (source_unavailable)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/tokens/{address}/security":{"get":{"tags":["Tokens & prices"],"summary":"Token security: honeypot simulation, taxes, owner powers, holders and LP, with a verdict","operationId":"getTokenSecurity","description":"An ERC-20 of HyperEVM or Elysium, checked on our own node at its head. Simulation: in one eth_call with state overrides (a synthetic account funded with the quote token; nothing is signed or sent), a buy through the token's most liquid pool (V2 / Solidly, V3 / Algebra / CL forks, Uniswap V4, PancakeSwap Infinity), a transfer of a tenth to a fresh address, a sell of the rest; taxes are read on both sides of each token transfer; when a leg fails the next pools are tried (`simulation.tried`). Static: selectors of the code (and of the implementation behind an EIP-1967 / beacon / UUPS proxy, EIP-1167 clone): owner and renounced, mint, pause, blacklist, exemption lists, max tx / wallet, cooldown, trading switch, tax setters, balance setters, ownership reclaim (lock / unlock), AccessControl, SELFDESTRUCT, DELEGATECALL; spam flag of the indexer. Holders: top 10 share of the circulating supply and what EOAs among them hold of the total supply, creator / owner share, liquidity USD of the main pools, LP tokens of the main V2 pool burned / held (an EOA or the creator holding most = can be pulled). Verdict: honeypot (cannot sell, sell tax ≥ 90 %, transfers blocked), danger (any danger check), caution (any warn), ok; `reasons` = the warn / danger messages. Cached 60 s per token (`cached`, `ageMs`); a new report counts against 20 a minute per key (429 + Retry-After past it). Heavy call. Not detected: owner actions after the check (blacklisting a buyer later, raising a tax), conditions on time / block / amount the simulation does not hit, anti-bot checks on contract callers, router-only hooks, unverified source review.","parameters":[{"name":"address","in":"path","required":true,"description":"Token address","schema":{"type":"string"},"example":"0x5555555555555555555555555555555555555555"},{"name":"layer","in":"query","required":false,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"],"default":"hyperevm"},"example":"hyperevm"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string"},"chainId":{"type":"integer"},"token":{"type":"string"},"symbol":{"type":["string","null"],"description":"ERC-20 symbol"},"name":{"type":["string","null"],"description":"ERC-20 name"},"decimals":{"type":"integer"},"totalSupply":{"type":"string","description":"Token units (exact decimal string)"},"verdict":{"type":"string","enum":["ok","caution","danger","honeypot"]},"reasons":{"type":"array","items":{"type":"string"},"description":"warn / danger findings, strongest first (at most 8)"},"simulation":{"oneOf":[{"type":"object","description":"The best simulated pool (a sell that succeeded first)","properties":{"pool":{"type":"object","description":"Pool simulated","properties":{"id":{"type":"string"},"protocol":{"type":"string"},"kind":{"type":"string","enum":["v2","v3","v4","infinity"]},"quote":{"type":"string"},"quoteSymbol":{"type":["string","null"],"description":"Quote symbol"},"liquidityUsd":{"type":["number","null"],"description":"Pool liquidity, USD (V4 / Infinity: the active range)"}}},"amountIn":{"type":"object","description":"Quote spent on the simulated buy (about $25, at most 1 % of the pool's quote side)","properties":{"raw":{"type":"string"},"amount":{"type":"string"},"usd":{"type":["number","null"],"description":"USD value"}}},"canBuy":{"type":"boolean"},"canSell":{"type":["boolean","null"],"description":"null when the buy failed"},"canTransfer":{"type":["boolean","null"],"description":"A tenth of the bought tokens sent to a fresh address"},"buyTax":{"type":["number","null"],"description":"0–1: 1 − received / what left the pool"},"sellTax":{"type":["number","null"],"description":"0–1: 1 − what reached the pool / sent"},"transferTax":{"type":["number","null"],"description":"0–1 on a wallet-to-wallet transfer"},"buyGas":{"type":["number","null"],"description":"Gas of the buy (swap + balance reads)"},"sellGas":{"type":["number","null"],"description":"Gas of the sell"},"transferGas":{"type":["number","null"],"description":"Gas of the transfer"},"revert":{"type":"object","description":"Decoded revert reason of each failed leg","properties":{"buy":{"type":"string"},"transfer":{"type":"string"},"sell":{"type":"string"}}},"tried":{"type":"array","items":{"type":"object","properties":{"pool":{"type":"object","description":"Pool simulated","properties":{"id":{"type":"string"},"protocol":{"type":"string"},"kind":{"type":"string","enum":["v2","v3","v4","infinity"]},"quote":{"type":"string"},"quoteSymbol":{"type":["string","null"],"description":"Quote symbol"},"liquidityUsd":{"type":["number","null"],"description":"Pool liquidity, USD (V4 / Infinity: the active range)"}}},"amountIn":{"type":"object","description":"Quote spent on the simulated buy (about $25, at most 1 % of the pool's quote side)","properties":{"raw":{"type":"string"},"amount":{"type":"string"},"usd":{"type":["number","null"],"description":"USD value"}}},"canBuy":{"type":"boolean"},"canSell":{"type":["boolean","null"],"description":"null when the buy failed"},"canTransfer":{"type":["boolean","null"],"description":"A tenth of the bought tokens sent to a fresh address"},"buyTax":{"type":["number","null"],"description":"0–1: 1 − received / what left the pool"},"sellTax":{"type":["number","null"],"description":"0–1: 1 − what reached the pool / sent"},"transferTax":{"type":["number","null"],"description":"0–1 on a wallet-to-wallet transfer"},"buyGas":{"type":["number","null"],"description":"Gas of the buy (swap + balance reads)"},"sellGas":{"type":["number","null"],"description":"Gas of the sell"},"transferGas":{"type":["number","null"],"description":"Gas of the transfer"},"revert":{"type":"object","description":"Decoded revert reason of each failed leg","properties":{"buy":{"type":"string"},"transfer":{"type":"string"},"sell":{"type":"string"}}}}},"description":"Every pool simulated, best first"}}},{"type":"object","description":"Not simulated, and why","properties":{"unavailable":{"type":"string"}}}]},"checks":{"type":"array","description":"One per finding. id: can_buy, can_sell, can_transfer, buy_tax, sell_tax, transfer_tax, simulation, owner, ownership_reclaim, access_control, mintable, pausable, blacklist, whitelist, max_tx, max_wallet, trading_cooldown, trading_toggle, tax_modifiable, balance_modifiable, proxy, selfdestruct, external_call, verified_source, spam, top10_share, holders, creator_share, owner_share, liquidity_usd, lp_locked","items":{"type":"object","properties":{"id":{"type":"string"},"severity":{"type":"string","enum":["info","warn","danger"]},"value":{"description":"The fact checked (number, boolean, address, object, matched signatures)"},"message":{"type":"string"}}}},"holders":{"type":"object","properties":{"top10Share":{"type":["number","null"],"description":"Of the circulating supply (system addresses out)"},"top10EoaShare":{"type":["number","null"],"description":"EOAs among the top 10, of the total supply"},"totalHolders":{"type":["number","null"],"description":"Holders, system addresses out"},"creator":{"type":["string","null"],"description":"Creator"},"creatorShare":{"type":["number","null"],"description":"Of the total supply"},"ownerShare":{"type":["number","null"],"description":"Of the total supply"}}},"liquidity":{"type":"object","properties":{"usd":{"type":["number","null"],"description":"Main pools, USD (priced sides)"},"pools":{"type":"integer"},"mainPool":{"type":["string","null"],"description":"Most liquid pool"}}},"height":{"type":"integer","description":"Block the checks ran at"},"asOf":{"type":"integer","description":"Unix ms of the report"},"computeMs":{"type":"integer"},"cached":{"type":"boolean"},"ageMs":{"type":"integer"}}}}}},"400":{"description":"Invalid parameter (code invalid_param, `param` names it) or malformed request (invalid_request)","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 contract, or not an ERC-20","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited): wait Retry-After seconds","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error): quote request_id to support if it persists","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (database or table missing, no snapshot yet): code source_unavailable, not_ready, syncing or server_busy; {error, unavailable}","headers":{"Retry-After":{"description":"Seconds to wait before retrying","schema":{"type":"integer"}}},"content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/prices":{"get":{"tags":["Tokens & prices"],"summary":"Current USD prices of up to 100 tokens, with their source","operationId":"getPrices","description":"One call for a batch, in the order asked; an unknown token answers priceUsd null with a reason. Source of each price: `hl_mid` = HyperCore HYPE/USDC spot mid (HYPE, the native token and WHYPE; `hl_oracle` when the mid is older than 10 min), `hl_spot` = last trade of the token's USDC spot market on HyperCore (HyperCore tokens, and HyperEVM tokens linked to one by the token registry), `hl_perp` = last trade of a HyperCore perp, `unit` = USDC (the unit HyperCore prices in), `pool` = the last swap of the token's reference pool on HyperEVM / Elysium, cited by block + tx + logIndex. The reference pool of a token: among its active pools whose USD price is known (pools of a spam token left out, unless the token itself is spam), the one with the largest liquidityUsd of at least $1,000 (twice the smaller side of what the pool contract holds at the indexed head, valued at USD prices: HyperCore for HYPE, WHYPE and the Core-linked tokens); when none reaches it, the most 24 h USD volume, then the most trades, then the oldest pool. Uniswap V4 / PancakeSwap Infinity / Balancer pools keep their tokens in a shared vault: their liquidity is not measured (null), they rank by volume. Cached 1 s per token.","parameters":[{"name":"layer","in":"query","required":false,"description":"Layer: hyperevm / elysium (0x token addresses) or hypercore (token names HYPE, PURR, token ids, perp coins BTC). Absent: hypercore when every token is a name, else hyperevm","schema":{"type":"string","enum":["hyperevm","elysium","hypercore"]},"example":"hyperevm"},{"name":"tokens","in":"query","required":true,"description":"Comma list, at most 100: 0x addresses (hyperevm, elysium) or HyperCore token names / ids / perp coins (hypercore)","schema":{"type":"string"},"example":"0x5555555555555555555555555555555555555555,0xb88339cb7199b77e23db6e890353e22632ba630f"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"prices":{"type":"array","items":{"$ref":"#/components/schemas/PricePoint"}},"asOf":{"type":["integer","null"],"description":"Time of `height`: the layer head the answer is cut at (EVM: indexed head; HyperCore: ingested head) (Unix ms)"},"height":{"type":["integer","null"],"description":"Head block of the layer the answer is cut at"},"testnet":{"type":"boolean","description":"Elysium testnet: USD values from testnet pools, nominal"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":["integer","null"],"description":"Indexed head time while the layer syncs (Unix ms)"}},"required":["layer","prices"]}}}},"400":{"description":"Invalid parameter (code invalid_param)","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"},"429":{"description":"Over the key's rps / burst (code rate_limited)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (code source_unavailable, not_ready, syncing or server_busy)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/prices/history":{"get":{"tags":["Tokens & prices"],"summary":"USD prices at a time, or USD price series (batch)","operationId":"getPriceHistory","description":"Two forms. `at`: the price of up to 100 tokens at that time, i.e. the last observation at or before it (HYPE: the HL mid recorded then, else the last HyperCore trade; pools: the last swap at or before it of the best-ranked pool that had one). `from` / `to` / `interval`: the USD close of each unit for up to 25 tokens, at most 1000 units each, gap-filled with the previous close (pools: the reference pool's candles; HyperCore and Core-linked tokens: their HyperCore market). The reference pool is today's (rule below). Windows over 30 days are billed as heavy calls. Source of each price: `hl_mid` = HyperCore HYPE/USDC spot mid (HYPE, the native token and WHYPE; `hl_oracle` when the mid is older than 10 min), `hl_spot` = last trade of the token's USDC spot market on HyperCore (HyperCore tokens, and HyperEVM tokens linked to one by the token registry), `hl_perp` = last trade of a HyperCore perp, `unit` = USDC (the unit HyperCore prices in), `pool` = the last swap of the token's reference pool on HyperEVM / Elysium, cited by block + tx + logIndex. The reference pool of a token: among its active pools whose USD price is known (pools of a spam token left out, unless the token itself is spam), the one with the largest liquidityUsd of at least $1,000 (twice the smaller side of what the pool contract holds at the indexed head, valued at USD prices: HyperCore for HYPE, WHYPE and the Core-linked tokens); when none reaches it, the most 24 h USD volume, then the most trades, then the oldest pool. Uniswap V4 / PancakeSwap Infinity / Balancer pools keep their tokens in a shared vault: their liquidity is not measured (null), they rank by volume.","parameters":[{"name":"layer","in":"query","required":false,"description":"Layer: hyperevm / elysium (0x token addresses) or hypercore (token names HYPE, PURR, token ids, perp coins BTC). Absent: hypercore when every token is a name, else hyperevm","schema":{"type":"string","enum":["hyperevm","elysium","hypercore"]},"example":"hyperevm"},{"name":"tokens","in":"query","required":true,"description":"Comma list, at most 100: 0x addresses (hyperevm, elysium) or HyperCore token names / ids / perp coins (hypercore)","schema":{"type":"string"},"example":"0x5555555555555555555555555555555555555555,0xb88339cb7199b77e23db6e890353e22632ba630f"},{"name":"at","in":"query","required":false,"description":"Time (Unix ms): price at or before it","schema":{"type":"integer"},"example":1792431260000},{"name":"from","in":"query","required":false,"description":"Series start (Unix ms, inclusive, aligned down to the unit)","schema":{"type":"integer"}},{"name":"to","in":"query","required":false,"description":"Series end (Unix ms, exclusive; default now)","schema":{"type":"integer"}},{"name":"interval","in":"query","required":false,"description":"Series unit","schema":{"type":"string","enum":["1m","5m","15m","1h","4h","1d"]}},{"name":"limit","in":"query","required":false,"description":"Units per token at most","schema":{"type":"integer","minimum":1,"maximum":1000,"default":1000}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"oneOf":[{"type":"object","description":"`at` form","properties":{"layer":{"type":"string","description":"Layer"},"at":{"type":"integer","description":"The time asked (Unix ms)","example":1792690430852},"prices":{"type":"array","items":{"$ref":"#/components/schemas/PricePoint"}},"asOf":{"type":["integer","null"],"description":"Time of `height`: the layer head the answer is cut at (EVM: indexed head; HyperCore: ingested head) (Unix ms)"},"height":{"type":["integer","null"],"description":"Head block of the layer the answer is cut at"},"testnet":{"type":"boolean","description":"Elysium testnet: USD values from testnet pools, nominal"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":["integer","null"],"description":"Indexed head time while the layer syncs (Unix ms)"}},"required":["layer","at","prices"]},{"type":"object","description":"Series form","properties":{"layer":{"type":"string","description":"Layer"},"interval":{"type":"string","description":"Unit"},"from":{"type":"integer","description":"First unit (Unix ms)","example":1792690430852},"to":{"type":"integer","description":"End (exclusive) (Unix ms)","example":1792690430852},"series":{"type":"array","items":{"$ref":"#/components/schemas/PriceSeries"}},"asOf":{"type":["integer","null"],"description":"Time of `height`: the layer head the answer is cut at (EVM: indexed head; HyperCore: ingested head) (Unix ms)"},"height":{"type":["integer","null"],"description":"Head block of the layer the answer is cut at"},"testnet":{"type":"boolean","description":"Elysium testnet: USD values from testnet pools, nominal"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":["integer","null"],"description":"Indexed head time while the layer syncs (Unix ms)"}},"required":["layer","interval","from","to","series"]}]}}}},"400":{"description":"Invalid parameter (code invalid_param)","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"},"429":{"description":"Over the key's rps / burst (code rate_limited)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (code source_unavailable, not_ready, syncing or server_busy)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/tokens":{"get":{"tags":["Tokens & prices"],"summary":"Metadata of up to 100 tokens (also POST)","operationId":"getTokens","description":"Symbol, name, decimals, total supply, creator and creation, logo / description / socials when the indexer has them (launchpad metadata), token family, cross-layer links, spam flag. Unknown addresses are listed in `missing`. hypercore: the token registry's view of HyperCore tokens (as /coins/hypercore/{id}). Same answer as POST /tokens with a JSON body.","parameters":[{"name":"layer","in":"query","required":false,"description":"Layer: hyperevm / elysium (0x token addresses) or hypercore (token names HYPE, PURR, token ids, perp coins BTC). Absent: hypercore when every token is a name, else hyperevm","schema":{"type":"string","enum":["hyperevm","elysium","hypercore"]},"example":"hyperevm"},{"name":"addresses","in":"query","required":true,"description":"Comma list of at most 100 token addresses (hypercore: names / ids)","schema":{"type":"string"},"example":"0x5555555555555555555555555555555555555555,0xb88339cb7199b77e23db6e890353e22632ba630f"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"tokens":{"type":"array","items":{"$ref":"#/components/schemas/TokenMeta"},"description":"In the order asked"},"missing":{"type":"array","items":{"type":"string"},"description":"Asked, not found"},"asOf":{"type":["integer","null"],"description":"Time of `height`: the layer head the answer is cut at (EVM: indexed head; HyperCore: ingested head) (Unix ms)"},"height":{"type":["integer","null"],"description":"Head block of the layer the answer is cut at"},"testnet":{"type":"boolean","description":"Elysium testnet: USD values from testnet pools, nominal"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":["integer","null"],"description":"Indexed head time while the layer syncs (Unix ms)"}},"required":["layer","tokens","missing"]}}}},"400":{"description":"Invalid parameter (code invalid_param)","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"},"429":{"description":"Over the key's rps / burst (code rate_limited)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (code source_unavailable, not_ready, syncing or server_busy)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}},"post":{"tags":["Tokens & prices"],"summary":"Metadata of up to 100 tokens, addresses in a JSON body","operationId":"postTokens","description":"The batch form of GET /tokens: same answer.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","enum":["hyperevm","elysium","hypercore"],"description":"Absent: hypercore when every entry is a name, else hyperevm"},"addresses":{"type":"array","items":{"type":"string"},"description":"At most 100"}},"required":["addresses"]},"example":{"layer":"hyperevm","addresses":["0x5555555555555555555555555555555555555555","0xb88339cb7199b77e23db6e890353e22632ba630f"]}}}},"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"layer":{"type":"string","description":"Layer"},"tokens":{"type":"array","items":{"$ref":"#/components/schemas/TokenMeta"}},"missing":{"type":"array","items":{"type":"string"}},"asOf":{"type":["integer","null"],"description":"Time of `height`: the layer head the answer is cut at (EVM: indexed head; HyperCore: ingested head) (Unix ms)"},"height":{"type":["integer","null"],"description":"Head block of the layer the answer is cut at"},"testnet":{"type":"boolean","description":"Elysium testnet: USD values from testnet pools, nominal"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":["integer","null"],"description":"Indexed head time while the layer syncs (Unix ms)"}},"required":["layer","tokens","missing"]}}}},"400":{"description":"Invalid parameter (code invalid_param)","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"},"429":{"description":"Over the key's rps / burst (code rate_limited)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (code source_unavailable, not_ready, syncing or server_busy)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}},"/api/tokens/{address}":{"get":{"tags":["Tokens & prices"],"summary":"Token overview across all its pools: price, market cap, FDV, liquidity, windows, holders, top pools","operationId":"getTokenOverview","description":"DexScreener / Birdeye style: the token's metadata, its USD price (as /prices), FDV and market cap, liquidity over its pools, volume / trades / buys / sells / price change over 5m, 1h, 6h, 24h, holders, its pools (count, the 5 best, the reference one), creator and creation. HyperEVM and Elysium. Cached 10 s. The reference pool of a token: among its active pools whose USD price is known (pools of a spam token left out, unless the token itself is spam), the one with the largest liquidityUsd of at least $1,000 (twice the smaller side of what the pool contract holds at the indexed head, valued at USD prices: HyperCore for HYPE, WHYPE and the Core-linked tokens); when none reaches it, the most 24 h USD volume, then the most trades, then the oldest pool. Uniswap V4 / PancakeSwap Infinity / Balancer pools keep their tokens in a shared vault: their liquidity is not measured (null), they rank by volume.","parameters":[{"name":"address","in":"path","required":true,"description":"Token address","schema":{"type":"string"},"example":"0x5555555555555555555555555555555555555555"},{"name":"layer","in":"query","required":false,"description":"EVM layer","schema":{"type":"string","enum":["hyperevm","elysium"],"default":"hyperevm"},"example":"hyperevm"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TokenOverview"}}}},"400":{"description":"Invalid parameter (code invalid_param)","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"},"404":{"description":"Unknown token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Over the key's rps / burst (code rate_limited)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"502":{"description":"Upstream database error (code upstream_error)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"Source not available (code source_unavailable, not_ready, syncing or server_busy)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Unavailable"}}}}},"x-payment-info":{"price":{"mode":"dynamic","currency":"USD","min":"0.010000","max":"20.000000"},"protocols":[{"x402":{}}]}}}},"webhooks":{"delivery":{"post":{"summary":"A delivery to your webhook URL","description":"Outgoing webhooks: we POST the events of your subscriptions to your HTTPS URL. Channels and filters are the WebSocket's (bridge.transfers, elysium.bridge, wallet, hc.liquidations, hc.positions, elysium.launches, hyperevm.launches); `wallet` takes up to 100 addresses per subscription, `hc.positions` a min_notional of at least 10000. A delivery carries the events of one subscription from one source block (batch \"block\", at most 100 events or 256 KiB) or one event (batch \"none\"). Signed per the Standard Webhooks spec: headers webhook-id (stable across retries: dedupe on it), webhook-timestamp, webhook-signature (v1,<base64 HMAC-SHA256 of id.timestamp.body with the base64 part of your whsec_ secret>; two signatures during a secret rotation's 24 h overlap). At least once: answer 2xx within 10 s; anything else (3xx included, redirects are not followed) is retried after 5 s, 5 min, 30 min, 2 h, 5 h, 10 h (7 attempts, Retry-After of a 429 / 503 honoured), then the delivery is dead (kept 7 days, replayable). 410 Gone, or 50 failures in a row over more than 24 h, disables the webhook: its GET says so and every API answer of your key carries X-Femtos-Notice. A new or re-enabled webhook first gets a webhook.verification POST: answer it {\"challenge\": \"<data.challenge>\"}; nothing else is sent before. Per subscription, `seq` numbers the deliveries; after a restart of our stream a `gap` delivery {from, to, channels} names the window to re-read from the REST API. Limits per tier (endpoints / subscriptions / deliveries a day): free 2 / 5 / 10,000, builder 10 / 50 / 500,000, pro 50 / 500 / 5,000,000, scale 200 / 5000 / unlimited. Targets: https on port 443 or 8443, public addresses only.","parameters":[{"name":"webhook-id","in":"header","required":true,"schema":{"type":"string"},"description":"msg_…: the same on every retry of this delivery"},{"name":"webhook-timestamp","in":"header","required":true,"schema":{"type":"string"},"description":"Unix seconds of this attempt: refuse if more than 5 min off your clock"},{"name":"webhook-signature","in":"header","required":true,"schema":{"type":"string"},"description":"v1,<base64 HMAC-SHA256(secret bytes, `${webhook-id}.${webhook-timestamp}.${body}`)>, space-separated during a rotation"}],"requestBody":{"required":true,"content":{"application/json":{"schema":{"$ref":"#/components/schemas/WebhookPayload"}}}},"responses":{"200":{"description":"Any 2xx within 10 s: delivered. webhook.verification: answer {\"challenge\": \"<data.challenge>\"}"},"410":{"description":"Gone: the webhook is disabled at once"}}}}},"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Your API key"}},"parameters":{"cursor":{"name":"cursor","in":"query","required":false,"description":"Next page: the `next_cursor` of the previous answer (or the `cursor` of its Link rel=\"next\" URL), unchanged. Opaque; `limit` keeps its meaning. A malformed cursor, or one given with `before` / `offset` / `after`, answers 400.","schema":{"type":"string","pattern":"^[A-Za-z0-9_-]{2,160}$"}}},"headers":{"Link":{"description":"Present when there is a next page: `<URL of the next page>; rel=\"next\"` (the same request with `cursor`). A request using a deprecated form also gets `<https://femtos.xyz/changelog#pagination>; rel=\"deprecation\"`, with `Deprecation: true` and `Sunset: Sun, 31 Jan 2027 00:00:00 GMT`.","schema":{"type":"string"}}},"schemas":{"EntityRef":{"type":"object","description":"A named wallet: who public lists attribute it to (`sources` on /api/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 (/api/wallet/0x…) and see whether it is named.","properties":{"id":{"type":"string","description":"Entity id (/api/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 /api/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":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. REST: this row as `before` (HyperCore <time>:<block>:<event>, EVM <block>:<logIndex>)","deprecated":true},"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 the x402 reason of a refused payment"},"code":{"type":"string","enum":["payment_required","payment_refused","payment_failed"],"description":"Error code (https://femtos.xyz/errors)"},"message":{"type":"string","description":"What to do"},"docs_url":{"type":"string","description":"https://femtos.xyz/errors#<code>"},"request_id":{"type":"string","description":"The X-Request-Id of this answer"},"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","code","message","docs_url","request_id","reason","checkoutUrl","freeKeyUrl","x402Version","accepts","x402Networks","packsUsd","packParam","networksUrl"]},"Error":{"type":"object","description":"Error body; every code at https://femtos.xyz/errors","properties":{"error":{"type":"string","description":"The error as it always read (clients match on it: unauthorized, rate limit exceeded…); a newer error: its code"},"code":{"type":"string","enum":["invalid_request","invalid_param","invalid_payment","unauthorized","invalid_ticket","demo_pass_expired","payment_required","payment_refused","payment_failed","forbidden","account_frozen","demo_pass_refused","limit_reached","not_found","route_not_found","invalid_state","payload_too_large","rate_limited","too_many_connections","replay_window_too_large","replay_limit","too_many_subscriptions","demo_pass_exhausted","internal_error","upstream_error","source_unavailable","replay_unavailable","syncing","not_ready","server_busy","payment_unavailable","payment_pending"],"description":"Stable error code: what it means and what to do at docs_url"},"message":{"type":"string","description":"What went wrong, for a human or an agent"},"docs_url":{"type":"string","description":"https://femtos.xyz/errors#<code>","example":"https://femtos.xyz/errors#invalid_param"},"request_id":{"type":"string","description":"The X-Request-Id of this answer: quote it to support"},"param":{"type":"string","description":"invalid_param: the parameter at fault, when known"},"retryAfter":{"type":"integer","description":"429 / 503: seconds to wait (also the Retry-After header)"},"reqId":{"type":"string","description":"5xx without a message of ours: same as request_id (older name)"}},"required":["error","code","message","docs_url","request_id"]},"Unavailable":{"allOf":[{"$ref":"#/components/schemas/Error"},{"type":"object","properties":{"unavailable":{"type":"string","description":"Same text as error"},"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":["unavailable"]}],"description":"HTTP 503: the source of the layer cannot answer"},"StopOrder":{"type":"object","description":"One HyperCore trigger order (stop-loss / take-profit), or one status event of one. Named wallets carry `entity`.","properties":{"oid":{"type":"integer","description":"Order id","example":582711500696},"user":{"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"},"coin":{"type":"string","description":"HyperCore coin","example":"BTC"},"side":{"type":"string","enum":["sell","buy"],"description":"sell closes longs, buy closes shorts"},"kind":{"type":["string","null"],"enum":["stop","take_profit",null],"description":"From orderType"},"exec":{"type":["string","null"],"enum":["market","limit",null],"description":"From orderType"},"orderType":{"type":"string","enum":["Stop Market","Stop Limit","Take Profit Market","Take Profit Limit"],"description":"Hyperliquid's order type"},"triggerPx":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Trigger price (0 on the order a trigger placed) (exact decimal string)","example":"81700"},"triggerCondition":{"type":"string","description":"Hyperliquid's text: `Price above X` / `Price below X`; `Triggered` on the order a trigger placed","example":"Price above 81700"},"limitPx":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Limit price (market orders: the slippage bound Hyperliquid sets) (exact decimal string)","example":"89870"},"sz":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Size left; 0 with wholePosition: the whole position (exact decimal string)"},"origSz":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Size placed (exact decimal string)"},"wholePosition":{"type":"boolean","description":"A position TP/SL placed with size 0: closes the whole position when it fires"},"positionTpsl":{"type":"boolean","description":"Attached to the position (Hyperliquid positionTpsl)"},"reduceOnly":{"type":"boolean"},"tif":{"type":["string","null"],"description":"Time in force of the order a trigger placed; null on trigger orders"},"cloid":{"type":["string","null"],"description":"Client order id, 0x + 32 hex"},"placedAt":{"type":"integer","description":"Placement time (Unix ms)","example":1792236158000},"status":{"type":"string","description":"open, triggered, canceled, reduceOnlyCanceled, siblingFilledCanceled, …Rejected; on the order a trigger placed: filled, canceled…","example":"open"},"statusTime":{"type":"integer","description":"Time of this status (Unix ms)","example":1792236158000},"triggered":{"type":"boolean","description":"The order a trigger placed (same oid, triggerCondition `Triggered`), not the trigger order itself"},"block":{"type":"integer","description":"Provenance: HyperCore block of this status","example":1193303772},"eventIdx":{"type":"integer","description":"Provenance: its event index in the block","example":2442},"entity":{"$ref":"#/components/schemas/EntityRef"}},"required":["oid","user","coin","side","kind","exec","orderType","triggerPx","triggerCondition","limitPx","sz","origSz","wholePosition","positionTpsl","reduceOnly","tif","cloid","placedAt","status","statusTime","triggered","block","eventIdx"]},"StopCell":{"type":"object","description":"Open trigger orders of one kind × side × execution","properties":{"count":{"type":"integer","description":"Orders with a size"},"sz":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ size (exact decimal string)"},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ size × trigger price, quote units (USDC on the main dex), 2 decimals (exact decimal string)"},"whole":{"type":"object","description":"Position TP/SL placed with size 0 (close the whole position): counted apart, sized from the positions snapshot","properties":{"count":{"type":"integer","description":"Whole-position TP/SL (size 0)"},"sized":{"type":"integer","description":"Of them, those whose position the latest positions snapshot holds"},"sz":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ |position| of the sized ones (exact decimal string)"},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ |position| × trigger price (exact decimal string)"}},"required":["count","sized","sz","notional"]}},"required":["count","sz","notional","whole"]},"StopSides":{"type":"object","properties":{"sell":{"type":"object","description":"Sell orders: close longs","properties":{"market":{"$ref":"#/components/schemas/StopCell"},"limit":{"$ref":"#/components/schemas/StopCell"}},"required":["market","limit"]},"buy":{"type":"object","description":"Buy orders: close shorts","properties":{"market":{"$ref":"#/components/schemas/StopCell"},"limit":{"$ref":"#/components/schemas/StopCell"}},"required":["market","limit"]}},"required":["sell","buy"]},"StopGroup":{"type":"object","properties":{"count":{"type":"integer","description":"Every order (with a size and whole-position)"},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ notional, whole-position orders sized from the snapshot included (exact decimal string)"},"stop":{"$ref":"#/components/schemas/StopSides"},"takeProfit":{"$ref":"#/components/schemas/StopSides"}},"required":["count","notional","stop","takeProfit"]},"Liq":{"type":"object","description":"Open perp positions with a liquidation price","properties":{"count":{"type":"integer","description":"Positions"},"sz":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ |size| (exact decimal string)"},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ |size| × liquidation price, quote units, 2 decimals (exact decimal string)"}},"required":["count","sz","notional"]},"LiqSides":{"type":"object","description":"long: liquidated by a forced sell as price falls to it; short: by a forced buy as price rises to it","properties":{"long":{"$ref":"#/components/schemas/Liq"},"short":{"$ref":"#/components/schemas/Liq"}},"required":["long","short"]},"LiqCoverage":{"type":"object","description":"How much of the open interest the map holds: every account's positions at the snapshot, each liquidation price from Hyperliquid's formula on the account state; none for portfolio-margin cross accounts and positions that cannot be liquidated","properties":{"positions":{"type":"integer","description":"Open positions of the coin in the snapshot"},"withLiqPx":{"type":"integer","description":"Of them, with a liquidation price"},"sz":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ |size| of every open position (exact decimal string)"},"szWithLiqPx":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ |size| of those with a liquidation price (exact decimal string)"},"share":{"type":["number","null"],"description":"szWithLiqPx / sz (0–1)"},"note":{"type":"string","description":"What is covered"}},"required":["positions","withLiqPx","sz","szWithLiqPx","share","note"]},"Flow":{"type":"object","properties":{"count":{"type":"integer","description":"Orders / positions"},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Notional, quote units, 2 decimals (exact decimal string)"}},"required":["count","notional"]},"StopBucket":{"type":"object","description":"Open trigger orders whose trigger price is in [pxLo, pxHi)","properties":{"pxLo":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Bucket low edge (inclusive) (exact decimal string)","example":"97000"},"pxHi":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Bucket high edge (exclusive) (exact decimal string)","example":"97500"},"count":{"type":"integer","description":"Every order in the bucket"},"notional":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Σ notional (exact decimal string)"},"stop":{"$ref":"#/components/schemas/StopSides"},"takeProfit":{"$ref":"#/components/schemas/StopSides"}},"required":["pxLo","pxHi","count","notional","stop","takeProfit"]},"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 /api/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"]},"PoolRef":{"type":"object","description":"A pool a price or candle comes from (reference pool rule: `rule` where given)","properties":{"id":{"type":"string","description":"Pool key (the market of /candles, /trades)","example":"0xbe512f5881b85c48d9c17bc5bb2be047d156d696"},"protocol":{"type":"string","description":"DEX protocol","example":"nest_algebra"},"symbol":{"type":"string","description":"Pool symbol","example":"USDC/WHYPE"},"pairedWith":{"type":["string","null"],"description":"The other token of the pool"},"liquidityUsd":{"type":["string","null"],"description":"Twice the smaller side the pool contract holds, in USD; null: not measured (vault pools) (exact decimal string, null when unknown)"},"volume24hUsd":{"type":["string","null"],"description":"Rolling 24 h USD volume (exact decimal string, null when unknown)"},"basis":{"type":"string","enum":["liquidity","volume24h"],"description":"Why it is the reference: liquidity (≥ $1,000) or 24 h volume (no pool reaches it)"}},"required":["id","protocol","symbol","pairedWith","liquidityUsd","volume24hUsd","basis"]},"TokenNew":{"type":"object","description":"A new token (GET /api/tokens/new, WS <layer>.tokens.new). Market fields are null until it has a pool. Provenance: block + tx + logIndex of its first event.","properties":{"seq":{"type":"integer","description":"Position in the feed (the indexer's serial id, growing with indexing order); the page cursor is the seq of its last row"},"address":{"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","example":18},"totalSupply":{"type":["string","null"],"description":"Total supply (token units) (exact decimal string, null when unknown)"},"createdAt":{"type":"integer","description":"Block time of the first event the indexer saw for this token (its deploy block for a token minting in its constructor) (Unix ms)","example":1792236158000},"block":{"type":"integer","description":"That block"},"tx":{"type":["string","null"],"description":"Transaction of that first event"},"logIndex":{"type":["integer","null"],"description":"Its log index"},"creationBasis":{"type":"string","enum":["contract_creation","first_event"],"description":"contract_creation: `tx` deployed the token itself (receipt contractAddress); first_event: a factory created it in `tx`, or it was first seen there"},"creator":{"type":["string","null"],"description":"Creator: the launchpad's when a launch event names one, else the sender of `tx`"},"deployedVia":{"type":["string","null"],"description":"Contract `tx` called when it did not deploy the token itself (a factory, launchpad or router)"},"launchpad":{"type":["object","null"],"description":"Launchpad of the token: from its launch event (Ascend `launches`, LiquidLaunch curves) or from the contract its creation tx called being a known launchpad; null = direct deploy or unknown","properties":{"name":{"type":"string","description":"ascend, liquidlaunch…"},"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Launchpad contract","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"basis":{"type":"string","enum":["launch_event","creation_tx"]}}},"pools":{"type":"integer","description":"Pools of the token (any DEX)"},"firstPool":{"oneOf":[{"$ref":"#/components/schemas/PoolRef"},{"type":"null"}],"description":"Its oldest pool; null before any"},"priceUsd":{"type":["string","null"],"description":"USD price (null without a pool) (exact decimal string, null when unknown)"},"mcapUsd":{"type":["string","null"],"description":"Market cap: supply × price, else the most traded pool's (exact decimal string, null when unknown)"},"liquidityUsd":{"type":["string","null"],"description":"USD value of its oldest pools' token balances (V2 / V3; priced sides only; V4 / Infinity pools hold none of their own) (exact decimal string, null when unknown)"},"volume24hUsd":{"type":["string","null"],"description":"24 h USD volume over its pools (exact decimal string, null when unknown)"},"trades24h":{"type":["integer","null"],"description":"Swaps in 24 h over its pools"},"holders":{"type":["integer","null"],"description":"Wallets holding it, system addresses (its pools, bridges, launchpads, zero / dead) left out; counted up to 1000"},"spam":{"type":"boolean","description":"Flagged spam by the indexer (tokens.spam). GET /api/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":["seq","address","symbol","name","decimals","totalSupply","createdAt","block","tx","logIndex","creationBasis","creator","deployedVia","launchpad","pools","firstPool","priceUsd","mcapUsd","liquidityUsd","volume24hUsd","trades24h","holders","spam","spamReason"]},"PoolToken":{"type":"object","description":"One side of a pool","properties":{"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Token (0x000…0 = native HYPE in V4 pools)","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"symbol":{"type":["string","null"]},"decimals":{"type":["integer","null"]},"createdAt":{"type":["integer","null"],"description":"Its first indexed event (Unix ms)"},"isNew":{"type":"boolean","description":"Created at most newWithinMin minutes (default 60) before the pool"},"spam":{"type":"boolean","description":"Flagged spam by the indexer (tokens.spam). GET /api/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":["address","symbol","decimals","createdAt","isNew","spam","spamReason"]},"PoolNew":{"type":"object","description":"A new pool (GET /api/pools/new, WS <layer>.pools.new); spam = either side is a spam token","properties":{"seq":{"type":"integer","description":"Position in the feed (the indexer's serial id of the pool)"},"address":{"type":"string","description":"Pool key: the pool contract, or <PoolManager>:<PoolId> (V4, PancakeSwap Infinity)","example":"0x6c9a33e3b592c0d65b3ba59355d5be0d38259285"},"dex":{"type":"string","description":"Protocol","example":"hyperswap_v3"},"factory":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Factory or PoolManager","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"feeTier":{"type":["integer","null"]},"tickSpacing":{"type":["integer","null"]},"hooks":{"type":["string","null"],"description":"V4 / Infinity hooks contract"},"token0":{"$ref":"#/components/schemas/PoolToken"},"token1":{"$ref":"#/components/schemas/PoolToken"},"base":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Base token (DexScreener orientation)","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"quote":{"type":"string","pattern":"^0x[0-9a-f]{40}$","description":"Quote token","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"newToken":{"type":["string","null"],"description":"The side that is a new token (the base when both are); null when none"},"createdAt":{"type":"integer","description":"Creation block time (Unix ms)","example":1792236158000},"block":{"type":"integer","description":"Creation block"},"tx":{"type":["string","null"],"description":"Transaction of its creation event"},"logIndex":{"type":["integer","null"]},"initialLiquidity":{"type":["object","null"],"description":"Amounts added in the creation block (V2 / V3 Mint events); null when none or the protocol logs no amounts (V4 / Infinity)","properties":{"amount0":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"token0 (exact decimal string)"},"amount1":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"token1 (exact decimal string)"}}},"liquidity":{"type":["object","null"],"description":"Current token balances of the pool contract (V2 / V3; LiquidLaunch curves: their reserves) and their USD value (priced sides; partial = a side holding tokens has no price); null for V4 / Infinity pools (their PoolManager holds every pool's tokens)","properties":{"amount0":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"token0 (exact decimal string)"},"amount1":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"token1 (exact decimal string)"},"usd":{"type":["string","null"],"description":"USD (exact decimal string, null when unknown)"},"partial":{"type":"boolean"}}},"price":{"type":["string","null"],"description":"Last price (quote per base) (exact decimal string, null when unknown)"},"priceUsd":{"type":["string","null"],"description":"Last USD price of the base (exact decimal string, null when unknown)"},"volume24hUsd":{"type":["string","null"],"description":"24 h USD volume (exact decimal string, null when unknown)"},"trades24h":{"type":["integer","null"]},"mcapUsd":{"type":["string","null"],"description":"Market cap of the base at its last daily close (exact decimal string, null when unknown)"},"spam":{"type":"boolean","description":"Flagged spam by the indexer (tokens.spam). GET /api/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":["seq","address","dex","factory","feeTier","tickSpacing","hooks","token0","token1","base","quote","newToken","createdAt","block","tx","logIndex","initialLiquidity","liquidity","price","priceUsd","volume24hUsd","trades24h","mcapUsd","spam","spamReason"]},"LaunchRow":{"type":"object","description":"One launch (GET /api/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 /api/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 /api/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":"Deprecated (sunset 31 Jan 2027): use `cursor` / `next_cursor`. offset of the next page","deprecated":true},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page: pass it as `cursor`, unchanged. null on the last 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","next_cursor"]},"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 /api/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 /api/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)"}}},"buys":{"type":"integer","description":"token form (EVM): swaps buying the token"},"sells":{"type":"integer","description":"token form (EVM): swaps selling the token"}},"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"]},"BalanceRow":{"type":"object","description":"One token held by the address on one layer","properties":{"layer":{"type":"string","enum":["hypercore","hyperevm","elysium"],"description":"Layer of the holding"},"kind":{"type":"string","enum":["native","erc20","spot"],"description":"native: HYPE on an EVM layer (asset 0x0…0); erc20; spot: a HyperCore spot token"},"asset":{"type":"string","description":"EVM: the token address (0x0000000000000000000000000000000000000000 = native HYPE); HyperCore: the coin name","example":"0x5555555555555555555555555555555555555555"},"symbol":{"type":["string","null"],"description":"Symbol (on-chain string, cleaned)"},"name":{"type":["string","null"],"description":"Name"},"decimals":{"type":["integer","null"],"description":"Decimals of `raw` (HyperCore: wei decimals)"},"raw":{"type":"string","pattern":"^-?\\d+$","description":"Integer base units, exact (amount × 10^decimals)"},"amount":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"Amount in tokens (exact decimal string)"},"priceUsd":{"type":["string","null"],"description":"USD per token (exact decimal string, null when unknown)"},"priceSource":{"type":["string","null"],"enum":["hl_spot_mid","pool","hypercore","last_trade","usdc",null],"description":"hl_spot_mid: HYPE (native, WHYPE, Core HYPE) at HyperCore’s spot mid; pool: the token’s most traded pool on its layer; hypercore: a Core-linked HyperEVM token at its HyperCore spot market; last_trade: a HyperCore spot token’s last trade against USDC; usdc: 1"},"usd":{"type":["string","null"],"description":"amount × priceUsd, 2 decimals (exact decimal string, null when unknown)"},"spam":{"type":"boolean","description":"Flagged spam by the indexer (tokens.spam). GET /api/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"},"tokenIndex":{"type":"integer","description":"HyperCore: spot token index"},"hold":{"type":"string","pattern":"^-?\\d+(\\.\\d+)?$","description":"HyperCore: part of `amount` on hold (open orders) (exact decimal string)"},"family":{"type":"string","description":"HyperEVM token family (aave_atoken, sthype…): `raw` is its exact balanceOf at the head"},"onchain":{"type":"object","description":"verify=true: the same balance read again on the node at the same block","properties":{"raw":{"type":["string","null"],"description":"balanceOf / eth_getBalance on our archive node at `layers.<layer>.height`"},"match":{"type":["boolean","null"],"description":"raw equals it (null: the node could not answer)"},"error":{"type":"string","description":"Why the node could not answer"}},"required":["raw","match"]},"error":{"type":"string","description":"Past read: why the node could not answer for this token (raw then 0)"}},"required":["layer","kind","asset","symbol","name","decimals","raw","amount","priceUsd","priceSource","usd","spam","spamReason"]},"BalanceLayer":{"type":"object","description":"Provenance and totals of one layer","properties":{"source":{"type":"string","enum":["info-server","indexer","node","snapshot"],"description":"info-server: HyperCore live state of our node; indexer: the layer’s indexed balances at `height`; node: our archive node at the block asked; snapshot: HyperCore holder snapshot"},"height":{"type":["integer","null"],"description":"Block (HyperCore snapshot: its height) the balances are read at; absent for HyperCore live"},"asOf":{"type":["integer","null"],"description":"Time of `height` (Unix ms); HyperCore live: time of the read"},"network":{"type":"string","enum":["testnet","mainnet"],"description":"EVM layers: the chain read"},"chainId":{"type":"integer","description":"EVM layers: chain id"},"testnet":{"type":"boolean","const":true,"description":"Elysium testnet: no USD value"},"syncing":{"type":"boolean","const":true,"description":"The layer’s indexer is catching up: data up to dataUntil"},"dataUntil":{"type":"integer","description":"Indexed head time while syncing (Unix ms)","example":1792236158000},"requested":{"type":"object","description":"Past read: what was asked (height is the block / snapshot answered)","properties":{"block":{"type":"integer","description":"Block asked"},"at":{"type":"integer","description":"Time asked (Unix ms)","example":1792236158000}},"required":[]},"usd":{"type":["string","null"],"description":"USD of this layer (spot + perp accounts on HyperCore); null: past read or testnet (exact decimal string, null when unknown)"},"usdComplete":{"type":"boolean","description":"Every non-zero holding of the layer had a price"},"count":{"type":"integer","description":"Holdings of the layer (spam excluded unless includeSpam)"},"verify":{"type":"object","description":"verify=true","properties":{"height":{"type":"integer","description":"Block read on the node"},"checked":{"type":"integer","description":"Rows compared"},"mismatches":{"type":"integer","description":"Rows whose indexed balance differs from the node"},"errors":{"type":"integer","description":"Rows the node could not answer"},"unchecked":{"type":"integer","description":"Rows past the 50 compared"}},"required":[]},"truncated":{"type":"boolean","const":true,"description":"The address holds more than 5000 tokens on this layer (a contract): the first 5000 read, totals over them"},"unavailable":{"type":"string","description":"This layer could not answer (the others did)"}},"required":[]},"PerpAccount":{"type":"object","description":"A HyperCore perp account (clearinghouseState)","properties":{"dex":{"type":["string","null"],"description":"HIP-3 dex name; null: the main perp dex"},"collateral":{"type":"string","description":"Collateral token","example":"USDC"},"accountValue":{"type":["string","null"],"description":"Account value in collateral (exact decimal string, null when unknown)"},"withdrawable":{"type":["string","null"],"description":"Withdrawable (exact decimal string, null when unknown)"},"totalMarginUsed":{"type":["string","null"],"description":"Margin used (exact decimal string, null when unknown)"},"totalNtlPos":{"type":["string","null"],"description":"Total notional of open positions (exact decimal string, null when unknown)"},"positions":{"type":"integer","description":"Open positions"},"usd":{"type":["string","null"],"description":"Account value in USD (exact decimal string, null when unknown)"}},"required":["dex","collateral","accountValue","withdrawable","totalMarginUsed","totalNtlPos","positions","usd"]},"Balances":{"type":"object","description":"Balances of one address","properties":{"address":{"type":"string","pattern":"^(0x[0-9a-f]{40}|[a-z0-9][a-z0-9_.-]{0,63}\\.[0-9a-f]{8,64})$","description":"The address: 0x address, or a named wallet's handle","example":"0xf122277ba28a959d2c1b675f6f76570696c9d819"},"layer":{"type":"string","enum":["hypercore","hyperevm","elysium","all"]},"balances":{"type":"array","items":{"$ref":"#/components/schemas/BalanceRow"},"description":"Holdings, largest USD first (sort=amount: largest amount); spam left out unless includeSpam"},"count":{"type":"integer","description":"Rows listed"},"total":{"type":"integer","description":"Rows matching before `limit`"},"totalUsd":{"type":["string","null"],"description":"USD of every holding (spam never counts; tokens= narrows it, minUsd and limit do not) + HyperCore perp account values; Elysium testnet not valued; null on a past read (exact decimal string, null when unknown)"},"totalUsdComplete":{"type":"boolean","description":"Every holding had a price and every layer asked answered"},"perp":{"oneOf":[{"allOf":[{"$ref":"#/components/schemas/PerpAccount"},{"type":"object","properties":{"dexes":{"type":"array","items":{"$ref":"#/components/schemas/PerpAccount"},"description":"HIP-3 dexes with an account"},"totalUsd":{"type":["string","null"],"description":"Main + HIP-3 accounts, USD (exact decimal string, null when unknown)"},"abstraction":{"type":["string","null"],"description":"Account abstraction mode (userAbstraction): unifiedAccount, portfolioMargin, dexAbstraction, default, disabled"},"inSpot":{"type":"boolean","description":"unifiedAccount / portfolioMargin: the perp collateral is in the spot rows (Hyperliquid shows every balance and hold in the spot state), so the perp value is not added to the totals again"}},"required":["dexes","totalUsd","abstraction","inSpot"]}]},{"type":"null"}],"description":"HyperCore perp accounts (layer hypercore / all): kept apart from the token rows; null with tokens= or a past read"},"layers":{"type":"object","additionalProperties":{"$ref":"#/components/schemas/BalanceLayer"},"description":"Per layer asked: source, height, asOf (provenance), usd, count, verify"},"includeSpam":{"type":"boolean"},"spamHidden":{"type":"integer","description":"Spam holdings left out"},"entity":{"type":"object","description":"Named wallet (labels), when known"}},"required":["address","layer","balances","count","total","totalUsd","totalUsdComplete","layers","includeSpam","spamHidden"]},"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 /api/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 /api/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 /api/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 /api/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 /api/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 /api/audit 7d)","example":2},"open24h":{"type":"integer","description":"Of them, of the last 24 h (state of /api/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"]},"WebhookSubscription":{"type":"object","description":"A channel and its filter, as on the WebSocket","properties":{"id":{"type":"string","description":"Subscription id","example":"sub_Q2mV8kLp0aZ3fJ9x"},"channel":{"type":"string","enum":["bridge.transfers","elysium.bridge","wallet","hc.liquidations","hc.positions","elysium.launches","hyperevm.launches"]},"filter":{"type":"object","description":"The WebSocket filter of the channel. wallet: {address: one, a comma list or an array of up to 100 (0x or named-wallet handles), channel?: event kinds}; hc.positions: min_notional >= 10000 (default 100000)","additionalProperties":true},"batch":{"type":"string","enum":["block","none"],"default":"block","description":"block: the events of one source block per delivery; none: one event per delivery"},"seq":{"type":"integer","description":"Deliveries numbered so far"}},"required":["id","channel","filter","batch","seq"]},"Webhook":{"type":"object","properties":{"id":{"type":"string","description":"Webhook id","example":"wh_3fJ9xQ2mV8kLp0aZ"},"url":{"type":"string","description":"Where deliveries go","example":"https://example.com/femtos"},"description":{"type":"string","description":"Your label"},"state":{"type":"string","enum":["pending_verification","active","disabled"],"description":"pending_verification: the webhook.verification challenge was not echoed yet (nothing else is sent)"},"disabled":{"type":["object","null"],"description":"Why the webhook stopped (410 Gone, or every delivery failing for 24 h) and how to turn it on again","properties":{"reason":{"type":"string","enum":["gone","failing"]},"at":{"type":["integer","null"],"description":"Since (Unix ms)"},"detail":{"type":"string","description":"In words"},"enable":{"type":"string","description":"The call that turns it on again"}}},"paused":{"type":"boolean","description":"The key's account is no longer in our key list: nothing is sent (deleted after 30 days)"},"verifiedAt":{"type":["integer","null"],"description":"Challenge echoed (Unix ms)"},"failures":{"type":"object","properties":{"consecutive":{"type":"integer","description":"Failed attempts in a row"},"since":{"type":["integer","null"],"description":"First of them (Unix ms)"}}},"secretRotation":{"type":["object","null"],"properties":{"previousValidUntil":{"type":["integer","null"],"description":"The previous secret signs too until (Unix ms)"}}},"subscriptions":{"type":"array","items":{"$ref":"#/components/schemas/WebhookSubscription"}},"deliveriesToday":{"type":"integer","description":"Deliveries enqueued today (UTC), GET of one webhook only"},"droppedToday":{"type":"integer","description":"Events not delivered today: the daily limit of your tier reached"},"deliveriesPerDay":{"type":["integer","null"],"description":"Daily limit of your tier (null: none)"},"createdAt":{"type":["integer","null"],"description":"Created (Unix ms)"},"updatedAt":{"type":["integer","null"],"description":"Last changed (Unix ms)"}},"required":["id","url","description","state","disabled","paused","subscriptions","createdAt"]},"WebhookDelivery":{"type":"object","properties":{"msgId":{"type":"string","description":"The webhook-id header of this delivery (stable across its retries)","example":"msg_p5jXN8AQM9LWM0D4loKWxJek"},"type":{"type":"string","description":"Channel, or gap / webhook.test / webhook.verification"},"subscriptionId":{"type":["string","null"]},"seq":{"type":["integer","null"],"description":"Sequence of the delivery in its subscription"},"events":{"type":"integer","description":"Events in it"},"status":{"type":"string","enum":["pending","delivered","dead"]},"attempts":{"type":"integer","description":"Attempts so far (at most 7)"},"nextAttemptAt":{"type":["integer","null"],"description":"Next attempt (pending) (Unix ms)"},"createdAt":{"type":["integer","null"],"description":"Enqueued (Unix ms)"},"finishedAt":{"type":["integer","null"],"description":"Delivered or dead (Unix ms)"},"log":{"type":"array","items":{"type":"object","properties":{"attempt":{"type":"integer","description":"1-based"},"requestId":{"type":"string","description":"X-Request-Id we sent"},"at":{"type":["integer","null"],"description":"Sent (Unix ms)"},"httpStatus":{"type":["integer","null"],"description":"Your answer (null: none: DNS, connection, TLS, timeout, refused target)"},"ok":{"type":"boolean"},"latencyMs":{"type":"integer","description":"Until your answer"},"error":{"type":["string","null"]},"excerpt":{"type":["string","null"],"description":"First 4 KiB of your answer"}}}}}},"WebhookPayload":{"type":"object","description":"The JSON body we POST (signed: webhook-id, webhook-timestamp, webhook-signature)","properties":{"type":{"type":"string","description":"The channel (hc.liquidations…), or gap, webhook.test, webhook.verification","example":"hc.liquidations"},"timestamp":{"type":"string","description":"When enqueued (ISO 8601)"},"webhook_id":{"type":"string","description":"Webhook id"},"subscription_id":{"type":["string","null"]},"channel":{"type":["string","null"]},"filter":{"type":["object","null"]},"seq":{"type":["integer","null"],"description":"Per subscription, +1 each delivery: a jump means a gap message or a delivery still retrying"},"block":{"type":["integer","null"],"description":"Source block of the events"},"data":{"description":"Events: an array of the channel's WebSocket events (named wallets as handles). gap: {from, to, channels, reason}. webhook.verification: {challenge}"}},"required":["type","timestamp","webhook_id","data"]},"PricePoint":{"type":"object","description":"A USD price and its provenance","properties":{"token":{"type":"string","description":"Token as asked (0x address lowercase, or the HyperCore name / id)","example":"0x5555555555555555555555555555555555555555"},"symbol":{"type":["string","null"],"description":"Symbol"},"priceUsd":{"type":["string","null"],"description":"USD price (exact decimal string, null when unknown)","example":"77.2135"},"source":{"type":["string","null"],"enum":["pool","hl_mid","hl_oracle","hl_spot","hl_perp","unit",null],"description":"Where the price comes from (see the operation)"},"t":{"type":["integer","null"],"description":"Time of the observation: the swap's block time, the mid's time; null for a HyperCore last trade (within the last 24 h, else 7 d) (Unix ms)"},"block":{"type":"integer","description":"pool: block of the swap"},"tx":{"type":"string","description":"pool: transaction hash of the swap"},"logIndex":{"type":"integer","description":"pool: log index of the Swap"},"pool":{"$ref":"#/components/schemas/PoolRef"},"market":{"type":"string","description":"HyperCore market of the price (@107, PURR/USDC, BTC)"},"reason":{"type":"string","description":"Why priceUsd is null"},"spam":{"type":"boolean","description":"EVM: the token is flagged spam (tokens.spam)"},"spamReason":{"type":["string","null"],"description":"Why it is flagged"}},"required":["token","symbol","priceUsd","source","t"]},"PriceSeries":{"type":"object","description":"USD closes of one token per unit","properties":{"token":{"type":"string","description":"Token as asked"},"symbol":{"type":["string","null"],"description":"Symbol"},"source":{"type":["string","null"],"enum":["pool","hl_spot","hl_perp","unit",null],"description":"pool: the reference pool's USD closes; hl_spot / hl_perp: the HyperCore market's closes"},"pool":{"$ref":"#/components/schemas/PoolRef"},"market":{"type":"string","description":"HyperCore market"},"points":{"type":"array","items":{"type":"object","properties":{"t":{"type":"integer","description":"Unit start (Unix ms)","example":1792690430852},"priceUsd":{"type":"string","description":"USD close of the unit (carried over a unit without trade)"}},"required":["t","priceUsd"]},"description":"Ascending; units before the first known price are left out"},"reason":{"type":"string","description":"Why there are no points"}},"required":["token","source","points"]},"TokenMeta":{"type":"object","description":"Token metadata from the indexer","properties":{"address":{"type":"string","description":"Token address","example":"0x5555555555555555555555555555555555555555"},"symbol":{"type":["string","null"],"description":"ERC-20 symbol"},"name":{"type":["string","null"],"description":"ERC-20 name"},"decimals":{"type":["integer","null"],"description":"Decimals"},"totalSupply":{"type":["string","null"],"description":"Total supply in token units (exact decimal string, null when unknown)"},"creator":{"type":["string","null"],"description":"Deployer (when the indexer knows it)"},"createdAt":{"type":["integer","null"],"description":"Creation block time (Unix ms)"},"createdBlock":{"type":["integer","null"],"description":"Creation block"},"logo":{"type":["string","null"],"description":"Logo URL (launchpad metadata, when indexed; ipfs:// as an https gateway URL)"},"description":{"type":["string","null"],"description":"Description (launchpad metadata, when indexed)"},"socials":{"type":"object","description":"Links from launchpad metadata, when indexed","properties":{"website":{"type":["string","null"],"description":"URL"},"twitter":{"type":["string","null"],"description":"X URL"},"telegram":{"type":["string","null"],"description":"Telegram URL"},"discord":{"type":["string","null"],"description":"Discord URL"},"docs":{"type":["string","null"],"description":"Docs URL"}},"required":["website","twitter","telegram","discord","docs"]},"family":{"type":["string","null"],"description":"Token family whose balance moves without Transfer logs (aave_atoken, sthype…; /token-families)"},"links":{"type":"object","description":"Cross-layer links: HyperEVM {core: {index, tokenId, name}} (token registry); Elysium {evm: {address, kind}} (bridge registry)"},"native":{"type":"boolean","description":"The chain's native token (HYPE, 0x000…0)"},"spam":{"type":"boolean","description":"Flagged spam (tokens.spam)"},"spamReason":{"type":["string","null"],"description":"Why it is flagged"}},"required":["address","symbol","name","decimals","totalSupply","creator","createdAt","createdBlock","logo","description","socials","family","links","native","spam","spamReason"]},"TokenOverview":{"type":"object","description":"One token across all its pools","properties":{"layer":{"type":"string","description":"Layer","example":"hyperevm"},"token":{"$ref":"#/components/schemas/TokenMeta"},"price":{"type":"object","description":"The price as GET /prices answers it","properties":{"priceUsd":{"type":["string","null"],"description":"USD price (exact decimal string, null when unknown)"},"source":{"type":["string","null"],"description":"Source (as /prices)"},"t":{"type":["integer","null"],"description":"Time of the observation (Unix ms)"},"pool":{"type":"string","description":"pool source: pool key"},"market":{"type":"string","description":"HyperCore source: market"},"block":{"type":"integer","description":"pool: swap block"},"tx":{"type":"string","description":"pool: swap tx"},"logIndex":{"type":"integer","description":"pool: swap log index"}},"required":["priceUsd","source","t"]},"fdvUsd":{"type":["string","null"],"description":"totalSupply × price (exact decimal string, null when unknown)"},"mcapUsd":{"type":["string","null"],"description":"circulatingSupply × price (exact decimal string, null when unknown)"},"circulatingSupply":{"type":["string","null"],"description":"totalSupply minus what the zero and 0x…dead addresses hold (exact decimal string, null when unknown)"},"liquidityUsd":{"type":["string","null"],"description":"Σ of the measured liquidity of its pools (twice the smaller side of each) (exact decimal string, null when unknown)"},"liquidity":{"type":"object","properties":{"pools":{"type":"integer","description":"Pools measured"},"unmeasured":{"type":"integer","description":"Pools not measured (vault pools, a side without price)"}},"required":["pools","unmeasured"]},"windows":{"type":"object","description":"Rolling windows ending at windowsEnd: 5m / 1h / 6h from the swaps themselves, 24h from hourly candles (the current hour included), over every pool of the token (spam pools left out unless the token is spam)","properties":{"5m":{"type":"object","properties":{"volumeUsd":{"type":["string","null"],"description":"USD volume over every pool of the token (exact decimal string, null when unknown)"},"trades":{"type":"integer","description":"Swaps"},"buys":{"type":"integer","description":"Swaps buying the token"},"sells":{"type":"integer","description":"Swaps selling the token"},"priceChange":{"type":["number","null"],"description":"Price change over the window in % (the reference pool's last swap at its end vs at its start); null without a swap before the start"}},"required":["volumeUsd","trades","buys","sells","priceChange"]},"1h":{"type":"object","properties":{"volumeUsd":{"type":["string","null"],"description":"USD volume over every pool of the token (exact decimal string, null when unknown)"},"trades":{"type":"integer","description":"Swaps"},"buys":{"type":"integer","description":"Swaps buying the token"},"sells":{"type":"integer","description":"Swaps selling the token"},"priceChange":{"type":["number","null"],"description":"Price change over the window in % (the reference pool's last swap at its end vs at its start); null without a swap before the start"}},"required":["volumeUsd","trades","buys","sells","priceChange"]},"6h":{"type":"object","properties":{"volumeUsd":{"type":["string","null"],"description":"USD volume over every pool of the token (exact decimal string, null when unknown)"},"trades":{"type":"integer","description":"Swaps"},"buys":{"type":"integer","description":"Swaps buying the token"},"sells":{"type":"integer","description":"Swaps selling the token"},"priceChange":{"type":["number","null"],"description":"Price change over the window in % (the reference pool's last swap at its end vs at its start); null without a swap before the start"}},"required":["volumeUsd","trades","buys","sells","priceChange"]},"24h":{"type":"object","properties":{"volumeUsd":{"type":["string","null"],"description":"USD volume over every pool of the token (exact decimal string, null when unknown)"},"trades":{"type":"integer","description":"Swaps"},"buys":{"type":"integer","description":"Swaps buying the token"},"sells":{"type":"integer","description":"Swaps selling the token"},"priceChange":{"type":["number","null"],"description":"Price change over the window in % (the reference pool's last swap at its end vs at its start); null without a swap before the start"}},"required":["volumeUsd","trades","buys","sells","priceChange"]}},"required":["5m","1h","6h","24h"]},"windowsEnd":{"type":"integer","description":"End of the windows (the indexed head while the layer syncs) (Unix ms)","example":1792690430852},"holders":{"type":["object","null"],"description":"{count, top10Share}: positive balances, system addresses excluded (as /holders); null when it cannot answer","properties":{"count":{"type":"integer","description":"Holders"},"top10Share":{"type":["number","null"]}}},"pools":{"type":"object","properties":{"count":{"type":"integer","description":"Active pools of the token"},"active24h":{"type":"integer","description":"Pools traded in the last 24 h"},"reference":{"oneOf":[{"$ref":"#/components/schemas/PoolRef"},{"type":"null"}],"description":"The reference pool (price, candles, price change) and its `rule`"},"top":{"type":"array","items":{"type":"object","description":"{id, protocol, symbol, pairedWith, priceUsd, liquidityUsd, volume24hUsd, trades24h, createdAt, reference}"},"description":"The 5 best pools by the reference rule"}},"required":["count","active24h","reference","top"]},"createdAt":{"type":["integer","null"],"description":"Creation time (Unix ms)"},"creator":{"type":["string","null"],"description":"Deployer"},"asOf":{"type":["integer","null"],"description":"Time of `height`: the layer head the answer is cut at (EVM: indexed head; HyperCore: ingested head) (Unix ms)"},"height":{"type":["integer","null"],"description":"Head block of the layer the answer is cut at"},"testnet":{"type":"boolean","description":"Elysium testnet: USD values from testnet pools, nominal"},"syncing":{"type":"boolean","const":true,"description":"Present while the layer syncs: data only up to dataUntil"},"dataUntil":{"type":["integer","null"],"description":"Indexed head time while the layer syncs (Unix ms)"}},"required":["layer","token","price","fdvUsd","mcapUsd","liquidityUsd","windows","holders","pools"]},"WalletTrade":{"type":"object","description":"One swap of a wallet / pool / token history","properties":{"t":{"type":"integer","description":"Block time (Unix ms)","example":1792690425000},"block":{"type":"integer","description":"Block (provenance)"},"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 /api/trades and the WS trades channels"},"pair":{"type":"string","description":"Pool key"},"protocol":{"type":"string","description":"DEX protocol","example":"projectx_v3"},"base":{"type":["string","null"],"description":"Base symbol"},"quote":{"type":["string","null"],"description":"Quote symbol"},"baseAddress":{"type":"string","description":"Base token"},"quoteAddress":{"type":"string","description":"Quote token"},"side":{"type":"string","enum":["B","A"],"description":"B = the trader bought the base, A = sold"},"px":{"type":"string","description":"Pool price after the swap, in quote"},"sz":{"type":"string","description":"Base amount"},"vq":{"type":"string","description":"Quote amount"},"usd":{"type":["string","null"],"description":"USD value at the swap (the indexer's) (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":"Base market cap at the swap (exact decimal string, null when unknown)"},"trader":{"type":"string","description":"tx.from of the swap (a named wallet: its handle)"},"spam":{"type":"boolean","description":"A token of the row is flagged spam (tokens.spam); such rows are hidden unless includeSpam=true"},"spamReason":{"type":["string","null"],"description":"Why the indexer flags it"}},"required":["t","block","tx","logIndex","id","pair","side","px","sz","vq","trader"]},"WalletTrades":{"type":"object","description":"A page of swap history","properties":{"layer":{"type":"string","description":"Layer","example":"hyperevm"},"trader":{"type":["string","null"],"description":"Trader asked"},"pool":{"type":["string","null"],"description":"Pool asked"},"token":{"type":["string","null"],"description":"Token asked"},"side":{"type":["string","null"],"enum":["buy","sell",null]},"from":{"type":["integer","null"],"description":"Window start asked (Unix ms)"},"to":{"type":["integer","null"],"description":"Window end asked (exclusive) (Unix ms)"},"coverage":{"type":"string","enum":["all","priced"],"description":"priced: a token of more than 20 pools, read through its priced swaps only (volume_usd set)"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/WalletTrade"},"description":"Newest first"},"scanned":{"type":"integer","description":"Index rows read for this page (filters apply to them: at most 1000 per source per call)"},"spamHidden":{"type":"integer","description":"Rows of spam tokens left out (includeSpam=true shows them)"},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page; null when nothing is left in the window. A filtered page can hold fewer rows than limit, even none: keep paging while next_cursor is not null"},"testnet":{"type":"boolean","description":"Elysium testnet: USD values from testnet pools"},"asOf":{"type":"integer","description":"Time of `height` (Unix ms)","example":1792690425000},"height":{"type":"integer","description":"Indexed head block the answer is cut at"}},"required":["layer","coverage","rows","scanned","next_cursor"]},"AddressTransfer":{"type":"object","description":"One ERC-20 transfer of an address","properties":{"block":{"type":"integer","description":"Block (provenance)"},"t":{"type":"integer","description":"Block time (Unix ms)","example":1792690425000},"tx":{"type":"string","description":"Transaction hash (provenance)"},"logIndex":{"type":"integer","description":"Log index (provenance)"},"token":{"type":"string","description":"Token contract"},"symbol":{"type":["string","null"],"description":"Token symbol"},"decimals":{"type":["integer","null"],"description":"Token decimals"},"from":{"type":"string","description":"Sender (0x0 = mint)"},"to":{"type":"string","description":"Recipient (0x0 = burn)"},"direction":{"type":"string","enum":["in","out","self"],"description":"Relative to the address asked"},"amount":{"type":["string","null"],"description":"Token units (exact decimal string, null when unknown)"},"amountRaw":{"type":["string","null"],"description":"Raw integer of the Transfer log (exact decimal string, null when unknown)"},"usd":{"type":["string","null"],"description":"amount × the token's current pool price (not at the transfer); null unpriced or testnet (exact decimal string, null when unknown)"},"spam":{"type":"boolean","description":"A token of the row is flagged spam (tokens.spam); such rows are hidden unless includeSpam=true"},"spamReason":{"type":["string","null"],"description":"Why the indexer flags it"}},"required":["block","t","tx","logIndex","token","from","to","direction","amount","amountRaw","usd"]},"AddressTransfers":{"type":"object","description":"A page of an address's ERC-20 transfers","properties":{"layer":{"type":"string","description":"Layer","example":"hyperevm"},"address":{"type":"string","description":"Address asked"},"direction":{"type":"string","enum":["in","out","any"]},"token":{"type":["string","null"],"description":"Token asked"},"symbol":{"type":["string","null"],"description":"Its symbol, when token is given"},"from":{"type":["integer","null"],"description":"Window start asked (Unix ms)"},"to":{"type":["integer","null"],"description":"Window end asked (exclusive) (Unix ms)"},"fromBlock":{"type":"integer","description":"First block of the window"},"toBlock":{"type":"integer","description":"Last block of the window"},"rows":{"type":"array","items":{"$ref":"#/components/schemas/AddressTransfer"},"description":"Newest first"},"scanned":{"type":"integer","description":"Index rows read for this page (filters apply to them: at most 1000 per source per call)"},"spamHidden":{"type":"integer","description":"Rows of spam tokens left out (includeSpam=true shows them)"},"next_cursor":{"type":["string","null"],"description":"Opaque cursor of the next page; null when nothing is left in the window. A filtered page can hold fewer rows than limit, even none: keep paging while next_cursor is not null"},"usdBasis":{"type":["string","null"],"enum":["current_price",null],"description":"What usd / minUsd value the transfers at"},"testnet":{"type":"boolean","description":"Elysium testnet: no USD values"},"asOf":{"type":"integer","description":"Time of `height` (Unix ms)","example":1792690425000},"height":{"type":"integer","description":"Indexed head block the answer is cut at"}},"required":["layer","address","direction","rows","scanned","next_cursor"]},"PoolDetail":{"type":"object","description":"One pool","properties":{"layer":{"type":"string","description":"Layer","example":"hyperevm"},"address":{"type":"string","description":"Pool key (address, or <PoolManager>:<PoolId>)"},"dex":{"type":"string","description":"Protocol","example":"projectx_v3"},"factory":{"type":"string","description":"Factory / PoolManager"},"feeTier":{"type":["integer","null"],"description":"Fee tier (hundredths of a bip: 500 = 0.05 %)"},"tickSpacing":{"type":["integer","null"],"description":"Tick spacing"},"hooks":{"type":["string","null"],"description":"V4 / Infinity hooks contract"},"active":{"type":"boolean","description":"Listed active by the indexer"},"token0":{"type":"object","description":"token0","properties":{"address":{"type":"string","description":"Token"},"symbol":{"type":["string","null"],"description":"Symbol"},"name":{"type":["string","null"],"description":"Name"},"decimals":{"type":["integer","null"],"description":"Decimals"},"priceUsd":{"type":["string","null"],"description":"Current pool price, USD (exact decimal string, null when unknown)"},"spam":{"type":"boolean","description":"A token of the row is flagged spam (tokens.spam); such rows are hidden unless includeSpam=true"},"spamReason":{"type":["string","null"],"description":"Why the indexer flags it"}},"required":["address","symbol","name","decimals","priceUsd","spam","spamReason"]},"token1":{"type":"object","description":"token1","properties":{"address":{"type":"string","description":"Token"},"symbol":{"type":["string","null"],"description":"Symbol"},"name":{"type":["string","null"],"description":"Name"},"decimals":{"type":["integer","null"],"description":"Decimals"},"priceUsd":{"type":["string","null"],"description":"Current pool price, USD (exact decimal string, null when unknown)"},"spam":{"type":"boolean","description":"A token of the row is flagged spam (tokens.spam); such rows are hidden unless includeSpam=true"},"spamReason":{"type":["string","null"],"description":"Why the indexer flags it"}},"required":["address","symbol","name","decimals","priceUsd","spam","spamReason"]},"base":{"type":"string","description":"Base token (DexScreener orientation)"},"quote":{"type":"string","description":"Quote token"},"symbol":{"type":["string","null"],"description":"BASE/QUOTE"},"createdAt":{"type":"integer","description":"Creation time (Unix ms)","example":1792690425000},"block":{"type":"integer","description":"Creation block (provenance)"},"tx":{"type":["string","null"],"description":"Creation transaction (pool-created event in that block)"},"logIndex":{"type":["integer","null"],"description":"Its log index"},"creator":{"type":["string","null"],"description":"Creator, when the indexer knows it"},"price":{"type":["string","null"],"description":"Last price in quote (exact decimal string, null when unknown)"},"priceUsd":{"type":["string","null"],"description":"Last price in USD (exact decimal string, null when unknown)"},"mcapUsd":{"type":["string","null"],"description":"Base market cap (exact decimal string, null when unknown)"},"change24h":{"type":["number","null"],"description":"24 h price change, %"},"liquidity":{"type":["object","null"],"description":"What the pool holds; null when unknown (a vault pool without L, e.g. Balancer)","properties":{"method":{"type":"string","enum":["balances","reserves","reserves_after_last_swap","virtual"],"description":"balances: the pool contract's ERC-20 balances (V2, V3, Algebra, Solidly…; V3 includes uncollected fees); reserves: LiquidLaunch curve reserves; reserves_after_last_swap: no balance row, the reserves the last swap left; virtual: a pool in a shared vault (V4 / Infinity): L / √P and L · √P after its last swap, the full-range equivalent of the in-range liquidity, not TVL"},"exact":{"type":"boolean","description":"false for virtual"},"amount0":{"type":["string","null"],"description":"token0 units (exact decimal string, null when unknown)"},"amount1":{"type":["string","null"],"description":"token1 units (exact decimal string, null when unknown)"},"amount0Raw":{"type":"string","description":"Raw"},"amount1Raw":{"type":"string","description":"Raw"},"usd":{"type":["string","null"],"description":"Both sides × current USD prices (priced sides only) (exact decimal string, null when unknown)"},"partial":{"type":"boolean","description":"A side has no USD price: usd covers the other only"}},"required":["method","exact","amount0","amount1","amount0Raw","amount1Raw","usd","partial"]},"depth2pct":{"type":["object","null"],"description":"Concentrated pools: depth to ±2 % from L and √P","properties":{"approx":{"type":"boolean","description":"Always true: active liquidity only, no tick crossed"},"up":{"type":"object","properties":{"token":{"type":"string","description":"token1"},"amount":{"type":["string","null"],"description":"token1 in to move the price of token0 +2 % (exact decimal string, null when unknown)"},"usd":{"type":["string","null"],"description":"USD (exact decimal string, null when unknown)"}},"required":["token","amount","usd"]},"down":{"type":"object","properties":{"token":{"type":"string","description":"token0"},"amount":{"type":["string","null"],"description":"token0 in to move the price of token0 −2 % (exact decimal string, null when unknown)"},"usd":{"type":["string","null"],"description":"USD (exact decimal string, null when unknown)"}},"required":["token","amount","usd"]},"liquidity":{"type":"string","description":"Active liquidity L after the last swap"},"sqrtPriceX96":{"type":"string","description":"√P after the last swap (Q64.96)"},"block":{"type":"integer","description":"Block of that swap"}},"required":["approx","up","down","liquidity","sqrtPriceX96","block"]},"windows":{"type":"object","description":"From the candle tables: 5m / 1h from 1 min candles, 6h from 5 min, 24h from 1 h; a window starts at its first candle at or after head − length","properties":{"5m":{"type":"object","properties":{"from":{"type":"integer","description":"First candle of the window (Unix ms)","example":1792690425000},"to":{"type":"integer","description":"Indexed head time (Unix ms)","example":1792690425000},"trades":{"type":"integer","description":"Swaps"},"buys":{"type":"integer","description":"Buys of the base"},"sells":{"type":"integer","description":"Sells of the base"},"volumeUsd":{"type":["string","null"],"description":"USD volume (exact decimal string, null when unknown)"},"buyVolumeUsd":{"type":["string","null"],"description":"USD bought (exact decimal string, null when unknown)"},"sellVolumeUsd":{"type":["string","null"],"description":"USD sold (exact decimal string, null when unknown)"},"priceChangePct":{"type":["number","null"],"description":"Close / open − 1, %"},"open":{"type":["string","null"],"description":"First open (exact decimal string, null when unknown)"},"close":{"type":["string","null"],"description":"Last close (exact decimal string, null when unknown)"},"priceIn":{"type":"string","enum":["usd","quote"]}},"required":["from","to","trades","buys","sells","volumeUsd","buyVolumeUsd","sellVolumeUsd","priceChangePct","open","close","priceIn"]},"1h":{"type":"object","properties":{"from":{"type":"integer","description":"First candle of the window (Unix ms)","example":1792690425000},"to":{"type":"integer","description":"Indexed head time (Unix ms)","example":1792690425000},"trades":{"type":"integer","description":"Swaps"},"buys":{"type":"integer","description":"Buys of the base"},"sells":{"type":"integer","description":"Sells of the base"},"volumeUsd":{"type":["string","null"],"description":"USD volume (exact decimal string, null when unknown)"},"buyVolumeUsd":{"type":["string","null"],"description":"USD bought (exact decimal string, null when unknown)"},"sellVolumeUsd":{"type":["string","null"],"description":"USD sold (exact decimal string, null when unknown)"},"priceChangePct":{"type":["number","null"],"description":"Close / open − 1, %"},"open":{"type":["string","null"],"description":"First open (exact decimal string, null when unknown)"},"close":{"type":["string","null"],"description":"Last close (exact decimal string, null when unknown)"},"priceIn":{"type":"string","enum":["usd","quote"]}},"required":["from","to","trades","buys","sells","volumeUsd","buyVolumeUsd","sellVolumeUsd","priceChangePct","open","close","priceIn"]},"6h":{"type":"object","properties":{"from":{"type":"integer","description":"First candle of the window (Unix ms)","example":1792690425000},"to":{"type":"integer","description":"Indexed head time (Unix ms)","example":1792690425000},"trades":{"type":"integer","description":"Swaps"},"buys":{"type":"integer","description":"Buys of the base"},"sells":{"type":"integer","description":"Sells of the base"},"volumeUsd":{"type":["string","null"],"description":"USD volume (exact decimal string, null when unknown)"},"buyVolumeUsd":{"type":["string","null"],"description":"USD bought (exact decimal string, null when unknown)"},"sellVolumeUsd":{"type":["string","null"],"description":"USD sold (exact decimal string, null when unknown)"},"priceChangePct":{"type":["number","null"],"description":"Close / open − 1, %"},"open":{"type":["string","null"],"description":"First open (exact decimal string, null when unknown)"},"close":{"type":["string","null"],"description":"Last close (exact decimal string, null when unknown)"},"priceIn":{"type":"string","enum":["usd","quote"]}},"required":["from","to","trades","buys","sells","volumeUsd","buyVolumeUsd","sellVolumeUsd","priceChangePct","open","close","priceIn"]},"24h":{"type":"object","properties":{"from":{"type":"integer","description":"First candle of the window (Unix ms)","example":1792690425000},"to":{"type":"integer","description":"Indexed head time (Unix ms)","example":1792690425000},"trades":{"type":"integer","description":"Swaps"},"buys":{"type":"integer","description":"Buys of the base"},"sells":{"type":"integer","description":"Sells of the base"},"volumeUsd":{"type":["string","null"],"description":"USD volume (exact decimal string, null when unknown)"},"buyVolumeUsd":{"type":["string","null"],"description":"USD bought (exact decimal string, null when unknown)"},"sellVolumeUsd":{"type":["string","null"],"description":"USD sold (exact decimal string, null when unknown)"},"priceChangePct":{"type":["number","null"],"description":"Close / open − 1, %"},"open":{"type":["string","null"],"description":"First open (exact decimal string, null when unknown)"},"close":{"type":["string","null"],"description":"Last close (exact decimal string, null when unknown)"},"priceIn":{"type":"string","enum":["usd","quote"]}},"required":["from","to","trades","buys","sells","volumeUsd","buyVolumeUsd","sellVolumeUsd","priceChangePct","open","close","priceIn"]}},"required":["5m","1h","6h","24h"]},"lastSwap":{"type":["object","null"],"description":"The pool's last swap (provenance of the state)","properties":{"block":{"type":"integer","description":"Block"},"t":{"type":"integer","description":"Time (Unix ms)","example":1792690425000},"tx":{"type":"string","description":"Transaction"},"logIndex":{"type":"integer","description":"Log index"}},"required":["block","t","tx","logIndex"]},"lpHolders":{"type":["integer","string","null"],"description":"V2-style pools: holders of the LP token (\">2000\" when more); null otherwise"},"topLps":{"type":["array","null"],"items":{"type":"object","properties":{"address":{"type":"string","description":"LP holder"},"balanceRaw":{"type":"string","description":"LP tokens, raw"},"share":{"type":["number","null"],"description":"Share of the LP supply, 0–1"},"burned":{"type":"boolean","description":"0x0 / 0xdead: locked for good"}},"required":["address","balanceRaw","share"]},"description":"V2-style pools with at most 2000 LP holders: the 10 largest"},"spam":{"type":"boolean","description":"A token of the row is flagged spam (tokens.spam); such rows are hidden unless includeSpam=true"},"spamReason":{"type":["string","null"],"description":"Why the indexer flags it"},"testnet":{"type":"boolean","description":"Elysium testnet: USD from testnet pools"},"asOf":{"type":"integer","description":"Time of `height` (Unix ms)","example":1792690425000},"height":{"type":"integer","description":"Indexed head block the answer is cut at"}},"required":["layer","address","dex","factory","token0","token1","base","quote","createdAt","block","liquidity","windows"]},"Transaction":{"type":"object","description":"One transaction with its decoded events","properties":{"hash":{"type":"string","description":"Transaction hash"},"layer":{"type":"string","enum":["hyperevm","elysium"]},"chainId":{"type":"integer","description":"Chain id"},"network":{"type":"string","enum":["testnet","mainnet"],"description":"Elysium: its network"},"source":{"type":"string","enum":["indexer","rpc"],"description":"indexer: our tables (decoded); rpc: not indexed (yet), the node's transaction, nothing decoded"},"indexed":{"type":"boolean","description":"false: not in our tables"},"note":{"type":"string","description":"Why a node-only answer"},"status":{"type":["string","null"],"enum":["success","reverted",null]},"block":{"type":["integer","null"],"description":"Block"},"blockHash":{"type":["string","null"],"description":"Block hash"},"finality":{"type":["string","null"],"description":"soft / safe / finalized (indexer)"},"t":{"type":["integer","null"],"description":"Block time (Unix ms)"},"txIndex":{"type":["integer","null"],"description":"Index in the block"},"type":{"type":["integer","null"],"description":"Transaction type"},"from":{"type":["string","null"],"description":"Sender"},"to":{"type":["string","null"],"description":"Recipient (null: contract creation)"},"contractCreated":{"type":["string","null"],"description":"Contract created"},"methodId":{"type":["string","null"],"description":"4-byte selector of the call"},"nonce":{"type":["integer","null"],"description":"Nonce"},"value":{"type":["string","null"],"description":"Native value (HYPE) (exact decimal string, null when unknown)"},"valueRaw":{"type":["string","null"],"description":"Raw wei (exact decimal string, null when unknown)"},"valueSymbol":{"type":"string","description":"HYPE"},"gas":{"type":"object","properties":{"limit":{"type":["integer","null"],"description":"Gas limit"},"used":{"type":["integer","null"],"description":"Gas used"},"price":{"type":["string","null"],"description":"Effective gas price, wei (exact decimal string, null when unknown)"},"baseFee":{"type":["string","null"],"description":"Block base fee, wei (exact decimal string, null when unknown)"},"feeRaw":{"type":["string","null"],"description":"Fee, wei (exact decimal string, null when unknown)"},"fee":{"type":["string","null"],"description":"Fee, HYPE (exact decimal string, null when unknown)"},"feeUsd":{"type":["string","null"],"description":"Fee × HYPE price (null on Elysium testnet) (exact decimal string, null when unknown)"}},"required":["limit","used","price","baseFee","feeRaw","fee","feeUsd"]},"transfers":{"type":"array","items":{"type":"object","properties":{"logIndex":{"type":"integer","description":"Log index"},"token":{"type":["string","null"],"description":"Token"},"symbol":{"type":["string","null"],"description":"Symbol"},"decimals":{"type":["integer","null"],"description":"Decimals"},"from":{"type":"string","description":"From"},"to":{"type":"string","description":"To"},"amount":{"type":["string","null"],"description":"Token units (exact decimal string, null when unknown)"},"amountRaw":{"type":["string","null"],"description":"Raw (exact decimal string, null when unknown)"}},"required":["logIndex","token","from","to","amountRaw"]},"description":"ERC-20 transfers"},"swaps":{"type":"array","items":{"type":"object","properties":{"logIndex":{"type":"integer","description":"Log index"},"pair":{"type":"string","description":"Pool"},"dex":{"type":"string","description":"Protocol"},"side":{"type":"string","enum":["B","A"]},"base":{"type":["string","null"],"description":"Base"},"quote":{"type":["string","null"],"description":"Quote"},"sz":{"type":["string","null"],"description":"Base amount (exact decimal string, null when unknown)"},"vq":{"type":["string","null"],"description":"Quote amount (exact decimal string, null when unknown)"},"px":{"type":["string","null"],"description":"Price (exact decimal string, null when unknown)"},"usd":{"type":["string","null"],"description":"USD (exact decimal string, null when unknown)"},"trader":{"type":"string","description":"tx.from"},"id":{"type":"string","description":"<tx>:<log index>"}},"required":["logIndex","pair","side","id"]},"description":"Swaps"},"liquidity":{"type":"array","items":{"type":"object","properties":{"logIndex":{"type":"integer","description":"Log index"},"kind":{"type":"string","enum":["add","remove"]},"dex":{"type":"string","description":"Protocol"},"pool":{"type":["string","null"],"description":"Pool"},"provider":{"type":["string","null"],"description":"Provider"},"amount0Raw":{"type":["string","null"],"description":"Raw (exact decimal string, null when unknown)"},"amount1Raw":{"type":["string","null"],"description":"Raw (exact decimal string, null when unknown)"},"usd":{"type":["string","null"],"description":"USD (exact decimal string, null when unknown)"},"liquidityDelta":{"type":["string","null"],"description":"V4: liquidity delta"}},"required":["logIndex","kind","pool"]},"description":"Liquidity added / removed"},"poolsCreated":{"type":"array","items":{"type":"object","properties":{"logIndex":{"type":"integer","description":"Log index"},"dex":{"type":"string","description":"Protocol"},"pool":{"type":["string","null"],"description":"Pool"},"factory":{"type":["string","null"],"description":"Factory"}},"required":["logIndex","dex","pool","factory"]},"description":"Pools created"},"nfts":{"type":"array","items":{"type":"object","properties":{"logIndex":{"type":"integer","description":"Log index"},"collection":{"type":"string","description":"Collection"},"standard":{"type":"string","description":"erc721 / erc1155"},"kind":{"type":"string","description":"mint / burn / transfer"},"tokenId":{"type":"string","description":"Token id"},"from":{"type":"string","description":"From"},"to":{"type":"string","description":"To"}},"required":["logIndex","collection","tokenId"]},"description":"NFT transfers"},"otherEvents":{"type":"array","items":{"type":"object","properties":{"logIndex":{"type":"integer","description":"Log index"},"eventType":{"type":"string","description":"Indexer event type"},"protocol":{"type":"string","description":"Protocol"},"contract":{"type":["string","null"],"description":"Contract"}},"required":["logIndex","eventType"]},"description":"Other decoded events"},"logs":{"type":["object","null"],"description":"From our node's receipt (raw logs); null when no node is configured","properties":{"total":{"type":"integer","description":"Logs of the receipt"},"decoded":{"type":"integer","description":"Of which in the lists above"},"undecoded":{"type":"array","items":{"type":"object","properties":{"logIndex":{"type":["integer","null"],"description":"Log index"},"address":{"type":"string","description":"Emitter"},"topics":{"type":"array","items":{"type":"string"}},"data":{"type":"string","description":"Data (first 1024 chars)"}},"required":["logIndex","address","topics","data"]},"description":"At most 50"},"error":{"type":"string","description":"The node did not answer in time"},"source":{"type":"string","description":"node"}},"required":["total","decoded","undecoded","error","source"]},"bridge":{"type":["object","null"],"description":"When the transaction is a bridge leg: `legs` (leg tables at its block: route core_evm / evm_elysium, direction, account, amountRaw), `rows` (the account's matched rows of /api/bridges that cite it, 7 days), `journeys` (the cross-layer journeys Core → HyperEVM → Elysium or back it is a hop of). null: not a bridge leg."},"testnet":{"type":"boolean","description":"Elysium testnet"},"asOf":{"type":"integer","description":"Time of `height` (Unix ms)","example":1792690425000},"height":{"type":"integer","description":"Indexed head block the answer is cut at"}},"required":["hash","layer","chainId","source","status","block","from","to","gas","transfers","swaps","liquidity","nfts","logs","bridge"]}}},"x-websocket":{"url":"wss://femtos.xyz/ws?ticket=<ticket>","auth":"POST /api/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","error":"{error, code, message, docs_url, request_id (the upgrade's X-Request-Id), channel?, filter?, retryAfter?}: the codes of https://femtos.xyz/errors (invalid_request, invalid_param, rate_limited, too_many_subscriptions, upstream_error…); the connection stays open","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.stops.map","filter":{"coin":"required","buckets":"optional (1..400)","step":"optional (price width)","range_pct":"optional (default 10)"},"snapshot":"the GET /api/hypercore/stops answer","live":"the whole map again (snapshot: true) every 5 s when it changed; computed once per coin and grid"},{"channel":"hc.liquidations.map","filter":{"coin":"required","buckets":"optional","step":"optional","range_pct":"optional"},"snapshot":"the GET /api/hypercore/liquidation-map answer","live":"the whole map again (snapshot: true) when it changed: a new positions snapshot or a new grid as the mark moves"},{"channel":"hc.forced_flow.map","filter":{"coin":"required","buckets":"optional","step":"optional","range_pct":"optional"},"snapshot":"the GET /api/hypercore/forced-flow answer","live":"the whole map again (snapshot: true) every 5 s when it changed"},{"channel":"hc.stops","filter":{"coin":"optional","user":"optional","status":"optional (open, triggered, canceled, filled…)","kind":"optional: stop | take_profit"},"snapshot":"last 50 trigger-order events","live":"every status of a stop-loss / take-profit order (placed, triggered, canceled, rejected) and of the order its trigger places (filled, canceled: triggered true): the hc.orders fields + is_position_tpsl, kind, exec (market | limit), triggered"},{"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":"hyperevm.tokens.new","filter":{"include_spam":"optional: true","launchpad":"optional: ascend, liquidlaunch, none, any or 0x","creator":"optional 0x","event":"optional: created | pool_opened"},"snapshot":"last 50 TokenNew, chronological","live":"TokenNew + event: created (the token is indexed) or pool_opened (its first pool appeared, also when in the same block), pushed when the indexer commits the block"},{"channel":"hyperevm.pools.new","filter":{"include_spam":"optional: true","dex":"optional protocol","token":"optional 0x (either side)","quote":"optional 0x","new_token_only":"optional: true"},"snapshot":"last 50 PoolNew, chronological","live":"one PoolNew per new pool, pushed when the indexer commits the block"},{"channel":"elysium.tokens.new","filter":{"include_spam":"optional: true","launchpad":"optional: ascend, liquidlaunch, none, any or 0x","creator":"optional 0x","event":"optional: created | pool_opened"},"snapshot":"last 50 TokenNew, chronological","live":"TokenNew + event: created (the token is indexed) or pool_opened (its first pool appeared, also when in the same block), pushed when the indexer commits the block"},{"channel":"elysium.pools.new","filter":{"include_spam":"optional: true","dex":"optional protocol","token":"optional 0x (either side)","quote":"optional 0x","new_token_only":"optional: true"},"snapshot":"last 50 PoolNew, chronological","live":"one PoolNew per new pool, pushed when the indexer commits the block"},{"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","group":"optional: named (default) | cluster (smart-money clusters) | all","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"}],"replay":{"url":"wss://femtos.xyz/ws?ticket=<ticket>&replay_from=<ms|ISO>&replay_to=<ms|ISO>&speed=1|10|100|max","description":"A past window in exactly the live frames: subscribe as on the live socket, each subscription first gets the state at replay_from (its snapshot), then the events in time order on a replay clock. Without replay_from the socket is the live one. replay_to defaults to replay_from + the tier's longest window (never past now); speed 1 = real time (default), max = as fast as the client reads.","channels":["hc.trades","hc.candles","hc.orders","hc.ledger","hc.liquidations","hc.positions","prices.hype","hyperevm.trades","elysium.trades","elysium.launches","hyperevm.launches"],"frame":"{...the live frame, ts:{source: original block time, ingested, sent: the replay clock}, replay:{session, clock}}; at the same time HyperCore, then HyperEVM, then Elysium, then block and log index. hc.orders needs filter.coin; launch rows carry null for the fields that describe the token today (mcapUsd, holders…)","start":{"op":"replay.start"},"pause":{"op":"replay.pause"},"resume":{"op":"replay.resume"},"speed":{"op":"replay.speed","speed":10},"seek":{"op":"replay.seek","to":"<ms|ISO>"},"status":{"op":"replay.status"},"control_answer":"{op:\"replay.status\", state: waiting|running|paused|seeking|ended, clock, from, to, speed, effective_speed?, messages, subscriptions, session}; the clock starts on replay.start or 500 ms after the last subscribe ({op:\"replay.started\"}); replay.seek goes forward only and sends every subscription a fresh snapshot","gap":"{op:\"replay.gap\", from_block, to_block, from_time, to_time, streams}: a range missing from the HyperCore tables, when the clock reaches it","end":"{op:\"replay.end\", to, messages, reason: completed|paused_timeout|not_started|source_error}, then close 1000","limits":"per key, by tier: replay sessions at once and the longest window (free 1 / 1 h, builder 1 / 24 h, pro 3 / 168 h, scale 10 / 720 h, enterprise 20 / 720 h, partner 20 / 720 h): past them replay_limit (429) or replay_window_too_large (400) at the upgrade; replay_unavailable (503) when off. A session paused or not started for 5 min ends. Sending waits for a slow reader (never cut). Order statuses older than 7 days replay at 10x at most"}}}