{"openapi":"3.1.0","info":{"title":"Topaz Stats API","version":"0.1.0","description":"Public read-only analytics for Topaz DEX on BNB Chain. Snapshot pipeline runs every 15 minutes; most endpoints surface the latest snapshot, history endpoints return time-series.","contact":{"url":"https://www.topazdex.com"},"license":{"name":"MIT"}},"servers":[{"url":"https://www.topazdex.com","description":"Production"}],"tags":[{"name":"Protocol","description":"Protocol-wide rollups"},{"name":"Pools","description":"Per-pool stats and history"},{"name":"Gauges","description":"Gauge emissions, APR breakdown, votes"},{"name":"Tokens","description":"Token prices and history"},{"name":"Epochs","description":"Per-epoch summaries and details"},{"name":"Bribes","description":"Bribe deposit events and totals"},{"name":"Foundation","description":"Foundation governance transparency"},{"name":"veTOPAZ","description":"veTOPAZ supply and voting power"},{"name":"Live","description":"Endpoints that bypass the 15-min snapshot and read on-chain state on demand"},{"name":"System","description":"Health, config, discovery"}],"paths":{"/api/stats/protocol":{"get":{"summary":"Latest protocol snapshot","description":"Single most recent successful protocol-wide rollup: TVL, volume, fees, TOPAZ price, veTOPAZ aggregates.","tags":["Protocol"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/ProtocolSnapshot"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/protocol/history":{"get":{"summary":"Protocol history (snapshot-resolution)","description":"All successful 15-minute snapshots within the requested window. Chronological. Use for time-series charts.","tags":["Protocol"],"parameters":[{"name":"days","in":"query","required":false,"description":"Lookback window in days (1-365)","schema":{"type":"integer","minimum":1,"maximum":365,"default":30}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/ProtocolHistoryPoint"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/protocol/daily":{"get":{"summary":"Protocol daily rollups","description":"Daily volume/fees totals (one row per UTC day). Current UTC day is in-progress and marked partial.","tags":["Protocol"],"parameters":[{"name":"days","in":"query","required":false,"description":"Lookback window in days (1-365)","schema":{"type":"integer","minimum":1,"maximum":365,"default":30}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/ProtocolDailyPoint"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/pools":{"get":{"summary":"List pools","description":"Filtered, sorted list of pools from the latest snapshot. Includes both v2 (volatile/stable) and v3-cl pools.","tags":["Pools"],"parameters":[{"name":"sort","in":"query","required":false,"description":"Sort key","schema":{"type":"string","enum":["tvl","volume24h","fees24h","apr","gaugeApr"],"default":"tvl"}},{"name":"type","in":"query","required":false,"description":"Pool-type filter","schema":{"type":"string","enum":["v2","v3","all"],"default":"all"}},{"name":"limit","in":"query","required":false,"description":"Max items (1-500)","schema":{"type":"integer","minimum":1,"maximum":500,"default":50}},{"name":"pair","in":"query","required":false,"description":"Token-symbol pair, e.g. \"WBNB-USDT\"","schema":{"type":"string"}},{"name":"token","in":"query","required":false,"description":"Filter to pools containing this token (either side)","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"minTvl","in":"query","required":false,"description":"Drop pools below this USD TVL","schema":{"type":"number","minimum":0}},{"name":"incentivized","in":"query","required":false,"description":"Only pools with a live gauge emitting TOPAZ","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/PoolSnapshot"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/pools/{poolId}":{"get":{"summary":"Pool detail + history","description":"Current snapshot of a pool plus ~7 days of history, the associated gauge, and gauge APR history.","tags":["Pools"],"parameters":[{"name":"poolId","in":"path","required":true,"description":"Pool contract address","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/PoolDetailResponse"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/pools/{poolId}/bribes":{"get":{"summary":"Bribes deposited on a pool's gauge","description":"Event log of every bribe deposit routed to this pool's gauge, newest first.","tags":["Pools","Bribes"],"parameters":[{"name":"poolId","in":"path","required":true,"description":"Pool contract address","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"limit","in":"query","required":false,"description":"Max items (1-1000)","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"name":"epoch","in":"query","required":false,"description":"Filter to a single epoch start (Unix seconds)","schema":{"type":"integer"}},{"name":"foundationOnly","in":"query","required":false,"description":"Only show bribes funded by the Topaz foundation","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/FoundationBribeEvent"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/gauges":{"get":{"summary":"List gauges","description":"All gauges from the latest snapshot with token symbols joined from the pool.","tags":["Gauges"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/GaugeWithPool"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/gauges/{gaugeAddress}":{"get":{"summary":"Gauge detail + history","description":"Current snapshot plus historical APR breakdown (emission, fee, bribe, total) over time.","tags":["Gauges"],"parameters":[{"name":"gaugeAddress","in":"path","required":true,"description":"Gauge contract address","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/GaugeDetailResponse"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/gauges/{gaugeAddress}/bribes":{"get":{"summary":"Bribes on a specific gauge","description":"Event log of every bribe deposit routed to this gauge, newest first.","tags":["Gauges","Bribes"],"parameters":[{"name":"gaugeAddress","in":"path","required":true,"description":"Gauge contract address","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"limit","in":"query","required":false,"description":"Max items (1-1000)","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}},{"name":"epoch","in":"query","required":false,"description":"Filter to a single epoch start (Unix seconds)","schema":{"type":"integer"}},{"name":"foundationOnly","in":"query","required":false,"description":"Only show foundation-funded bribes","schema":{"type":"boolean"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/FoundationBribeEvent"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/gauges/{gaugeAddress}/kpis":{"get":{"summary":"Foundation KPI history for a gauge","description":"Per-epoch ROI / classification for foundation vote allocations to this gauge.","tags":["Gauges","Foundation"],"parameters":[{"name":"gaugeAddress","in":"path","required":true,"description":"Gauge contract address","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"epoch","in":"query","required":false,"description":"Filter to a single epoch start (Unix seconds)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Max items (1-1000)","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/FoundationKpiSnapshot"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/bribes":{"get":{"summary":"Bribe event log","description":"Newest-first event log across all gauges.","tags":["Bribes"],"parameters":[{"name":"pool","in":"query","required":false,"description":"Filter to a single pool","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"foundationOnly","in":"query","required":false,"description":"Only foundation-funded bribes","schema":{"type":"boolean"}},{"name":"epoch","in":"query","required":false,"description":"Filter to a single epoch start (Unix seconds)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Max items (1-1000)","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/FoundationBribeEvent"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/bribes/totals":{"get":{"summary":"Foundation bribe totals per epoch","description":"Aggregate foundation bribe spend per epoch (up to 52 epochs).","tags":["Bribes","Foundation"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/BribeTotal"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/votes":{"get":{"summary":"Foundation vote snapshots","description":"Per-veNFT vote allocations. Defaults to latest snapshot.","tags":["Foundation"],"parameters":[{"name":"epoch","in":"query","required":false,"description":"Filter to a single epoch start (Unix seconds)","schema":{"type":"integer"}},{"name":"venftId","in":"query","required":false,"description":"Filter to a single foundation veNFT","schema":{"type":"integer"}},{"name":"pool","in":"query","required":false,"description":"Filter to a single pool","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"latestOnly","in":"query","required":false,"description":"Use the latest snapshot only (default true)","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/FoundationVoteSnapshot"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/ve":{"get":{"summary":"veTOPAZ stats","description":"Total locked TOPAZ, total veTOPAZ power, foundation voting power.","tags":["veTOPAZ"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/VeStats"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/dynamic-fees":{"get":{"summary":"Pools with dynamic / custom fees","description":"v3-cl pools currently running dynamic or custom fee curves.","tags":["Pools"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/PoolSnapshot"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/live/dynamic-fees":{"get":{"summary":"Live dynamic / custom fee state (on-chain)","description":"Bypasses the 15-min snapshot for fast-moving fee data: reads pool.fee() and the dynamic/custom fee module config directly from BSC RPC. Short server-side cache (TOPAZ_LIVE_CACHE_SECONDS).","tags":["Pools","Live"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/LiveDynamicFeesResponse"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/foundation":{"get":{"summary":"Foundation transparency summary","description":"Wallet, owned veNFTs, active voting power, current-snapshot vote/pool counts, and lifetime + recent bribe spend.","tags":["Foundation"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/FoundationSummary"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/foundation/votes":{"get":{"summary":"Foundation vote allocations","description":"Per-veNFT vote weight directed to each gauge. Defaults to the latest snapshot.","tags":["Foundation"],"parameters":[{"name":"epoch","in":"query","required":false,"description":"Filter to a single epoch start (Unix seconds)","schema":{"type":"integer"}},{"name":"latestOnly","in":"query","required":false,"description":"Use the latest snapshot only (default true)","schema":{"type":"boolean","default":true}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/FoundationVoteSnapshot"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/foundation/bribes":{"get":{"summary":"Foundation-funded bribes","description":"Bribe deposit events funded by the foundation wallet, newest first.","tags":["Foundation","Bribes"],"parameters":[{"name":"pool","in":"query","required":false,"description":"Filter to a single pool","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"epoch","in":"query","required":false,"description":"Filter to a single epoch start (Unix seconds)","schema":{"type":"integer"}},{"name":"limit","in":"query","required":false,"description":"Max items (1-1000)","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/FoundationBribeEvent"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/foundation/kpis":{"get":{"summary":"Foundation vote ROI / KPI snapshots","description":"Per-epoch ROI estimates for foundation vote allocations: cost (bribes paid), emissions directed, TVL/volume/fee deltas, classification.","tags":["Foundation"],"parameters":[{"name":"epoch","in":"query","required":false,"description":"Filter to a single epoch start (Unix seconds)","schema":{"type":"integer"}},{"name":"pool","in":"query","required":false,"description":"Filter to a single pool","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"limit","in":"query","required":false,"description":"Max items (1-1000)","schema":{"type":"integer","minimum":1,"maximum":1000,"default":100}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/FoundationKpiSnapshot"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/config":{"get":{"summary":"API configuration","description":"Static config + last successful snapshot pointer: chain id, methodology version, snapshot cadence, foundation wallet/veNFT IDs, tracked pairs, deployed contract addresses.","tags":["System"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/ConfigResponse"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/health":{"get":{"summary":"Snapshot pipeline health","description":"Returns healthy=true when the most recent successful snapshot is within the staleness threshold (45 min).","tags":["System"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/HealthStatus"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/epochs":{"get":{"summary":"Recent epoch summaries","description":"Per-epoch totals: vote weight, bribes deposited, foundation share, top gauges. Newest first.","tags":["Epochs"],"parameters":[{"name":"limit","in":"query","required":false,"description":"Max items (1-52)","schema":{"type":"integer","minimum":1,"maximum":52,"default":12}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/EpochSummary"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/epochs/{epochStart}":{"get":{"summary":"Single epoch detail","description":"All foundation votes, bribes, and KPIs for a specific epoch.","tags":["Epochs"],"parameters":[{"name":"epochStart","in":"path","required":true,"description":"Epoch start as Unix seconds","schema":{"type":"integer","description":"Epoch start as Unix seconds"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/EpochDetail"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/markets/bribes":{"get":{"summary":"Current bribe markets","description":"Per-gauge bribe + fee totals for an epoch with dollar-per-vote derived from current vote weights. Defaults to the most recent epoch.","tags":["Bribes","Gauges","Epochs"],"parameters":[{"name":"epoch","in":"query","required":false,"description":"Filter to a single epoch start (Unix seconds)","schema":{"type":"integer"}},{"name":"minUsd","in":"query","required":false,"description":"Drop markets with total reward USD below this floor","schema":{"type":"number","minimum":0}},{"name":"limit","in":"query","required":false,"description":"Max items (1-500)","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/BribeMarketRow"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/gauges/{gaugeAddress}/rewards":{"get":{"summary":"Gauge reward token history","description":"Per-epoch breakdown of bribe and fee rewards (token-by-token, USD-priced) for a single gauge.","tags":["Gauges","Epochs"],"parameters":[{"name":"gaugeAddress","in":"path","required":true,"description":"Gauge contract address","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"limit","in":"query","required":false,"description":"Max items (1-200)","schema":{"type":"integer","minimum":1,"maximum":200,"default":12}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/GaugeEpochReward"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/pools/{poolId}/daily":{"get":{"summary":"Pool daily volume/fees/TVL history","description":"One row per UTC day with closed volume, fees, and end-of-day TVL. Lookback up to 365 days.","tags":["Pools"],"parameters":[{"name":"poolId","in":"path","required":true,"description":"Pool contract address","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},{"name":"days","in":"query","required":false,"description":"Lookback window in days (1-365)","schema":{"type":"integer","minimum":1,"maximum":365,"default":90}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/PoolDaily"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/tokens":{"get":{"summary":"List tokens","description":"All tokens priced in the latest snapshot, sorted by USD price.","tags":["Tokens"],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"type":"array","items":{"$ref":"#/components/schemas/TokenSnapshot"}},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}},"/api/stats/tokens/{address}":{"get":{"summary":"Token detail + price history","description":"Current snapshot plus historical price points (~7 days at 15-min cadence).","tags":["Tokens"],"parameters":[{"name":"address","in":"path","required":true,"description":"Token contract address","schema":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}}],"responses":{"200":{"description":"Success","content":{"application/json":{"schema":{"type":"object","required":["ok","data","meta"],"properties":{"ok":{"type":"boolean","enum":[true]},"data":{"$ref":"#/components/schemas/TokenDetailResponse"},"meta":{"$ref":"#/components/schemas/ApiMeta"}},"additionalProperties":false}}}},"400":{"description":"Invalid request","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}},"500":{"description":"Server error","content":{"application/json":{"schema":{"$ref":"#/components/schemas/ApiFailure"}}}}}}}},"components":{"schemas":{"ApiError":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"ApiMeta":{"type":"object","properties":{"chainId":{"type":"number","enum":[56]},"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"source":{"type":"array","items":{"type":"string"}},"cacheTtlSeconds":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["chainId","generatedAt","source"],"additionalProperties":false},"ApiFailure":{"type":"object","properties":{"ok":{"type":"boolean","enum":[false]},"error":{"type":"object","properties":{"code":{"type":"string"},"message":{"type":"string"}},"required":["code","message"],"additionalProperties":false},"meta":{"type":"object","properties":{"chainId":{"type":"number","enum":[56]},"generatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"source":{"type":"array","items":{"type":"string"}},"cacheTtlSeconds":{"type":"integer","minimum":0,"maximum":9007199254740991}},"required":["chainId","generatedAt","source"],"additionalProperties":false}},"required":["ok","error","meta"],"additionalProperties":false},"ProtocolSnapshot":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"tvlUsd":{"type":"string"},"v2TvlUsd":{"type":"string"},"v3TvlUsd":{"type":"string"},"volume24hUsd":{"type":"string"},"volume7dUsd":{"type":"string"},"fees24hUsd":{"type":"string"},"fees7dUsd":{"type":"string"},"cumulativeVolumeUsd":{"type":"string"},"cumulativeFeesUsd":{"type":"string"},"poolCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"activeGaugeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topazPriceUsd":{"type":"string"},"totalLockedTopaz":{"type":"string"},"totalVetopazPower":{"type":"string"},"currentEpochStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","snapshotId","snapshotAt","tvlUsd","v2TvlUsd","v3TvlUsd","volume24hUsd","volume7dUsd","fees24hUsd","fees7dUsd","cumulativeVolumeUsd","cumulativeFeesUsd","poolCount","activeGaugeCount","topazPriceUsd","totalLockedTopaz","totalVetopazPower","currentEpochStart","createdAt"],"additionalProperties":false},"ProtocolHistoryPoint":{"type":"object","properties":{"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"tvlUsd":{"type":"string"},"v2TvlUsd":{"type":"string"},"v3TvlUsd":{"type":"string"},"volume24hUsd":{"type":"string"},"fees24hUsd":{"type":"string"},"topazPriceUsd":{"type":"string"}},"required":["snapshotAt","tvlUsd","v2TvlUsd","v3TvlUsd","volume24hUsd","fees24hUsd","topazPriceUsd"],"additionalProperties":false},"ProtocolDailyPoint":{"type":"object","properties":{"dayStartUtc":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"volumeUsd":{"type":"string"},"feesUsd":{"type":"string"},"partial":{"type":"boolean"}},"required":["dayStartUtc","volumeUsd","feesUsd","partial"],"additionalProperties":false},"PoolSnapshot":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"poolAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolType":{"type":"string","enum":["v2-volatile","v2-stable","v3-cl"]},"token0Address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"token1Address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"token0Symbol":{"type":"string"},"token1Symbol":{"type":"string"},"tickSpacing":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"stable":{"nullable":true,"type":"boolean"},"fee":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"feeTier":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"customFee":{"type":"boolean"},"dynamicFee":{"type":"boolean"},"dynamicFeeCap":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"dynamicScalingFactor":{"nullable":true,"type":"string"},"tvlUsd":{"type":"string"},"volume24hUsd":{"type":"string"},"volume7dUsd":{"type":"string"},"fees24hUsd":{"type":"string"},"fees7dUsd":{"type":"string"},"feeApr":{"type":"string"},"gaugeApr":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","snapshotId","snapshotAt","poolAddress","poolType","token0Address","token1Address","token0Symbol","token1Symbol","tickSpacing","stable","fee","feeTier","customFee","dynamicFee","dynamicFeeCap","dynamicScalingFactor","tvlUsd","volume24hUsd","volume7dUsd","fees24hUsd","fees7dUsd","feeApr","gaugeApr","createdAt"],"additionalProperties":false},"GaugeSnapshot":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"gaugeAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolType":{"type":"string","enum":["v2-volatile","v2-stable","v3-cl"]},"alive":{"type":"boolean"},"stakedTvlUsd":{"type":"string"},"rewardRateTopaz":{"type":"string"},"emissionsAnnualizedUsd":{"type":"string"},"emissionApr":{"type":"string"},"feeApr":{"type":"string"},"bribeApr":{"nullable":true,"type":"string"},"totalApr":{"nullable":true,"type":"string"},"totalVoteWeight":{"type":"string"},"foundationVoteWeight":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","snapshotId","snapshotAt","gaugeAddress","poolAddress","poolType","alive","stakedTvlUsd","rewardRateTopaz","emissionsAnnualizedUsd","emissionApr","feeApr","bribeApr","totalApr","totalVoteWeight","foundationVoteWeight","createdAt"],"additionalProperties":false},"GaugeWithPool":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"gaugeAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolType":{"type":"string","enum":["v2-volatile","v2-stable","v3-cl"]},"alive":{"type":"boolean"},"stakedTvlUsd":{"type":"string"},"rewardRateTopaz":{"type":"string"},"emissionsAnnualizedUsd":{"type":"string"},"emissionApr":{"type":"string"},"feeApr":{"type":"string"},"bribeApr":{"nullable":true,"type":"string"},"totalApr":{"nullable":true,"type":"string"},"totalVoteWeight":{"type":"string"},"foundationVoteWeight":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"token0Symbol":{"nullable":true,"type":"string"},"token1Symbol":{"nullable":true,"type":"string"},"token0Address":{"nullable":true,"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"token1Address":{"nullable":true,"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"tvlUsd":{"nullable":true,"type":"string"}},"required":["id","snapshotId","snapshotAt","gaugeAddress","poolAddress","poolType","alive","stakedTvlUsd","rewardRateTopaz","emissionsAnnualizedUsd","emissionApr","feeApr","bribeApr","totalApr","totalVoteWeight","foundationVoteWeight","createdAt","token0Symbol","token1Symbol","token0Address","token1Address","tvlUsd"],"additionalProperties":false},"FoundationVoteSnapshot":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"epochStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"venftId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"gaugeAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"voteWeight":{"type":"string"},"votePercent":{"type":"string"},"totalGaugeVoteWeight":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","snapshotId","snapshotAt","epochStart","venftId","gaugeAddress","poolAddress","voteWeight","votePercent","totalGaugeVoteWeight","createdAt"],"additionalProperties":false},"FoundationBribeEvent":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"txHash":{"type":"string","pattern":"^0x[a-fA-F0-9]{64}$"},"logIndex":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"blockNumber":{"type":"string"},"timestamp":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"epochStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"fromAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"rewardContract":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"gaugeAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"tokenSymbol":{"type":"string"},"amountRaw":{"type":"string"},"amountDecimal":{"type":"string"},"amountUsd":{"type":"string"},"isFoundationFunded":{"type":"boolean"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","txHash","logIndex","blockNumber","timestamp","epochStart","fromAddress","rewardContract","gaugeAddress","poolAddress","tokenAddress","tokenSymbol","amountRaw","amountDecimal","amountUsd","isFoundationFunded","createdAt"],"additionalProperties":false},"BribeTotal":{"type":"object","properties":{"epochStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"totalUsd":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["epochStart","totalUsd","count"],"additionalProperties":false},"FoundationKpiSnapshot":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"epochStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"poolAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"gaugeAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"foundationVoteWeight":{"type":"string"},"foundationVoteShare":{"type":"string"},"externalVoteWeight":{"type":"string"},"bribeCostUsd":{"type":"string"},"emissionsDirectedUsd":{"type":"string"},"tvlBeforeUsd":{"nullable":true,"type":"string"},"tvlAfterUsd":{"nullable":true,"type":"string"},"tvlDeltaUsd":{"nullable":true,"type":"string"},"volumeBeforeUsd":{"nullable":true,"type":"string"},"volumeAfterUsd":{"nullable":true,"type":"string"},"volumeDeltaUsd":{"nullable":true,"type":"string"},"feesBeforeUsd":{"nullable":true,"type":"string"},"feesAfterUsd":{"nullable":true,"type":"string"},"feesDeltaUsd":{"nullable":true,"type":"string"},"costPerTvlDeltaUsd":{"nullable":true,"type":"string"},"costPerVolumeDeltaUsd":{"nullable":true,"type":"string"},"costPerFeeDeltaUsd":{"nullable":true,"type":"string"},"roiEstimate":{"nullable":true,"type":"string"},"classification":{"type":"string","enum":["scale","repeat","monitor","reduce","stop","insufficient_data"]},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","snapshotId","snapshotAt","epochStart","poolAddress","gaugeAddress","foundationVoteWeight","foundationVoteShare","externalVoteWeight","bribeCostUsd","emissionsDirectedUsd","tvlBeforeUsd","tvlAfterUsd","tvlDeltaUsd","volumeBeforeUsd","volumeAfterUsd","volumeDeltaUsd","feesBeforeUsd","feesAfterUsd","feesDeltaUsd","costPerTvlDeltaUsd","costPerVolumeDeltaUsd","costPerFeeDeltaUsd","roiEstimate","classification","createdAt"],"additionalProperties":false},"VeStats":{"type":"object","properties":{"totalLockedTopaz":{"type":"string"},"totalVetopazPower":{"type":"string"},"foundation":{"type":"object","properties":{"wallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"venftIds":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"activeVotingPower":{"type":"string"},"locks":{"type":"array","items":{"type":"object","properties":{"tokenId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"owner":{"type":"string"},"ownedByFoundation":{"type":"boolean"},"lockedAmount":{"type":"string"},"votingPower":{"type":"string"},"lockEnd":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"isPermanent":{"type":"boolean"}},"required":["tokenId","owner","ownedByFoundation","lockedAmount","votingPower","lockEnd","isPermanent"],"additionalProperties":false}}},"required":["wallet","venftIds","activeVotingPower"],"additionalProperties":false},"currentEpochStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"foundationWallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$","description":"Deprecated. Use foundation.wallet — kept for backward compatibility."},"foundationVeNftIds":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"description":"Deprecated. Use foundation.venftIds — kept for backward compatibility."},"foundationVotingPowerActive":{"type":"string","description":"Deprecated. Use foundation.activeVotingPower — kept for backward compatibility."}},"required":["totalLockedTopaz","totalVetopazPower","foundation","currentEpochStart","foundationWallet","foundationVeNftIds","foundationVotingPowerActive"],"additionalProperties":false},"HealthStatus":{"type":"object","properties":{"healthy":{"type":"boolean"},"stale":{"type":"boolean"},"lastSuccessfulAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"lastSuccessfulId":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lastAttemptStatus":{"nullable":true,"type":"string","enum":["running","success","partial","failed"]},"minutesSinceLastSuccess":{"nullable":true,"type":"number"},"staleThresholdMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["healthy","stale","lastSuccessfulAt","lastSuccessfulId","lastAttemptStatus","minutesSinceLastSuccess","staleThresholdMinutes"],"additionalProperties":false},"TokenSnapshot":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"address":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"symbol":{"type":"string"},"decimals":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"priceUsd":{"type":"string"},"derivedEth":{"nullable":true,"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","snapshotId","snapshotAt","address","symbol","decimals","priceUsd","derivedEth","createdAt"],"additionalProperties":false},"EpochSummary":{"type":"object","properties":{"epochStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"epochEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"isCurrent":{"type":"boolean"},"totalBribesUsd":{"type":"string"},"bribeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"foundationBribesUsd":{"type":"string"},"totalVoteWeight":{"type":"string"},"foundationVoteWeight":{"type":"string"},"foundationVoteShare":{"type":"string"},"gaugeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"topGauges":{"type":"array","items":{"type":"object","properties":{"gaugeAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"token0Symbol":{"nullable":true,"type":"string"},"token1Symbol":{"nullable":true,"type":"string"},"voteWeight":{"type":"string"},"bribesUsd":{"type":"string"}},"required":["gaugeAddress","poolAddress","token0Symbol","token1Symbol","voteWeight","bribesUsd"],"additionalProperties":false}}},"required":["epochStart","epochEnd","isCurrent","totalBribesUsd","bribeCount","foundationBribesUsd","totalVoteWeight","foundationVoteWeight","foundationVoteShare","gaugeCount","topGauges"],"additionalProperties":false},"EpochDetail":{"type":"object","properties":{"epochStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"epochEnd":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"isCurrent":{"type":"boolean"},"votes":{"type":"array","items":{"$ref":"#/components/schemas/FoundationVoteSnapshot"}},"bribes":{"type":"array","items":{"$ref":"#/components/schemas/FoundationBribeEvent"}},"kpis":{"type":"array","items":{"$ref":"#/components/schemas/FoundationKpiSnapshot"}},"totals":{"type":"object","properties":{"totalBribesUsd":{"type":"string"},"foundationBribesUsd":{"type":"string"},"bribeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"foundationVoteCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["totalBribesUsd","foundationBribesUsd","bribeCount","foundationVoteCount"],"additionalProperties":false}},"required":["epochStart","epochEnd","isCurrent","votes","bribes","kpis","totals"],"additionalProperties":false},"GaugeEpochReward":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"epochStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"gaugeAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"tokenSymbol":{"type":"string"},"kind":{"type":"string","enum":["bribe","fee"]},"amountRaw":{"type":"string"},"amountDecimal":{"type":"string"},"amountUsd":{"type":"string"},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","snapshotId","snapshotAt","epochStart","gaugeAddress","poolAddress","tokenAddress","tokenSymbol","kind","amountRaw","amountDecimal","amountUsd","createdAt"],"additionalProperties":false},"PoolDaily":{"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"poolAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolType":{"type":"string","enum":["v2-volatile","v2-stable","v3-cl"]},"dayStartUtc":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"volumeUsd":{"type":"string"},"feesUsd":{"type":"string"},"tvlUsdClose":{"type":"string"},"txCount":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"createdAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"updatedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","poolAddress","poolType","dayStartUtc","volumeUsd","feesUsd","tvlUsdClose","txCount","createdAt","updatedAt"],"additionalProperties":false},"BribeMarketRow":{"type":"object","properties":{"gaugeAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"poolType":{"nullable":true,"type":"string","enum":["v2-volatile","v2-stable","v3-cl"]},"token0Symbol":{"nullable":true,"type":"string"},"token1Symbol":{"nullable":true,"type":"string"},"epochStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"totalBribesUsd":{"type":"string"},"totalFeesUsd":{"type":"string"},"totalRewardUsd":{"type":"string"},"bribes":{"type":"array","items":{"type":"object","properties":{"tokenSymbol":{"type":"string"},"tokenAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"amountUsd":{"type":"string"}},"required":["tokenSymbol","tokenAddress","amountUsd"],"additionalProperties":false}},"voteWeight":{"type":"string"},"dollarPerVote":{"type":"string"}},"required":["gaugeAddress","poolAddress","poolType","token0Symbol","token1Symbol","epochStart","totalBribesUsd","totalFeesUsd","totalRewardUsd","bribes","voteWeight","dollarPerVote"],"additionalProperties":false},"FoundationSummary":{"type":"object","properties":{"wallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"veNftIds":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"votingPowerActive":{"type":"string"},"currentEpochStart":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"activeVoteCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"activePoolCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"lifetimeBribeUsd":{"type":"string"},"lifetimeBribeCount":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"recentBribeTotals":{"type":"array","items":{"type":"object","properties":{"epochStart":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"totalUsd":{"type":"string"},"count":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}},"required":["epochStart","totalUsd","count"],"additionalProperties":false}}},"required":["wallet","veNftIds","votingPowerActive","currentEpochStart","activeVoteCount","activePoolCount","lifetimeBribeUsd","lifetimeBribeCount","recentBribeTotals"],"additionalProperties":false},"LiveDynamicFeePool":{"type":"object","properties":{"poolAddress":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"token0Symbol":{"type":"string"},"token1Symbol":{"type":"string"},"tickSpacing":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotFee":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"liveFee":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"baseFee":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"maxFee":{"nullable":true,"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"scalingFactor":{"nullable":true,"type":"string"},"customFee":{"type":"boolean"},"dynamicFee":{"type":"boolean"},"error":{"type":"string"}},"required":["poolAddress","token0Symbol","token1Symbol","tickSpacing","snapshotFee","liveFee","baseFee","maxFee","scalingFactor","customFee","dynamicFee"],"additionalProperties":false},"LiveDynamicFeesResponse":{"type":"object","properties":{"fetchedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"snapshotAt":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"cacheTtlSeconds":{"type":"integer","minimum":0,"maximum":9007199254740991},"pools":{"type":"array","items":{"$ref":"#/components/schemas/LiveDynamicFeePool"}}},"required":["fetchedAt","snapshotAt","cacheTtlSeconds","pools"],"additionalProperties":false},"ConfigResponse":{"type":"object","properties":{"chainId":{"type":"number","enum":[56]},"methodologyVersion":{"type":"string"},"snapshotIntervalMinutes":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"foundation":{"type":"object","properties":{"wallet":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"veNftIds":{"type":"array","items":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991}}},"required":["wallet","veNftIds"],"additionalProperties":false},"trackedPairs":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string"},"priority":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"tokens":{"type":"array","items":{"type":"string"}}},"required":["key","priority","tokens"],"additionalProperties":false}},"competitors":{"type":"object","properties":{"available":{"type":"boolean"}},"required":["available"],"additionalProperties":false},"contracts":{"type":"object","additionalProperties":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"}},"lastSuccessfulSnapshot":{"nullable":true,"type":"object","properties":{"id":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"snapshotAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["id","snapshotAt"],"additionalProperties":false}},"required":["chainId","methodologyVersion","snapshotIntervalMinutes","foundation","trackedPairs","competitors","contracts","lastSuccessfulSnapshot"],"additionalProperties":false},"VeNftLock":{"type":"object","properties":{"tokenId":{"type":"integer","minimum":-9007199254740991,"maximum":9007199254740991},"owner":{"type":"string","pattern":"^0x[a-fA-F0-9]{40}$"},"ownedByFoundation":{"type":"boolean"},"lockedAmount":{"type":"string"},"votingPower":{"type":"string"},"lockEnd":{"nullable":true,"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"isPermanent":{"type":"boolean"}},"required":["tokenId","owner","ownedByFoundation","lockedAmount","votingPower","lockEnd","isPermanent"],"additionalProperties":false},"PoolDetailResponse":{"type":"object","properties":{"current":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/PoolSnapshot"}]},"history":{"type":"array","items":{"$ref":"#/components/schemas/PoolSnapshot"}},"gauge":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/GaugeSnapshot"}]},"gaugeHistory":{"type":"array","items":{"$ref":"#/components/schemas/GaugeSnapshot"}}},"required":["current","history","gauge","gaugeHistory"],"additionalProperties":false},"GaugeDetailResponse":{"type":"object","properties":{"current":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/GaugeSnapshot"}]},"history":{"type":"array","items":{"$ref":"#/components/schemas/GaugeSnapshot"}}},"required":["current","history"],"additionalProperties":false},"TokenDetailResponse":{"type":"object","properties":{"current":{"nullable":true,"allOf":[{"$ref":"#/components/schemas/TokenSnapshot"}]},"history":{"type":"array","items":{"$ref":"#/components/schemas/TokenSnapshot"}}},"required":["current","history"],"additionalProperties":false}}}}