{"openapi":"3.1.0","info":{"title":"Gnoma Explorer API","version":"2.0.0","summary":"Public, read-only API for Anoma Protocol Adapter activity on every supported EVM chain.","description":"The same data that powers the explorer, as JSON. No key, open CORS. Responses carry `Cache-Control`; indexed transactions never change and cache for an hour, live lists for ~10 s.\n\nTransaction ids match explorer.anoma.net: `{chainId}_{txHash}_{logIndex}`. Amounts are base-unit integers as strings; timestamps are Unix seconds.\n\nData model: a transaction consumes resources (publishing their nullifiers) and creates resources (adding commitments); each tag belongs to an action and is checked by a resource logic (a verifying key). Forwarder calls carry ERC20 shields/unshields and DeFi multicalls out of the shielded pool.","license":{"name":"MIT","url":"https://opensource.org/license/mit"},"contact":{"name":"Gnoma Explorer","url":"https://exploreanoma.com/developers"}},"servers":[{"url":"https://exploreanoma.com/api/v2"}],"tags":[{"name":"Explorer","description":"Indexed Anoma transactions, resources, logics and external calls."},{"name":"Live","description":"Second-source facts straight from Etherscan: the real-time feed, gas, receipts, verified-contract metadata, coverage audit."},{"name":"Ecosystem","description":"XAN token and adapter analytics computed on Dune Analytics by the explorer’s cron."},{"name":"Integrations","description":"Feeds, badges, CSV and this document."}],"paths":{"/overview":{"get":{"tags":["Explorer"],"summary":"Dashboard snapshot","description":"Totals, 24 h window, daily series per chain, latest transactions, logics, shielded flows, per-chain indexer health and XAN price. One precomputed row, refreshed every indexer pass.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Overview"}}}}}}},"/txs":{"get":{"tags":["Explorer"],"summary":"List transactions","parameters":[{"name":"chain","in":"query","required":false,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}},{"name":"logic","in":"query","description":"Resource logic reference (32-byte hex).","schema":{"type":"string","pattern":"^0x[0-9a-f]{64}$"}},{"name":"sender","in":"query","description":"Submitter address. An ENS name is accepted too: the answer is a 308 redirect to the same URL with its Ethereum address (404 `name_has_no_address` when it has none, 503 when ENS cannot be reached).","schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque keyset cursor from the previous page’s `next`.","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Page size (1–50, default 25).","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TxSummary"}},"next":{"oneOf":[{"type":"string","description":"Cursor for the next page; null when exhausted."},{"type":"null"}]},"stale":{"type":"boolean","description":"Served from the last-known-good snapshot because the database was unreachable."}},"required":["items","next"]}}}},"308":{"description":"An ENS name was given: the same URL with its Ethereum address."},"400":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"The ENS name has no Ethereum address (`name_has_no_address`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"ENS could not be reached just now; try again shortly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/txs.csv":{"get":{"tags":["Integrations"],"summary":"Transactions as CSV","description":"Newest-first export with the same filters as `/txs`. One row per Anoma transaction.","parameters":[{"name":"chain","in":"query","required":false,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}},{"name":"logic","in":"query","schema":{"type":"string","pattern":"^0x[0-9a-f]{64}$"}},{"name":"sender","in":"query","description":"Submitter address. An ENS name is accepted too: the answer is a 308 redirect to the same URL with its Ethereum address (404 `name_has_no_address` when it has none, 503 when ENS cannot be reached).","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Page size (1–500, default 100).","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"CSV, RFC 4180, CRLF line endings, UTF-8.","content":{"text/csv":{"schema":{"type":"string"}}}},"308":{"description":"An ENS name was given: the same URL with its Ethereum address."},"404":{"description":"The ENS name has no Ethereum address (`name_has_no_address`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"ENS could not be reached just now; try again shortly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/txs/{id}":{"get":{"tags":["Explorer"],"summary":"One transaction","description":"Full resource flow: tags with kind/logic/payloads, actions, decoded external calls. Accepts the composite id or a bare transaction hash (a hash that carries several Anoma transactions answers 300 with `matches`).","parameters":[{"name":"id","in":"path","required":true,"schema":{"oneOf":[{"type":"string","description":"Composite id","pattern":"^\\d+_0x[0-9a-f]{64}_\\d+$","example":"56_0x3b0c4e5e8a6d7f1c2b3a4958677685940312a1b2c3d4e5f60718293a4b5c6d7e_12"},{"type":"string","description":"Transaction hash","pattern":"^0x[0-9a-f]{64}$"}]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TxDetail"}}}},"300":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"matches":{"type":"array","items":{"$ref":"#/components/schemas/TxSummary"}}}}}}},"404":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/tags":{"get":{"tags":["Explorer"],"summary":"Latest resources","parameters":[{"name":"chain","in":"query","required":false,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}},{"name":"cursor","in":"query","description":"Opaque keyset cursor from the previous page’s `next`.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TagRow"}},"next":{"oneOf":[{"type":"string","description":"Cursor for the next page; null when exhausted."},{"type":"null"}]},"stale":{"type":"boolean","description":"Served from the last-known-good snapshot because the database was unreachable."}},"required":["items","next"]}}}}}}},"/tags/{tag}":{"get":{"tags":["Explorer"],"summary":"One resource tag","parameters":[{"name":"tag","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-f]{64}$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/TagDTO"}}}}},"404":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/logics":{"get":{"tags":["Explorer"],"summary":"Resource logics with usage","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/LogicSummary"}}}}}}}},"/logics/profiles":{"get":{"tags":["Explorer"],"summary":"What each logic does, inferred from on-chain behaviour","description":"Role (token balances, contract calls, companion, shielded state only), shields and unshields with their tokens, submitters, the logics it shares transactions with and the payload shape of its resources. Recomputed twice an hour; every figure is a count from the index, never an official name.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"computedAt":{"type":"integer","description":"Unix seconds"},"profiles":{"type":"array","items":{"type":"object","description":"LogicProfile (see shared/api.ts)"}}},"required":["computedAt","profiles"]}}}}}}},"/shielded/analytics":{"get":{"tags":["Explorer"],"summary":"What the pool boundary reveals","description":"Per asset and overall: net balance in the pool over time, distinct wallets that shielded (the crowd an unshield hides in), unshields to a wallet that shielded before, unshields whose amount matches an earlier shield (and those with exactly one candidate), and the median time in pool for round trips. Computed by the cron from the public shields and unshields.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"PoolAnalytics (see shared/api.ts)"}}}}}}},"/calls":{"get":{"tags":["Explorer"],"summary":"Forwarder calls, decoded","parameters":[{"name":"chain","in":"query","required":false,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}},{"name":"token","in":"query","description":"Only shields and unshields of this token (needs `chain`).","schema":{"type":"string","pattern":"^0x[0-9a-f]{40}$"}},{"name":"cursor","in":"query","description":"Opaque keyset cursor from the previous page’s `next`.","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Page size (1–50, default 25).","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/CallDTO"}},"next":{"oneOf":[{"type":"string","description":"Cursor for the next page; null when exhausted."},{"type":"null"}]},"stale":{"type":"boolean","description":"Served from the last-known-good snapshot because the database was unreachable."}},"required":["items","next"]}}}}}}},"/calls/top":{"get":{"tags":["Explorer"],"summary":"Largest shields or unshields in a window","description":"Amounts are base units of tokens with different decimals, so two lists: `byValue` ranks across tokens by today's USD value and holds priced tokens only (stablecoins at 1; ETH, BNB, BTC and XAN from the overview's prices); `byToken` ranks every token exactly within itself, busiest token first. Read newest-first from the window up to a fixed number of rows (`scanned`); `complete` is false when the window held more, and the ranking then covers the newest rows only. Cached five minutes.","parameters":[{"name":"chain","in":"query","required":false,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}},{"name":"direction","in":"query","required":true,"schema":{"type":"string","enum":["shield","unshield"]}},{"name":"window","in":"query","required":true,"description":"The period, ending now. No \"all time\": the read is bounded to the window.","schema":{"type":"string","enum":["24h","7d","30d"]}},{"name":"limit","in":"query","description":"Page size (1–50, default 10).","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopCalls"}}}},"400":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/submitters/top":{"get":{"tags":["Explorer"],"summary":"Senders ranked by settlements in a window","description":"Each sender with its settlements in the window, its share of the scanned settlements, first and last times, the networks it submitted on and its public name tag when it has one. Read newest-first from the window up to a fixed number of rows (`scanned`); `complete` is false when the window held more, and the ranking then covers the newest rows only. Cached five minutes.","parameters":[{"name":"chain","in":"query","required":false,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}},{"name":"window","in":"query","required":true,"description":"The period, ending now. No \"all time\": the read is bounded to the window.","schema":{"type":"string","enum":["24h","7d","30d"]}},{"name":"limit","in":"query","description":"Page size (1–50, default 10).","schema":{"type":"integer","minimum":1,"maximum":50,"default":10}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/TopSubmitters"}}}},"400":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/address/{address}":{"get":{"tags":["Explorer"],"summary":"Transactions submitted by an address","parameters":[{"name":"address","in":"path","required":true,"description":"0x address. An ENS name is accepted too: the answer is a 308 redirect to the same URL with its Ethereum address (404 `name_has_no_address` when it has none, 503 when ENS cannot be reached).","schema":{"type":"string"}},{"name":"cursor","in":"query","description":"Opaque keyset cursor from the previous page’s `next`.","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"items":{"type":"array","items":{"$ref":"#/components/schemas/TxSummary"}},"next":{"oneOf":[{"type":"string","description":"Cursor for the next page; null when exhausted."},{"type":"null"}]},"stale":{"type":"boolean","description":"Served from the last-known-good snapshot because the database was unreachable."}},"required":["items","next"]}}}},"308":{"description":"An ENS name was given: the same URL with its Ethereum address."},"404":{"description":"The ENS name has no Ethereum address (`name_has_no_address`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"ENS could not be reached just now; try again shortly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/search":{"get":{"tags":["Explorer"],"summary":"Resolve a hash, tag, logic, address or ENS name","description":"An ENS name (ENSIP-15 normalized, so `Vitalik.eth` works) resolves to its Ethereum address; an address result carries its verified Ethereum ENS name in the label.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/SearchResult"}}}}},"503":{"description":"A name was asked and ENS could not be reached; try again shortly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/ask":{"get":{"tags":["Explorer"],"summary":"Read a plain-language question into closed-set slots","description":"\"Ask Gnoma\". Also accepts POST with a text/plain or JSON body {\"q\": \"…\"}, which the site itself uses so the question is never in a URL (request logs keep URLs); prefer it for anything a person typed.  The text is read by a small model into an intent, a network, a period and a measure, each from a closed set the Worker checks before answering; nothing the model produces is data. `exact` means an identifier was found (run /search for `term`, no model asked); `query` is a confident reading to run against the other routes; `suggest` one to offer; `none` and `unavailable` leave the search box as it is (`reason` says why). Always 200. At most 140 characters; one caller may ask ten a minute.","parameters":[{"name":"q","in":"query","required":true,"schema":{"type":"string","maxLength":140}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/AskAnswer"}}}},"429":{"description":"Too many questions from this caller.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/names":{"get":{"tags":["Explorer"],"summary":"Verified ENS primary names","description":"Up to 50 addresses at once. A name is returned only when it was verified forward for that chain's own coin type (ENSIP-19: 60 on Ethereum, 0x80000000 | chainId elsewhere), so an Ethereum name is never shown for another chain; names are ENSIP-15 normalized. `pending` lists addresses that could not be looked up just now: ask again shortly (the answer is then cached for 15 s instead of 5 min).","parameters":[{"name":"chain","in":"query","required":true,"description":"Chain id.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988,84532,11155111]}},{"name":"addresses","in":"query","required":true,"description":"Comma-separated 0x addresses (at most 50 after removing duplicates).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsNames"}}}},"400":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/resolve":{"get":{"tags":["Explorer"],"summary":"An ENS name's Ethereum address","description":"Through the ENS Universal Resolver, wildcard and offchain (CCIP-Read) names included. `address` is null when the name has no Ethereum address record.","parameters":[{"name":"name","in":"query","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EnsResolution"}}}},"400":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"ENS could not be reached just now","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/networks":{"get":{"tags":["Explorer"],"summary":"Chain registry with indexer health and coverage audit","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"array","items":{"$ref":"#/components/schemas/NetworkRow"}}}}}}}},"/status":{"get":{"tags":["Explorer"],"summary":"Indexer status for monitors","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"generatedAt":{"oneOf":[{"type":"integer"},{"type":"null"}]},"stale":{"type":"boolean"},"ok":{"type":"boolean","description":"Every indexed chain advanced within 30 minutes."},"chains":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer"},"name":{"type":"string"},"ok":{"type":"boolean"},"updatedAt":{"oneOf":[{"type":"integer"},{"type":"null"}]},"lagBlocks":{"oneOf":[{"type":"integer"},{"type":"null"}]},"lastError":{"oneOf":[{"type":"string"},{"type":"null"}]}}}}}}}}}}}},"/explorer/recent":{"get":{"tags":["Live"],"summary":"Just landed","description":"Newest calls into the Protocol Adapter as Etherscan sees them, seconds after they land, each flagged with whether the explorer has indexed it yet. With `chain`: live (10 s cache). Without: merged across every audited chain from the audit pass (≈ 1 min).","parameters":[{"name":"chain","in":"query","required":false,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}},{"name":"limit","in":"query","description":"Page size (1–50, default 12).","schema":{"type":"integer","minimum":1,"maximum":50,"default":12}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"oneOf":[{"type":"object","properties":{"available":{"const":true},"chainId":{"oneOf":[{"type":"integer"},{"type":"null"}]},"txs":{"type":"array","items":{"$ref":"#/components/schemas/RecentTx"}},"fetchedAt":{"type":"integer"},"stale":{"type":"boolean"}}},{"$ref":"#/components/schemas/Unavailable"}]}}}}}}},"/explorer/gas":{"get":{"tags":["Live"],"summary":"Gas oracle","parameters":[{"name":"chain","in":"query","required":true,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"oneOf":[{"allOf":[{"type":"object","properties":{"available":{"const":true},"stale":{"type":"boolean"}}},{"$ref":"#/components/schemas/GasSnapshot"}]},{"$ref":"#/components/schemas/Unavailable"}]}}}}}}},"/explorer/address/{address}":{"get":{"tags":["Live"],"summary":"Verified-contract facts","parameters":[{"name":"address","in":"path","required":true,"description":"0x address. An ENS name is accepted too: the answer is a 308 redirect to the same URL with its Ethereum address (404 `name_has_no_address` when it has none, 503 when ENS cannot be reached).","schema":{"type":"string"}},{"name":"chain","in":"query","required":true,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"oneOf":[{"allOf":[{"type":"object","properties":{"available":{"const":true},"stale":{"type":"boolean"}}},{"$ref":"#/components/schemas/AddressFacts"}]},{"$ref":"#/components/schemas/Unavailable"}]}}}},"308":{"description":"An ENS name was given: the same URL with its Ethereum address."},"404":{"description":"The ENS name has no Ethereum address (`name_has_no_address`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"ENS could not be reached just now; try again shortly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/explorer/tx/{hash}/status":{"get":{"tags":["Live"],"summary":"Receipt status","parameters":[{"name":"hash","in":"path","required":true,"schema":{"type":"string","pattern":"^0x[0-9a-f]{64}$"}},{"name":"chain","in":"query","required":true,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"oneOf":[{"allOf":[{"type":"object","properties":{"available":{"const":true},"stale":{"type":"boolean"}}},{"$ref":"#/components/schemas/TxReceiptStatus"}]},{"$ref":"#/components/schemas/Unavailable"}]}}}}}}},"/explorer/integrity":{"get":{"tags":["Live"],"summary":"Coverage audit and on-chain parity per chain","description":"Two independent checks. `parity`: the explorer's totals against each Protocol Adapter's own counters (commitmentCount, commitmentTreeRootCount, latestCommitmentTreeRoot) read at the indexer's cursor block; `verified` means every commitment the contract counts is indexed. `chains`: what Etherscan knows versus what is indexed (newest-window check, healed count, history backfill cursor), or the same walk over plain RPC where Etherscan does not serve the chain.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"available":{"type":"boolean"},"chains":{"type":"array","items":{"$ref":"#/components/schemas/AuditState"}}}}}}}}}},"/analytics":{"get":{"tags":["Explorer"],"summary":"Network analytics, daily","description":"Every series the analytics page draws, aligned to consecutive UTC days: settlements per network, resources, actions, payloads by kind, forwarder calls (shield, unshield, multicall), distinct and new submitters, and resource usage per logic. Computed by the cron every five minutes from the explorer's own aggregates.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Analytics (see shared/analytics.ts)"}}}}}}},"/address/{address}/profile":{"get":{"tags":["Explorer"],"summary":"What the explorer knows about an address","description":"Its verified primary ENS name, public name tags on each network (exchange wallets and deposit addresses, bridges, DEX pools), XAN held on each network from the explorer's own ledger (with `asOf` while a network's history is still being read), how many settlements it submitted, and its shields and unshields at the pool boundary.","parameters":[{"name":"address","in":"path","required":true,"description":"0x address. An ENS name is accepted too: the answer is a 308 redirect to the same URL with its Ethereum address (404 `name_has_no_address` when it has none, 503 when ENS cannot be reached).","schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"AddressProfile (see shared/api.ts)"}}}},"308":{"description":"An ENS name was given: the same URL with its Ethereum address."},"404":{"description":"The ENS name has no Ethereum address (`name_has_no_address`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"ENS could not be reached just now; try again shortly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/xan":{"get":{"tags":["Ecosystem"],"summary":"XAN, the token, from its own Transfer logs","description":"Per network: supply (checked against totalSupply()), holders, concentration, size classes, the largest holders with their name tags, where tagged supply sits (exchanges, bridges, DEX pools), daily transfers, volume and first-time holders, and daily flows into and out of tagged exchanges. Plus the daily price history. Recomputed by the cron every five minutes.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"XanAnalytics (see shared/xan.ts)"}}}}}}},"/xan/transfers":{"get":{"tags":["Ecosystem"],"summary":"Large XAN transfers, newest first","description":"Transfers of at least a million XAN, with the name tags of either side when they have one.","parameters":[{"name":"chain","in":"query","required":false,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}},{"name":"cursor","in":"query","description":"Opaque keyset cursor from the previous page’s `next`.","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Page size (1–50, default 25).","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Page of XanTransfer (see shared/xan.ts)"}}}}}}},"/usage":{"get":{"tags":["Explorer"],"summary":"How the explorer is used: anonymous page counts and unanswered questions","description":"The last 30 UTC days: visitors per day (distinct browsers, by a one-way code of network address and browser type with a secret that changes daily and is then deleted) and page views per day and per page (by route template, never a specific transaction or address), split by where the site was read (the Worker's site or gnoma.eth), and the questions Ask Gnoma could not answer, as counts plus those asked at least three times, with identifiers removed. Nothing identifying is collected; see /usage on the site for the full description.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"UsageSummary (see shared/api.ts)"}}}}}}},"/proof":{"get":{"tags":["Explorer"],"summary":"The explorer checked against the contracts","description":"Per network: the Protocol Adapter's own counters against the indexed settlements; every indexed shield minus every unshield, per token, against the token balance the forwarder contract holds (every ten minutes); and for XAN, the ledger's supply against totalSupply() and a sample of its balances against balanceOf() (hourly). A disagreement must persist through three checks before it is reported as a mismatch.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Proof (see shared/proof.ts)"}}}}}}},"/address/{address}/xan":{"get":{"tags":["Ecosystem"],"summary":"An address's XAN transfers on one network","description":"Newest first, keyset-paginated. Each transfer as seen from the address: direction, counterparty (with its name tag), amount in base units and transaction hash. `complete` is false while the network's older history is still being loaded.","parameters":[{"name":"address","in":"path","required":true,"description":"0x address. An ENS name is accepted too: the answer is a 308 redirect to the same URL with its Ethereum address (404 `name_has_no_address` when it has none, 503 when ENS cannot be reached).","schema":{"type":"string"}},{"name":"chain","in":"query","required":true,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}},{"name":"cursor","in":"query","description":"Opaque keyset cursor from the previous page’s `next`.","schema":{"type":"string"}},{"name":"limit","in":"query","description":"Page size (1–50, default 25).","schema":{"type":"integer","minimum":1,"maximum":50,"default":25}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"{ items: XanAddressTransfer[], next, complete } (see shared/xan.ts)"}}}},"308":{"description":"An ENS name was given: the same URL with its Ethereum address."},"404":{"description":"The ENS name has no Ethereum address (`name_has_no_address`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"ENS could not be reached just now; try again shortly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/address/{address}/xan.csv":{"get":{"tags":["Integrations"],"summary":"An address's XAN transfers as CSV","parameters":[{"name":"address","in":"path","required":true,"description":"0x address. An ENS name is accepted too: the answer is a 308 redirect to the same URL with its Ethereum address (404 `name_has_no_address` when it has none, 503 when ENS cannot be reached).","schema":{"type":"string"}},{"name":"chain","in":"query","required":true,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}}],"responses":{"200":{"description":"CSV, newest first, amounts in whole XAN as exact decimals.","content":{"text/csv":{"schema":{"type":"string"}}}},"308":{"description":"An ENS name was given: the same URL with its Ethereum address."},"404":{"description":"The ENS name has no Ethereum address (`name_has_no_address`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"ENS could not be reached just now; try again shortly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/address/{address}/xan/analytics":{"get":{"tags":["Ecosystem"],"summary":"An address's XAN activity, for charts","description":"Per UTC day with activity: XAN received, XAN sent and transfers; the ten largest counterparties (with name tags) by XAN moved either way; totals. Amounts in whole XAN as floats (charting precision); exact amounts are in /address/{address}/xan. Cached five minutes.","parameters":[{"name":"address","in":"path","required":true,"description":"0x address. An ENS name is accepted too: the answer is a 308 redirect to the same URL with its Ethereum address (404 `name_has_no_address` when it has none, 503 when ENS cannot be reached).","schema":{"type":"string"}},{"name":"chain","in":"query","required":true,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"XanAddressAnalytics (see shared/xan.ts)"}}}},"308":{"description":"An ENS name was given: the same URL with its Ethereum address."},"404":{"description":"The ENS name has no Ethereum address (`name_has_no_address`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"ENS could not be reached just now; try again shortly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/xan/feed":{"get":{"tags":["Ecosystem"],"summary":"Every XAN transfer after a block, in chain order","description":"For services that follow the token. Whole blocks only: apply `items` and move your cursor to `through`, and no transfer is missed or repeated. Keeps the last eight days; `covered: false` means `after` is older than that.","parameters":[{"name":"chain","in":"query","required":true,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}},{"name":"after","in":"query","required":true,"description":"Your last fully applied block.","schema":{"type":"integer","minimum":0}},{"name":"limit","in":"query","description":"Page size (1–2000, default 1000).","schema":{"type":"integer","minimum":1,"maximum":2000,"default":1000}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"XanFeed (see src/worker/xan.ts)"}}}}}}},"/governance":{"get":{"tags":["Ecosystem"],"summary":"XAN governance, read from the contracts","description":"The Governor contract on Ethereum: its rules (review and voting periods, proposal threshold, quorum, timelock delay), every proposal with its state, tally and largest votes, and two facts from the token (owner, vesting window). Plus the newest topics of the governance forum. Refreshed by the cron every five minutes (the forum every fifteen); never computed per request.","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","description":"Governance (see shared/governance.ts)"}}}}}}},"/ecosystem":{"get":{"tags":["Ecosystem"],"summary":"Available metrics","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"configured":{"type":"boolean"},"metrics":{"type":"array","items":{"$ref":"#/components/schemas/EcosystemMetricSummary"}}}}}}}}}},"/ecosystem/{metric}":{"get":{"tags":["Ecosystem"],"summary":"One metric with rows","parameters":[{"name":"metric","in":"path","required":true,"schema":{"type":"string","pattern":"^[a-z0-9_]{1,64}$"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/EcosystemMetric"}}}},"404":{"description":"OK","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/watch/config":{"get":{"tags":["Integrations"],"summary":"Alert channels this deployment delivers to","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"webhooks":{"type":"array","items":{"type":"string"}},"telegram":{"oneOf":[{"type":"object","properties":{"bot":{"type":"string"},"url":{"type":"string"}}},{"type":"null"}]},"limits":{"type":"object","properties":{"perChannel":{"type":"integer"},"total":{"type":"integer"}}}}}}}}}}},"/watch":{"post":{"tags":["Integrations"],"summary":"Create an alert","description":"Watch an address (as submitter, or as the wallet a shield or unshield moves tokens for), a logic or a token, delivering to a Discord or Slack incoming webhook. The webhook receives a confirmation with a removal link. The manage `token` is returned once; the webhook URL is never returned.","requestBody":{"required":true,"content":{"application/json":{"schema":{"type":"object","properties":{"kind":{"type":"string","enum":["address","logic","token"]},"value":{"type":"string","description":"Address (20 bytes) or logic key (32 bytes), hex. An address may be given as an ENS name: the address it resolves to on Ethereum is stored."},"chain":{"oneOf":[{"type":"integer","description":"Limit to one indexed chain."},{"type":"null"}]},"webhook":{"type":"string","description":"https://discord.com/api/webhooks/… or https://hooks.slack.com/services/…"}},"required":["kind","value","webhook"]}}}},"responses":{"201":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"id":{"type":"string"},"token":{"type":"string","description":"Manage token; shown once."},"kind":{"type":"string"},"value":{"type":"string"},"chainId":{"oneOf":[{"type":"integer"},{"type":"null"}]},"channel":{"type":"string"},"createdAt":{"type":"integer"},"lastSentAt":{"oneOf":[{"type":"integer"},{"type":"null"}]},"sent":{"type":"integer"}}}}}},"400":{"description":"Invalid subject or webhook","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"409":{"description":"Already watching, or a limit was reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Too many alerts created","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"An ENS name was given and ENS could not be reached","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/watch/{id}":{"get":{"tags":["Integrations"],"summary":"Delivery status of an alert","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-watch-token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object"}}}},"404":{"description":"Unknown alert or wrong token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}},"delete":{"tags":["Integrations"],"summary":"Remove an alert","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}},{"name":"x-watch-token","in":"header","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","properties":{"ok":{"type":"boolean"}}}}}},"404":{"description":"Unknown alert or wrong token","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/feed.xml":{"get":{"tags":["Integrations"],"summary":"Atom feed of settlements","parameters":[{"name":"chain","in":"query","required":false,"description":"Chain id of an indexed network.","schema":{"type":"integer","enum":[1,56,8453,42161,10,1313161554,4326,143,988]}},{"name":"logic","in":"query","description":"Only settlements using this logic.","schema":{"type":"string","pattern":"^0x[0-9a-f]{64}$"}},{"name":"sender","in":"query","description":"Only settlements submitted by this address. An ENS name is accepted too: the answer is a 308 redirect to the same URL with its Ethereum address (404 `name_has_no_address` when it has none, 503 when ENS cannot be reached).","schema":{"type":"string"}}],"responses":{"200":{"description":"Atom 1.0","content":{"application/atom+xml":{"schema":{"type":"string"}}}},"308":{"description":"An ENS name was given: the same URL with its Ethereum address."},"404":{"description":"The ENS name has no Ethereum address (`name_has_no_address`).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"503":{"description":"ENS could not be reached just now; try again shortly.","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/badge/{metric}.svg":{"get":{"tags":["Integrations"],"summary":"Embeddable SVG badge","parameters":[{"name":"metric","in":"path","required":true,"schema":{"type":"string","enum":["txs","txs-24h","resources","networks","status"]}},{"name":"label","in":"query","description":"Override the left-hand label (≤ 32 chars).","schema":{"type":"string"}}],"responses":{"200":{"description":"SVG","content":{"image/svg+xml":{"schema":{"type":"string"}}}}}}},"/openapi.json":{"get":{"tags":["Integrations"],"summary":"This document","responses":{"200":{"description":"OpenAPI 3.1"}}}}},"components":{"schemas":{"Error":{"type":"object","properties":{"error":{"type":"string"}},"required":["error"]},"Unavailable":{"type":"object","properties":{"available":{"const":false},"reason":{"type":"string","enum":["etherscan_not_configured","chain_not_supported"]}},"required":["available","reason"]},"PayloadMix":{"type":"array","items":{"type":"integer"},"minItems":4,"maxItems":4,"description":"Payload counts in fixed order: resource, discovery, external, application."},"TxSummary":{"type":"object","properties":{"id":{"type":"string","pattern":"^\\d+_0x[0-9a-f]{64}_\\d+$","example":"56_0x3b0c4e5e8a6d7f1c2b3a4958677685940312a1b2c3d4e5f60718293a4b5c6d7e_12"},"chainId":{"type":"integer"},"txHash":{"type":"string","pattern":"^0x[0-9a-f]{64}$"},"logIndex":{"type":"integer"},"blockNumber":{"type":"integer"},"ts":{"type":"integer","description":"Unix seconds"},"sender":{"oneOf":[{"type":"string","description":"Submitter (tx.from)","pattern":"^0x[0-9a-f]{40}$"},{"type":"null"}]},"nTags":{"type":"integer","description":"Resources: half consumed (nullifiers), half created (commitments)."},"nActions":{"type":"integer"},"nPayloads":{"type":"integer"},"nCalls":{"type":"integer"},"mix":{"$ref":"#/components/schemas/PayloadMix"},"logics":{"type":"array","items":{"type":"array","prefixItems":[{"type":"string","description":"logic ref"},{"type":"integer","description":"tags using it"}]}}},"required":["id","chainId","txHash","logIndex","blockNumber","ts","nTags","nActions","nPayloads","nCalls","mix","logics"]},"PayloadDTO":{"type":"object","properties":{"kind":{"type":"string","enum":["resource","discovery","external","application"]},"index":{"type":"integer"},"blob":{"type":"string","description":"hex"}}},"CallDTO":{"type":"object","properties":{"id":{"type":"string"},"chainId":{"type":"integer"},"txId":{"type":"string"},"ts":{"type":"integer"},"forwarder":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"tag":{"oneOf":[{"type":"string"},{"type":"null"}]},"direction":{"oneOf":[{"type":"string","description":"wrap = shield into the pool, unwrap = unshield, multicall = DeFi actions run from the pool.","enum":["wrap","unwrap","multicall"]},{"type":"null"}]},"token":{"oneOf":[{"type":"string"},{"type":"null"}]},"amount":{"oneOf":[{"type":"string","description":"base units"},{"type":"null"}]},"input":{"type":"string"},"output":{"type":"string"},"account":{"oneOf":[{"type":"string"},{"type":"null"}]},"steps":{"type":"array","items":{"type":"object","properties":{"target":{"type":"string"},"value":{"type":"string"},"selector":{"type":"string"}}}}}},"TagDTO":{"type":"object","properties":{"tag":{"type":"string","pattern":"^0x[0-9a-f]{64}$"},"chainId":{"type":"integer"},"txId":{"type":"string"},"ts":{"type":"integer"},"pos":{"type":"integer"},"kind":{"type":"string","enum":["nullifier","commitment"]},"logic":{"type":"string"},"action":{"type":"integer"},"payloads":{"type":"array","items":{"$ref":"#/components/schemas/PayloadDTO"}},"calls":{"type":"array","items":{"$ref":"#/components/schemas/CallDTO"}}}},"TagRow":{"type":"object","properties":{"tag":{"type":"string"},"chainId":{"type":"integer"},"txId":{"type":"string"},"ts":{"type":"integer"},"pos":{"type":"integer"},"kind":{"type":"string","enum":["nullifier","commitment"]},"logic":{"type":"string"}}},"TxDetail":{"allOf":[{"$ref":"#/components/schemas/TxSummary"},{"type":"object","properties":{"root":{"oneOf":[{"type":"string"},{"type":"null"}]},"actions":{"type":"array","items":{"type":"object","properties":{"root":{"type":"string"},"tagCount":{"type":"integer"}}}},"tags":{"type":"array","items":{"$ref":"#/components/schemas/TagDTO"}},"calls":{"type":"array","items":{"$ref":"#/components/schemas/CallDTO"}}}}]},"LogicSummary":{"type":"object","properties":{"logic":{"type":"string"},"txs":{"type":"integer"},"tags":{"type":"integer"},"firstDay":{"type":"integer","description":"days since epoch"},"lastDay":{"type":"integer"},"chains":{"type":"array","items":{"type":"integer"}}}},"FlowSummary":{"type":"object","properties":{"chainId":{"type":"integer"},"token":{"type":"string"},"wraps":{"type":"integer"},"unwraps":{"type":"integer"},"wrapAmount":{"type":"string"},"unwrapAmount":{"type":"string"}}},"DailyPoint":{"type":"object","properties":{"day":{"type":"integer","description":"days since epoch (UTC)"},"txs":{"type":"object","additionalProperties":{"type":"integer"},"description":"transactions per chain id"},"tags":{"type":"integer"},"calls":{"type":"integer"}}},"ChainHealth":{"type":"object","properties":{"chainId":{"type":"integer"},"cursor":{"type":"integer"},"head":{"oneOf":[{"type":"integer"},{"type":"null"}]},"coverageFrom":{"type":"integer"},"lagBlocks":{"oneOf":[{"type":"integer"},{"type":"null"}]},"updatedAt":{"oneOf":[{"type":"integer"},{"type":"null"}]},"lastOkAt":{"oneOf":[{"type":"integer"},{"type":"null"}]},"lastError":{"oneOf":[{"type":"string"},{"type":"null"}]},"gaps":{"type":"array","items":{"type":"array"}},"txs":{"type":"integer"},"tags":{"type":"integer"},"calls":{"type":"integer"},"lastTxTs":{"oneOf":[{"type":"integer"},{"type":"null"}]}}},"Overview":{"type":"object","properties":{"generatedAt":{"type":"integer"},"totals":{"type":"object","properties":{"txs":{"type":"integer"},"tags":{"type":"integer"},"actions":{"type":"integer"},"payloads":{"type":"integer"},"calls":{"type":"integer"},"logics":{"type":"integer"},"chains":{"type":"integer"},"mix":{"$ref":"#/components/schemas/PayloadMix"}}},"window":{"type":"object","properties":{"txs24h":{"type":"integer"},"txsPrev24h":{"type":"integer"},"tags24h":{"type":"integer"},"senders24h":{"type":"integer"}}},"daily":{"type":"array","items":{"$ref":"#/components/schemas/DailyPoint"}},"chains":{"type":"array","items":{"$ref":"#/components/schemas/ChainHealth"}},"latest":{"type":"array","items":{"$ref":"#/components/schemas/TxSummary"}},"logics":{"type":"array","items":{"$ref":"#/components/schemas/LogicSummary"}},"flows":{"type":"array","items":{"$ref":"#/components/schemas/FlowSummary"}},"prices":{"type":"object","properties":{"xan":{"type":"object","properties":{"usd":{"type":"number"},"change24h":{"oneOf":[{"type":"number"},{"type":"null"}]},"marketCap":{"oneOf":[{"type":"number"},{"type":"null"}]},"volume24h":{"oneOf":[{"type":"number"},{"type":"null"}]},"updatedAt":{"oneOf":[{"type":"integer"},{"type":"null"}]}}}}},"stale":{"type":"boolean"}}},"EnsNames":{"type":"object","properties":{"chainId":{"type":"integer"},"coinType":{"type":"integer","description":"ENSIP-11 coin type of the chain."},"names":{"type":"object","additionalProperties":{"oneOf":[{"type":"string"},{"type":"null"}]},"description":"Lowercase address → verified primary name, or null when it has none."},"pending":{"type":"array","items":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"description":"Not looked up just now; ask again later."}},"required":["chainId","coinType","names","pending"]},"EnsResolution":{"type":"object","properties":{"name":{"type":"string","description":"ENSIP-15 normalized."},"address":{"oneOf":[{"type":"string","description":"Ethereum address (coin type 60), lowercase.","pattern":"^0x[0-9a-f]{40}$"},{"type":"null"}]}},"required":["name","address"]},"SearchResult":{"type":"object","properties":{"kind":{"type":"string","enum":["tx","tag","logic","address","block"]},"id":{"type":"string"},"chainId":{"type":"integer"},"label":{"type":"string"},"resolvedFrom":{"type":"string","description":"For an address found from an ENS name: the name, ENSIP-15 normalized."}}},"NetworkRow":{"type":"object","properties":{"id":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"short":{"type":"string"},"testnet":{"type":"boolean"},"status":{"type":"string","enum":["indexed","deployed","planned"]},"protocolAdapter":{"type":"object","properties":{"address":{"type":"string"},"version":{"type":"string"},"startBlock":{"type":"integer"}}},"explorer":{"type":"object","properties":{"name":{"type":"string"},"url":{"type":"string"}}},"health":{"oneOf":[{"$ref":"#/components/schemas/ChainHealth"},{"type":"null"}]},"audit":{"oneOf":[{"$ref":"#/components/schemas/AuditState"},{"type":"null"}]}}},"RecentTx":{"type":"object","properties":{"hash":{"type":"string"},"blockNumber":{"type":"integer"},"ts":{"type":"integer"},"from":{"type":"string"},"gasUsed":{"type":"integer"},"indexed":{"type":"boolean","description":"Already in the explorer’s database."},"txId":{"oneOf":[{"type":"string"},{"type":"null"}]},"chainId":{"type":"integer","description":"Present in the cross-chain feed."}}},"GasSnapshot":{"type":"object","properties":{"chainId":{"type":"integer"},"source":{"type":"string","enum":["gasoracle","eth_gasPrice"]},"baseFeeGwei":{"oneOf":[{"type":"number"},{"type":"null"}]},"safeGwei":{"type":"number"},"proposeGwei":{"type":"number"},"fastGwei":{"type":"number"},"lastBlock":{"oneOf":[{"type":"integer"},{"type":"null"}]},"fetchedAt":{"type":"integer"}}},"AddressFacts":{"type":"object","properties":{"chainId":{"type":"integer"},"address":{"type":"string"},"isContract":{"type":"boolean"},"verified":{"type":"boolean"},"name":{"oneOf":[{"type":"string"},{"type":"null"}]},"compilerVersion":{"oneOf":[{"type":"string"},{"type":"null"}]},"licenseType":{"oneOf":[{"type":"string"},{"type":"null"}]},"isProxy":{"type":"boolean"},"implementation":{"oneOf":[{"type":"string"},{"type":"null"}]},"implementationName":{"oneOf":[{"type":"string"},{"type":"null"}]},"creator":{"oneOf":[{"type":"string"},{"type":"null"}]},"creationTx":{"oneOf":[{"type":"string"},{"type":"null"}]},"hasAbi":{"type":"boolean"},"checkedAt":{"type":"integer"}}},"TxReceiptStatus":{"type":"object","properties":{"chainId":{"type":"integer"},"hash":{"type":"string"},"success":{"oneOf":[{"type":"boolean"},{"type":"null"}]},"errorDescription":{"oneOf":[{"type":"string"},{"type":"null"}]},"checkedAt":{"type":"integer"}}},"AuditState":{"type":"object","properties":{"chainId":{"type":"integer"},"backfillFrom":{"type":"integer","description":"Next block the history walk starts from."},"backfillDone":{"type":"boolean","description":"History verified complete from the deploy block."},"healedTotal":{"type":"integer","description":"Transactions recovered from Etherscan receipts so far."},"ignoredTotal":{"type":"integer"},"window":{"oneOf":[{"type":"object","properties":{"at":{"type":"integer"},"checked":{"type":"integer"},"missing":{"type":"integer"}}},{"type":"null"}]},"lastError":{"oneOf":[{"type":"string"},{"type":"null"}]},"updatedAt":{"type":"integer"}}},"EcosystemMetricSummary":{"type":"object","properties":{"id":{"type":"string"},"label":{"type":"string"},"description":{"type":"string"},"refreshSeconds":{"type":"integer"},"state":{"type":"string","enum":["idle","running","completed","failed"]},"asOf":{"oneOf":[{"type":"integer"},{"type":"null"}]},"stale":{"type":"boolean"},"rowCount":{"type":"integer"},"error":{"oneOf":[{"type":"string"},{"type":"null"}]}}},"EcosystemMetric":{"allOf":[{"$ref":"#/components/schemas/EcosystemMetricSummary"},{"type":"object","properties":{"source":{"const":"dune"},"columns":{"type":"array","items":{"type":"string"}},"rows":{"type":"array","items":{"type":"object"}},"truncated":{"type":"boolean"}}}]},"AskQuery":{"type":"object","properties":{"intent":{"type":"string","description":"What is asked (see shared/ask.ts).","enum":["latest_settlements","activity_count","largest_shield","largest_unshield","recent_flows","most_active_submitter","top_xan_holders","xan_exchange_flows","xan_price","xan_supply","xan_large_transfers","address_activity","governance","network_status","logics","proof"]},"chain":{"oneOf":[{"type":"integer","description":"A chain id."},{"type":"string","enum":["any","other"]}],"description":"`any`: no network named (or several); `other`: a network the explorer does not cover."},"window":{"oneOf":[{"type":"string","enum":["24h","7d","30d","all"]},{"type":"null"}]},"measure":{"oneOf":[{"type":"string","enum":["amount","count","newest"]},{"type":"null"}]}},"required":["intent","chain","window","measure"]},"AskAnswer":{"type":"object","properties":{"kind":{"type":"string","enum":["exact","query","suggest","none","unavailable"]},"term":{"type":"string","description":"kind exact: the identifier found (hash, address, transaction id or ENS name)."},"query":{"$ref":"#/components/schemas/AskQuery"},"confidence":{"type":"number","description":"The lowest of the intent, network and period readings, 0–1. Run at 0.7 and over, suggest from 0.5."},"candidates":{"type":"array","items":{"type":"object","properties":{"intent":{"type":"string"},"p":{"type":"number"}}},"description":"The three likeliest intents, likeliest first."},"model":{"type":"string","description":"The versioned model that answered."},"reason":{"type":"string","description":"kind none or unavailable: why.","enum":["not_a_question","injection","low_confidence","no_key","paused","cap","bad_answer"]},"cached":{"type":"boolean","description":"Served from the Worker's cache of earlier readings of the same text."}},"required":["kind"]},"TopCall":{"allOf":[{"$ref":"#/components/schemas/CallDTO"},{"type":"object","properties":{"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]},"decimals":{"oneOf":[{"type":"integer"},{"type":"null"}]},"usd":{"oneOf":[{"type":"number","description":"Today's USD value; null for a token without a price feed."},{"type":"null"}]}}}]},"TopCalls":{"type":"object","properties":{"chainId":{"oneOf":[{"type":"integer"},{"type":"null"}]},"direction":{"type":"string","enum":["shield","unshield"]},"window":{"type":"string","enum":["24h","7d","30d"]},"since":{"type":"integer","description":"Unix seconds the window starts at."},"computedAt":{"type":"integer"},"found":{"type":"integer","description":"Calls of this direction among the scanned rows."},"scanned":{"type":"integer"},"complete":{"type":"boolean"},"byValue":{"type":"array","items":{"$ref":"#/components/schemas/TopCall"},"description":"Across tokens by USD value, priced tokens only."},"byToken":{"type":"array","items":{"type":"object","properties":{"chainId":{"type":"integer"},"token":{"type":"string"},"symbol":{"oneOf":[{"type":"string"},{"type":"null"}]},"decimals":{"oneOf":[{"type":"integer"},{"type":"null"}]},"priced":{"type":"boolean"},"count":{"type":"integer"},"items":{"type":"array","items":{"$ref":"#/components/schemas/TopCall"}}}},"description":"Within each token by amount, exact."}},"required":["chainId","direction","window","since","computedAt","found","scanned","complete","byValue","byToken"]},"TopSubmitters":{"type":"object","properties":{"chainId":{"oneOf":[{"type":"integer"},{"type":"null"}]},"window":{"type":"string","enum":["24h","7d","30d"]},"since":{"type":"integer"},"computedAt":{"type":"integer"},"scanned":{"type":"integer"},"complete":{"type":"boolean"},"senders":{"type":"integer","description":"Distinct senders among the scanned settlements."},"items":{"type":"array","items":{"type":"object","properties":{"address":{"type":"string","pattern":"^0x[0-9a-f]{40}$"},"chains":{"type":"array","items":{"type":"integer"}},"settlements":{"type":"integer"},"share":{"type":"number","description":"Of the scanned settlements, 0–1."},"firstTs":{"type":"integer"},"lastTs":{"type":"integer"},"label":{"oneOf":[{"type":"object","properties":{"name":{"type":"string"},"entity":{"type":"string"},"kind":{"type":"string"}}},{"type":"null"}]}}}}},"required":["chainId","window","since","computedAt","scanned","complete","senders","items"]}}}}