Skip to main content
GET https://api.filter.fun/profile/0xWalletAddress
Returns a wallet’s history across filter.fun: tokens it created, rollover and bonus claims it’s made, badges it’s earned, and lifetime trade stats.

Response shape

{
  "address": "0xWalletAddress…",
  "createdTokens": [
    {
      "address": "0xa1b2…",
      "symbol": "TOKA",
      "seasonId": 1,
      "outcome": "filtered",
      "creatorRecipient": "0xRrrr…",
      "feesAccruedWei": "100000000000000000",
      "feesClaimedWei": "100000000000000000"
    }
  ],
  "claims": {
    "rolloverClaimsCount": 2,
    "rolloverClaimedWei": "750000000000000000",
    "bonusClaimsCount": 1,
    "bonusClaimedWei": "240000000000000000",
    "lastClaimAt": "2026-04-29T00:00:00Z"
  },
  "badges": [
    { "type": "WEEK_WINNER", "seasonId": 0, "earnedAt": "2026-04-21T00:00:00Z" },
    { "type": "FILTER_SURVIVOR", "seasonIds": [0, 1] }
  ],
  "stats": {
    "filtersSurvived": 2,
    "lifetimeTradeVolumeWei": "12500000000000000000",
    "tokensTraded": 17
  },
  "asOfBlock": 18429733,
  "asOfTime": "2026-05-07T13:14:22Z",
  "status": "ok"
}

Fields

FieldTypeNotes
createdTokensarrayTokens this wallet originally launched (one entry per token)
claims.rolloverClaimsCountintegerNumber of rollover Merkle claims completed
claims.rolloverClaimedWeiwei stringLifetime rollover ETH-equivalent claimed
claims.bonusClaimsCountintegerNumber of hold-bonus claims completed
claims.bonusClaimedWeiwei stringLifetime bonus claimed
badgesarraySee badge taxonomy below
stats.filtersSurvivedintegerTokens this wallet held that survived the cut
stats.lifetimeTradeVolumeWeiwei stringCumulative WETH-equivalent of all swaps signed by this wallet
stats.tokensTradedintegerDistinct token addresses traded

Badge taxonomy

BadgeTrigger
WEEK_WINNERWallet is the creator of a winning token in any past season
FILTER_SURVIVORWallet held at least one token across the cut into the survivor set
QUARTERLY_FINALISTReserved for the quarterly tournament (Phase 2)
QUARTERLY_CHAMPIONReserved for the quarterly tournament (Phase 2)
ANNUAL_FINALISTShips dormant; populated when annual tournaments activate
ANNUAL_CHAMPIONShips dormant; populated when annual tournaments activate
ANNUAL_* and QUARTERLY_* badges exist in the schema and the indexer returns the field, but they remain unpopulated through Phase 1.Holder-derived badges (FILTER_SURVIVOR, future quarterly/annual standings) depend on the indexer’s holderSnapshot surface. If a snapshot is stale at request time, the badge for in-flight holders may briefly lag the on-chain state.

Worked example

curl -s https://api.filter.fun/profile/0xWalletAddress | jq '{badges, stats, claims}'
{
  "badges": [
    { "type": "WEEK_WINNER", "seasonId": 0, "earnedAt": "2026-04-21T00:00:00Z" }
  ],
  "stats": {
    "filtersSurvived": 2,
    "lifetimeTradeVolumeWei": "12500000000000000000",
    "tokensTraded": 17
  },
  "claims": {
    "rolloverClaimsCount": 2,
    "rolloverClaimedWei": "750000000000000000",
    "bonusClaimsCount": 1,
    "bonusClaimedWei": "240000000000000000",
    "lastClaimAt": "2026-04-29T00:00:00Z"
  }
}

Notes

  • The endpoint is permissionless — any wallet can be queried.
  • Status conventions and rate-limiting follow the same pattern as /season: status: "ok" | "not-ready" plus RateLimit-Remaining / Retry-After headers.