Hasura Indexer
Kumbaya runs a public Hasura GraphQL endpoint - the layer you query - on top of an Envio indexer that ingests every Uniswap V3 event and every Kumbaya launchpad event on MegaETH and publishes it as queryable data.
Endpoint
https://ql.kumbaya.xyz/v1/graphql
Auth
None - public, read-only
Networks
MegaETH mainnet (chain 4326) and testnet (6343)
The indexer's source code is not public. You consume the GraphQL API directly. Schema introspection is enabled - point your IDE/codegen tools at the URL above to explore.
Entity catalogue
Core (V3) entities
Factory
Per-chain factory state (pool count, total volume)
Bundle
Per-chain ETH/USD price bundle (used to derive USD prices)
Token
Current token state - priceUSD, lastSwapTimestamp, totalValueLockedUSD, volumeUSD, derivedETH
Pool
Pool state. Includes firePool (boolean) and fireToken (relationship) for launchpad-originated pools, and poisonedPool (boolean) for invalid launchpad configs. Also feeProtocol0 and feeProtocol1 (0 or 2..10)
Tick
Per-tick liquidity bookkeeping
RawPosition
Pool-level liquidity position
UserPosition
NFT-level LP position (NonfungiblePositionManager-owned)
Transaction
Per-tx envelope for related events
Mint / Burn / Swap / Collect
Per-event records
Time-series aggregates
TokenMinuteData
1m
Token price/volume snapshot
TokenHourData
1h
Token snapshot
TokenDayData
1d
Token snapshot
PoolHourData / PoolDayData / PoolWeekData / PoolMonthData / PoolYearData
Hourly → yearly
Pool aggregates
UniswapHourData / UniswapDayData
Hourly / daily
Chain-wide totals
Launchpad-specific entities
FireToken
Per-launch state - see fields below. Includes graduation progress, market cap, fees collected, time-windowed buy/sell counts, velocity
FirePosition
Per-position record inside a bonding-curve pool
FireFeeClaim
Pre-grad fee-claim events (FireGraduator.claimFees)
FireSkim
Per-buy skim events (FireToken.Skimmed)
FireVestingRelease
On-token vesting unlocks (FireToken.releaseVested)
FuelDeposit / FuelGift / FuelWithdrawal / FuelBurn
Lifecycle of credits in FuelVault
FuelCreatorBucket
Current per-creator-per-token bucket state (liquid + vested + unlocked flag)
FireStreamNFT
The graduated-NFT custody record
FireStreamFeeDistribution / FireStreamBeneficiaryPayment
Post-grad fee distributions and per-recipient payouts
FireUser / FireUserParticipation
Per-user / per-user-per-token aggregates (tokens created, pools participated, total volume, realized PnL)
VestedUnlock
When a creator's pre-grad vested gifts unlocked at graduation
FireMigration
Position migration events
Notable FireToken fields
The time-windowed counters are exactly what powers the launchpad feed's "trending" sort and "heating up" sections.
ID conventions
Most entities use address-chainId composite IDs, e.g. 0xabc...-4326. Use that format anywhere you reference an entity by id.
Examples
Latest token swaps
24h price change
targetPeriodStart = Math.floor((now - 86400) / 3600) * 3600.
Newest launches
"Heating up" - recent activity buckets
Calling from JavaScript
Plain fetch works:
Codegen-friendly SDKs (graphql-request, urql, apollo) work without modification.
Live subscriptions
Hasura supports GraphQL subscriptions over WebSocket. Useful for agents watching new launches, swaps, or graduation events:
When to use the indexer vs. the Exchange API
Use the indexer for
Use the Exchange API for
Custom analytics, joins, aggregations
Curated UI data: pool list, trending tokens, headline stats
Historical time-series at minute or hour resolution
Quote pricing for a swap
Live subscriptions on raw events
Anything with caching / rate-limit-friendly defaults
Anything outside the curated REST endpoints
The hosted /api/v1/quote endpoint when you don't want to run the SOR
Notes
Hasura's nested
whereclauses become SQL JOINs - feel free to filter on nested fields.*_aggregatequeries are available forcount,sum,avg, etc.Pagination: prefer cursor-style on
timestamporidrather than largeoffsetvalues.The
Pool.poisonedPoolflag marks launchpad-originated pools that were launched with non-canonical params and aren't price-tracked. Filter bypoisonedPool: { _eq: false }if you only want healthy pools.
Last updated