Skip to main content
GET https://api.filter.fun/season
Returns the active season’s phase, hour anchors, reservation/launch counts, and pool state.

Response shape

{
  "seasonId": 1,
  "phase": "trading",
  "phaseHour": 73,
  "launchWindowOpensAt": "2026-05-04T00:00:00Z",
  "launchWindowClosesAt": "2026-05-06T00:00:00Z",
  "nextCutAt": "2026-05-08T00:00:00Z",
  "settlementAt": "2026-05-11T00:00:00Z",
  "winnerSettledAt": null,
  "reservationCount": 8,
  "launchCount": 8,
  "activated": true,
  "filterFund": "12500000000000000000",
  "filterFundLiquidityReserve": "0",
  "championPool": "12500000000000000000",
  "polReserve": "0",
  "weightsVersion": "2026-05-04-v4-locked-int10k-formulas",
  "status": "ok",
  "asOfBlock": 18429733,
  "asOfTime": "2026-05-07T13:14:22Z"
}
FieldTypeNotes
seasonIdintegerMonotonic; increments on each settlement
phaseenumpre-launch · launch · trading · finals · settled · aborted
phaseHourintegerHours elapsed since the current phase began
launchWindowOpensAt / ClosesAtISO-8601Mon 00:00Z and Wed 00:00Z
nextCutAtISO-8601The next hour-96 cut boundary
settlementAtISO-8601Mon 00:00Z next week
winnerSettledAtISO-8601 | nullSet when the settlement publish path completes
reservationCountintegerSlots reserved in the current season (0–12)
launchCountintegerTokens actually deployed (0 until activation; equals reservationCount post-activation)
activatedbooleantrue once the 4-reservation threshold has been crossed
filterFundwei stringCurrent Filter Fund balance (gross losers pot accumulator)
filterFundLiquidityReservewei stringPermanent winner-LP reserve from prior settled seasons
championPoolwei stringLegacy alias for filterFund — same value, kept for back-compat
polReservewei stringLegacy alias for filterFundLiquidityReserve
weightsVersionstringActive HP weights/constants version tag
statusenumok · not-ready (see below)
asOfBlock / asOfTimeinteger / ISO-8601Indexer cursor at response time

Status conventions

When the indexer is warming up, lagging, or between seasons, the endpoint returns HTTP 200 with "status": "not-ready" rather than 404. Clients should branch on the status field, not on HTTP code.
{ "status": "not-ready", "reason": "indexer-warming", "retryAfterSec": 30 }
Common reasons:
ReasonMeaning
indexer-warmingCold-start; no snapshot rows yet
season-abortedLast season aborted (< 4 reservations); next opens next Monday
between-seasonsSettlement complete; next launch window not yet open

Caching + rate limiting

Responses are short-cached at the edge. Request and response carry:
HeaderDirectionMeaning
X-Cache: HIT | MISS | BYPASSresponseCache disposition
RateLimit-RemainingresponsePer-IP requests left in the current window
Retry-Afterresponse (on 429)Seconds to wait before retrying
To force a fresh read past the edge cache, send Cache-Control: no-cache on the request.

Worked example

curl -s https://api.filter.fun/season | jq '{phase, phaseHour, reservationCount, activated, filterFund}'
{
  "phase": "trading",
  "phaseHour": 73,
  "reservationCount": 8,
  "activated": true,
  "filterFund": "12500000000000000000"
}