Docs·Public Data API

Public Data API

Row fields

Every field of every row shape the API returns, with its type and which of them are decimal strings of base units.

Version
1.4
Updated
2026-09-27
Source
Public Data API library · Metric definitions v1.2

Row fields#

The fields below are the row shapes the list and single-resource endpoints return. A field typed wei or base units is a decimal string — see amounts. A timestamp field is an object { unix, iso }, where unix is a decimal string of seconds.

Launch#

A row of /api/v1/launches, and the body of /api/v1/launches/{token}
FieldTypeNote
token, curve, creator, creatorFeeRecipient, factoryaddressLower-case. The factory may be a superseded generation
launchIdinteger stringThe factory’s own sequence number
force, forceNamenumber, LIGHT | DARK | nullThe force’s registry id: 0 is LIGHT, 1 is DARK. forceName is null for any other id. Chosen at launch, permanent
lifecyclestringCURVE_TRADING, CURVE_COMPLETE, GRADUATED
devbooleanAn owner-created test launch. Excluded unless ?includeDev=true
graduationTargetWei, initialBuyWeiwei
initialTokensBoughttoken base units
earlyWalletCap{ status, bps, seconds, untilGraduation }The creator’s per-wallet cap: bps of total supply (50–250), seconds as an integer string, 4294967295 = until graduation. status: STORED | UNREADABLE | NOT_INDEXED; values null unless stored
crewSplitter, crewMembersaddress | null, number | nullNull on a launch made with no founding crew
promotedPlacement, promotionPaidWeinumber | null, wei | nullMarketing revenue. Never a protocol fee
launchedAt, block, txHashtimestamp, integer string, hash
statsobject | nullnull when no trade has been indexed for this launch — not a row of zeros
stats.trades, .buys, .sells, .uniqueTraders, .holdersDerivednumberholdersDerived is a log-derived count, not a census
raiseCurrencyobject: address, isNativeEth, symbol, decimalsThe unit of every amount on this launch. symbol and decimals are null when the index has no listing row for the currency
stats.curveVolumeWei, .buyVolumeWei, .sellVolumeWei, .tradeFeeWei, .netRaisedWeibase units of raiseCurrencyWei only when raiseCurrency.isNativeEth. Never add them across launches. netRaisedWei is the raised figure — never realEthReserve, which is zeroed at graduation
stats.curveVolumeValueobject: ethValueWei, usdValueE18, pricedTrades, unpricedTrades, ethUnpricedTrades, oldestPricedAt, newestPricedAt, valuationCurve volume at each trade’s event-time price (the CoinGecko price posted on chain and in force at its block). Trades with no price then are left out and counted. The VOLUME sort key
stats.netRaisedValueWeiwei (may be negative)netRaisedWei in ETH value, each trade at its own event-time price. The RAISED sort key
stats.lastFdvWei, .lastPokeAtwei | null, timestamp | nullnull until a pool metrics poke exists. An unmeasured valuation, not a valuation of zero

/api/v1/launches/{token} returns the same fields plus progressBps (derived from netRaisedWei / graduationTargetWei, capped at 10000, and forced to 10000 once graduated), progressNote, priorFactory, and graduation — which is null unless the launch has graduated, and otherwise carries ethWei, tokenWei, locker, positionId, sqrtPriceX96, block, txHash and at.

Trade#

A row of /api/v1/launches/{token}/trades
FieldTypeNote
idstringStable row id. The tie-breaker inside a cursor
sideBUY | SELL | REDEEMA REDEEM is a refund out of a curve that never graduated. Filter on side before summing ethWei
venue, venueKindaddress, string
trader, recipientaddress
ethWei, curveQuoteWei, tradeFeeWeiweiethWei − curveQuoteWei is the fee this trade actually paid, at the rate that applied at its block
tokenWeitoken base units
block, logIndex, txHash, atinteger string, number, hash, timestamp

Holders#

/api/v1/launches/{token}/holders
FieldTypeNote
censusobject | nullnull when no census has ever completed. That is unknown, not zero — censusUnavailableReason says what would fix it
census.holders, .countedSupplyWei, .candidatesnumber, wei, integer stringThe on-chain sweep, with its floor and exclusion list applied
census.countedAtBlock, .recordedAtBlock, .recordedAt, .txHashinteger string, integer string, timestamp, hashNo contract bounds a census’s age. The consumer decides what is too old, which is why both blocks are published
derived.holders, .totalSupplyWeinumber, wei | nullNon-zero balances in the indexer’s own projection. No floor, no exclusions, so it is always larger. Never mixed with the census
derived.top[]holder, balanceWei, transferCount, firstSeenBlock, lastChangeBlockLargest balance first, up to limit

Market#

A row of /api/v1/markets, and the body of /api/v1/markets/{id}
FieldTypeNote
marketIdbytes32The id, not the clone address. address is the clone
address, factory, oracle, creatoraddress (oracle may be null)
currency, currencyDecimalsaddress, number | nullThe zero address is native ETH. Every amount on the row is in this currency’s base units
questionstringFree text, written by the creator
family, metric, comparator, subject, thresholdWeinumber | null, address | null, integer string | nullThe encoded predicate. Names are resolved on the single-market route
statusOPEN | SETTLED | VOIDED | PAUSEDThree end states, not two. A settlement with one side empty is SETTLED, refunds everyone at par at zero fee, and is not a void
paused, featuredTierboolean, number | null
deadline, settlementWindowSeconds, createdAt, blocktimestamp, number | null, timestamp, integer string
feeBps, marketingBpsnumber | nullOne cut of the whole pot at settlement, not a per-stake fee. Zero in refund mode
feeRecipientaddress | nullPredictionMarketFactory itself, not a payout wallet. Treating it as one attributes every market’s fee to the factory
statsobject | nullnull when nothing has been staked yet
stats.totalYes, .totalNo, .openInterestbase units of the row’s currencyopenInterest is totalYes + totalNo, with the fee not deducted
stats.paidOut, .refunded, .protocolFee, .marketingFee, .transferShortfallbase units of the row’s currencytransferShortfall is requested minus credited, summed — non-zero only for a fee-on-transfer currency
stats.stakes, .stakers, .claimsnumber

/api/v1/markets/{id} adds a predicate object that resolves the encoded ids to names, and a settlement object that is null until the market settles.

Predicate ids, as published on /api/v1/markets/{id}
FieldValues
familyName0 lifecycle · 1 curve · 2 creator
metricName0 GRADUATED · 1 CURVE_COMPLETE · 2 NET_RAISED_WEI · 3 TOKENS_SOLD_BASE_UNITS · 4 PROGRESS_BPS · 5 CURVE_FDV_WEI · 6 CREATOR_LAUNCH_COUNT · 7 CREATOR_GRADUATED_COUNT · 8 CREATOR_TIER · 9 SUPPLY_BURNED · 10 CURVE_TRADE_FEES_WEI · 11 PROTOCOL_FEES_METERED_WEI
comparatorName0 EQ · 1 NEQ · 2 GT · 3 GTE · 4 LT · 5 LTE

An id with no name resolves to null rather than to a label, so a new metric appearing on chain shows up as an unnamed id rather than as a mislabelled one.

Stake and settlement#

A row of /api/v1/markets/{id}/stakes
FieldTypeNote
id, marketId, userstring, bytes32, address
side, sideNameboolean, YES | NOsideName is on the JSON rows; the CSV carries the name in side
amountRequested, amountCreditedbase units of the market’s currencySum amountCredited. It is the measured balance delta; the requested figure overstates a fee-on-transfer stake
totalYesAfter, totalNoAfterbase units of the market’s currencyThe running pools immediately after this stake
block, txHash, atinteger string, hash, timestamp
A row of /api/v1/settlements, and the settlement object on a market
FieldTypeNote
id, marketId, oracle, settlerstring, bytes32, address, addresssettler is attribution only — settlement is permissionless and unpaid
outcomebooleantrue is YES. The CSV renders it as YES / NO
observedValue, thresholdWeiinteger stringWhat the oracle read, against what the predicate required
deadline, settledAttimestamp
driftSecondssigned integer stringsettledAt − deadline. Negative is an early settle, which is legal where the predicate is already decided
windowSeconds, windowElapsedBpsnumber | null
block, txHashinteger string, hashThe log’s own block. The settlement event carries no block number of its own

Creators, KOLs, referrers, traders#

A row of /api/v1/creators
FieldTypeNote
creatoraddress
launches, graduationsnumberDerived from logs
netRaisedWei, volumeWei, creatorFeeWei, creatorFeeClaimedWeiweiDerived from logs. Launches that raise in native ETH only
volumeValueWei, unpricedTrades, unpricedReason, rankValueWeiwei | null, number | null, string | null, weiCurve volume across every raise currency, each ERC-20 trade at its event-time price; unpriced trades left out and counted. rankValueWei is the ranking key
registry.launches, .graduated, .netRaisedWei, .tier, .syncedAtnumber | null, wei | null, timestamp | nullThe registry’s own keeper-driven snapshot, which is what the chain gates a tier on. Never merged with the derived figures
firstBlock, lastBlockinteger string

/api/v1/creators/{address} adds registry.tierName: 0 Unranked, 1 Bronze, 2 Silver, 3 Gold, 4 Platinum, 5 Diamond. The tier is derived on every read and never granted.

A row of /api/v1/kols
FieldTypeNote
accountaddress
allocatedWei, claimedWeiweiETH sources only. allocatedWei is what the chain actually paid, summed from allocation logs. No contract holds a lifetime total
allocatedValueWei, unpricedAllocations, unpricedReason, rankValueWeiwei | null, number | null, string | null, weiEvery allocation, ETH and ERC-20 sources alike, each at its event-time price; unpriced ones left out and counted. rankValueWei is the ranking key
allocations, windows, sourcesnumber
registryFeesWeiwei | nullA different quantity from a different authority: an off-chain attestation, and the one the rank is computed from. The two are not reconciled on chain
rank, rankRoute, bannednumber | null, boolean | null
enrolled, xVerified, attestorboolean | null, address | nullAssertions, not chain-verified facts. The address that asserted them is published beside them — see boundaries
activeUntiltimestamp | nullPublished because the registry’s eligibility check never reads it, so eligibility is not time-bounded
A row of /api/v1/referrers and of /api/v1/traders
EndpointFields
/referrersreferrer · earnedWei (lifetime, from logs, ETH credits only) · earnedValueWei (ETH and ERC-20 credits at event-time price) · unpricedReceipts · unpricedReason · rankValueWei (the ranking key) · claimedWei · outstandingWei (earned minus claimed, JSON only) · attributedWei (the whole fee that passed through) · receipts · sources · firstBlock · lastBlock
/referrers?window=7d|30dThe same fields summed over data.window only, ranked by earnedValueWei (rankValueWei equals it). claimedWei and outstandingWei are lifetime-only and absent, listed in data.lifetimeOnlyFields. CSV rows add window, windowFromUnix, windowToUnix
/traderstrader · volumeWei · buyVolumeWei · sellVolumeWei · tradeFeePaidWei (all ETH launches only) · volumeValueWei (every raise currency at event-time price) · unpricedTrades · unpricedReason · rankValueWei (the ranking key) · trades · buys · sells · tokens · stakes · settlements · voids · firstBlock · lastBlock

Event-time values#

The valuation object, and the /stats, /stats/daily and /fees fields it describes
FieldTypeNote
valuation.basisETH_PLUS_ERC20_AT_EVENT_TIME | ETH_ONLY_INDEX_PREDATES_VALUESThe second means the serving index has no value columns yet: figures are ETH only
valuation.excludedEvents, valuation.scopenumber | null, stringERC-20 events left out for want of a price at their block. Never a zero for an unknown
/stats curveVolumeWei, buyVolumeWei, sellVolumeWei, tradeFeeWeiweiNative-ETH launches only
/stats curveVolumeValueWei, buyVolumeValueWei, sellVolumeValueWei, erc20Tradeswei, numberEvery raise currency at event-time price
/stats/daily curveVolumeValueWei, tradesUnpriced, stakedValueWei, stakesUnpriced, valueUnavailableReasonwei | null, number, wei | null, number, string | nullnull with a reason on a day written before the value columns existed. The day’s other …Wei fields are native ETH only
/fees erc20ByCurrency[]currency, symbol, decimals, tradeFee, creator, kol, referrer, toFeeConverter, launchFeeSweptERC-20 fee legs, per currency, in that currency’s base units. No ETH total is published for them