{"openapi":"3.1.0","info":{"title":"UserTrack Public API","version":"1.0.0","description":"Read-only growth data for every public SaaS on UserTrack: profiles, metrics, history, rank + benchmark history, milestones, leaderboards, discovery, datasets (JSON / CSV) and founder profiles, plus the API key owner's private watchlist. Free. Anonymous: 60 req/min per IP. With an API key (ut_api_…): 1,000 req/day.","contact":{"url":"https://usertrack-production.up.railway.app/developers"}},"servers":[{"url":"https://usertrack-production.up.railway.app/api/v1"}],"security":[{},{"ApiKey":[]}],"tags":[{"name":"saas"},{"name":"leaderboard"},{"name":"discover"},{"name":"users"},{"name":"datasets","description":"Public leaderboard projections as JSON or CSV. Capped at 100 rows per window; CSV shares the JSON rate-limit buckets."},{"name":"following","description":"The API key owner's private watchlist. Requires a key; never public, never cached."}],"paths":{"/saas/{slug}":{"get":{"tags":["saas"],"operationId":"getSaas","summary":"Public SaaS profile with metrics, ranks and milestones","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"usertrack"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Saas"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/saas/{slug}/metrics":{"get":{"tags":["saas"],"operationId":"getSaasMetrics","summary":"Compact current growth metrics","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"usertrack"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Metrics"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/saas/{slug}/history":{"get":{"tags":["saas"],"operationId":"getSaasHistory","summary":"Historical growth series with storage-aware resolution and explicit gaps","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"usertrack"},{"name":"range","in":"query","schema":{"type":"string","enum":["24h","7d","30d","90d","1y","all"],"default":"30d"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/History"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"400":{"description":"Invalid range","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/saas/{slug}/rank-history":{"get":{"tags":["saas"],"operationId":"getSaasRankHistory","summary":"Stored daily leaderboard / trending positions (append-only), oldest first","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"usertrack"},{"name":"kind","in":"query","schema":{"type":"string","enum":["leaderboard","trending"],"default":"leaderboard"}},{"name":"window","in":"query","schema":{"type":"string","enum":["24h","7d","30d"]},"description":"Default 30d for leaderboard, 7d for trending"},{"name":"days","in":"query","schema":{"type":"integer","minimum":7,"maximum":730,"default":90}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/RankHistory"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/saas/{slug}/benchmark-history":{"get":{"tags":["saas"],"operationId":"getSaasBenchmarkHistory","summary":"Weekly benchmark standings (top-quarter positions only; 404 when the owner does not publish benchmarks)","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"usertrack"},{"name":"weeks","in":"query","schema":{"type":"integer","minimum":4,"maximum":52,"default":26}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/BenchmarkHistory"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"400":{"description":"Invalid weeks","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown slug, or benchmark history not published","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/saas/{slug}/milestones":{"get":{"tags":["saas"],"operationId":"getSaasMilestones","summary":"Public milestones","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"usertrack"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Milestones"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/saas/{slug}/funnel":{"get":{"tags":["saas"],"operationId":"getSaasFunnel","summary":"Lifecycle funnel (reached → signed_up → activated → trial → converted): only published stages, strategic rates, per-stage provenance","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"usertrack"},{"name":"timeframe","in":"query","schema":{"type":"string","enum":["7d","30d","90d"],"default":"30d"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Funnel"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"400":{"description":"Invalid timeframe","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/saas/{slug}/conversion":{"get":{"tags":["saas"],"operationId":"getSaasConversion","summary":"Conversion metrics (converted users, Signup/Activated/Trial → Converted) when published; never amounts","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"usertrack"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Conversion"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/saas/{slug}/engagement":{"get":{"tags":["saas"],"operationId":"getSaasEngagement","summary":"Engagement metrics (activated users, activation rate, retention) when published","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"usertrack"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Engagement"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/saas/{slug}/cohorts":{"get":{"tags":["saas"],"operationId":"getSaasCohorts","summary":"Monthly signup cohorts traced through the lifecycle (identity-matched), with identity quality","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"usertrack"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Cohorts"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/saas/{slug}/benchmarks":{"get":{"tags":["saas"],"operationId":"getSaasBenchmarks","summary":"Public benchmark statement (top-quarter positions only)","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"usertrack"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/BenchmarkHighlight"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/discover":{"get":{"tags":["discover"],"operationId":"getDiscover","summary":"Discovery sections (trending, fastest today / week / month, new & rising, recently verified, biggest movers, hidden gems, mobile) and the activity feed","parameters":[{"name":"category","in":"query","schema":{"type":"string"},"description":"Narrows every section and the feed to one category"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":30},"description":"Feed length"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Discover"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/following":{"get":{"tags":["following"],"operationId":"getFollowing","summary":"The API key owner's watchlist: followed products (+ every public project of followed founders) with 7-day movement, followed founders and the personal feed","security":[{"ApiKey":[]}],"parameters":[{"name":"days","in":"query","schema":{"type":"integer","minimum":1,"maximum":90,"default":30},"description":"Feed window"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":200,"default":60},"description":"Feed length"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Following"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Missing, invalid, revoked or expired API key (a key is required)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/datasets/{dataset}":{"get":{"tags":["datasets"],"operationId":"getDataset","summary":"A named dataset (trending, fastest-growing, new-and-rising, hidden-gems, movers) as JSON or CSV","parameters":[{"name":"dataset","in":"path","required":true,"schema":{"type":"string","enum":["trending","fastest-growing","new-and-rising","hidden-gems","movers"]}},{"name":"window","in":"query","schema":{"type":"string","enum":["24h","7d","30d"]},"description":"Defaults per dataset (trending / new-and-rising / hidden-gems: 7d, fastest-growing / movers / categories: 30d)"},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"platform","in":"query","schema":{"type":"string","enum":["web","mobile","hybrid"]},"description":"Only web, mobile or hybrid products"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque; pass meta.nextCursor (or the X-Next-Cursor header of a CSV page) to continue. Datasets are capped at 100 rows per window."},{"name":"format","in":"query","schema":{"type":"string","enum":["json","csv"],"default":"json"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Dataset"},"meta":{"$ref":"#/components/schemas/DatasetMeta"}}}},"text/csv":{"schema":{"$ref":"#/components/schemas/DatasetCsv"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}},"Content-Disposition":{"schema":{"type":"string"},"description":"CSV only: attachment; filename=\"usertrack-<dataset>-<yyyy-mm-dd>.csv\""},"X-Next-Cursor":{"schema":{"type":"string"},"description":"CSV only: cursor of the next page when more rows exist"}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown dataset","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/datasets/categories/{slug}":{"get":{"tags":["datasets"],"operationId":"getCategoryDataset","summary":"One category as a dataset (board most-new by default)","parameters":[{"name":"slug","in":"path","required":true,"schema":{"type":"string"},"example":"developer-tools"},{"name":"board","in":"query","schema":{"type":"string","enum":["trending","fastest","most-users","most-new","most-activated","activation-rate","new-rising","hidden-gems","movers","best-conversion","best-trial-conversion","converted-growth"],"default":"most-new"}},{"name":"window","in":"query","schema":{"type":"string","enum":["24h","7d","30d"]},"description":"Defaults per dataset (trending / new-and-rising / hidden-gems: 7d, fastest-growing / movers / categories: 30d)"},{"name":"platform","in":"query","schema":{"type":"string","enum":["web","mobile","hybrid"]},"description":"Only web, mobile or hybrid products"},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}},{"name":"cursor","in":"query","schema":{"type":"string"},"description":"Opaque; pass meta.nextCursor (or the X-Next-Cursor header of a CSV page) to continue. Datasets are capped at 100 rows per window."},{"name":"format","in":"query","schema":{"type":"string","enum":["json","csv"],"default":"json"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Dataset"},"meta":{"$ref":"#/components/schemas/DatasetMeta"}}}},"text/csv":{"schema":{"$ref":"#/components/schemas/DatasetCsv"}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}},"Content-Disposition":{"schema":{"type":"string"},"description":"CSV only: attachment; filename=\"usertrack-<dataset>-<yyyy-mm-dd>.csv\""},"X-Next-Cursor":{"schema":{"type":"string"},"description":"CSV only: cursor of the next page when more rows exist"}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Unknown category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/datasets/rankings/history":{"get":{"tags":["datasets"],"operationId":"getRankingsHistory","summary":"Frozen monthly rankings: the index of periods without `period`, one ranking (JSON or CSV) with it","parameters":[{"name":"period","in":"query","schema":{"type":"string","pattern":"^\\d{4}-\\d{2}$"},"example":"2026-08"},{"name":"board","in":"query","schema":{"type":"string","enum":["trending","fastest","most-users","most-new","most-activated","activation-rate","new-rising","hidden-gems","movers","best-conversion","best-trial-conversion","converted-growth"],"default":"most-new"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"format","in":"query","schema":{"type":"string","enum":["json","csv"],"default":"json"},"description":"CSV needs a period"}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"oneOf":[{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/RankingPeriods"},"meta":{"$ref":"#/components/schemas/Meta"}}},{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/RankingSnapshot"},"meta":{"$ref":"#/components/schemas/Meta"}}}]}},"text/csv":{"schema":{"$ref":"#/components/schemas/DatasetCsv"}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"No frozen ranking for that period / board / category","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/compare":{"get":{"tags":["discover"],"operationId":"compare","summary":"Compare 2–4 products: absolute and indexed daily series","parameters":[{"name":"s","in":"query","required":true,"schema":{"type":"string"},"example":"acme,globex"},{"name":"days","in":"query","schema":{"type":"string","enum":["7","30","90","365","all"],"default":"30"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Compare"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/leaderboard":{"get":{"tags":["leaderboard"],"operationId":"getLeaderboard","summary":"Any leaderboard board with filters","parameters":[{"name":"board","in":"query","schema":{"type":"string","enum":["trending","fastest","most-users","most-new","most-activated","activation-rate","new-rising","hidden-gems","movers","best-conversion","best-trial-conversion","converted-growth"],"default":"most-new"}},{"name":"window","in":"query","schema":{"type":"string","enum":["24h","7d","30d"]}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"size","in":"query","schema":{"type":"string","enum":["0-100","100-1k","1k-10k","10k-100k","100k+"]}},{"name":"platform","in":"query","schema":{"type":"string","enum":["web","mobile","hybrid"]},"description":"Only web, mobile or hybrid products"},{"name":"verified","in":"query","schema":{"type":"boolean","default":true}},{"name":"limit","in":"query","schema":{"type":"integer","minimum":1,"maximum":100,"default":50}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Leaderboard"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"400":{"description":"Invalid parameter","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/trending":{"get":{"tags":["leaderboard"],"operationId":"getTrending","summary":"Alias for /leaderboard?board=trending","parameters":[{"name":"window","in":"query","schema":{"type":"string","enum":["24h","7d","30d"],"default":"7d"}},{"name":"category","in":"query","schema":{"type":"string"}},{"name":"platform","in":"query","schema":{"type":"string","enum":["web","mobile","hybrid"]},"description":"Only web, mobile or hybrid products"},{"name":"limit","in":"query","schema":{"type":"integer","default":50}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Leaderboard"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/categories":{"get":{"tags":["leaderboard"],"operationId":"getCategories","summary":"Categories with counts","responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Categories"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/users/{username}":{"get":{"tags":["users"],"operationId":"getUser","summary":"Public founder profile, founder-level aggregates and public SaaS projects","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/Profile"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}},"/users/{username}/history":{"get":{"tags":["users"],"operationId":"getUserHistory","summary":"Aggregate user growth across the founder's public projects (daily, forward-filled per project)","parameters":[{"name":"username","in":"path","required":true,"schema":{"type":"string"}},{"name":"range","in":"query","schema":{"type":"string","enum":["7d","30d","90d","1y","all"],"default":"30d"}}],"responses":{"200":{"description":"OK","content":{"application/json":{"schema":{"type":"object","required":["data","meta"],"properties":{"data":{"$ref":"#/components/schemas/FounderHistory"},"meta":{"$ref":"#/components/schemas/Meta"}}}}},"headers":{"X-RateLimit-Limit":{"schema":{"type":"integer"}},"X-RateLimit-Remaining":{"schema":{"type":"integer"}},"X-RateLimit-Window":{"schema":{"type":"string","enum":["minute","day"]}}}},"400":{"description":"Invalid range","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"401":{"description":"Invalid, revoked or expired API key","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"404":{"description":"Not found","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limited (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}}}}},"components":{"securitySchemes":{"ApiKey":{"type":"http","scheme":"bearer","bearerFormat":"ut_api_…","description":"Optional. Create keys at https://usertrack-production.up.railway.app/app/developer. Raises the limit to 1000 requests/day (burst 120/min)."}},"schemas":{"Meta":{"type":"object","properties":{"version":{"type":"string","const":"v1"},"generatedAt":{"type":"string","format":"date-time"}}},"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string","enum":["bad_request","unauthorized","revoked","expired","forbidden","not_found","rate_limited","internal"]},"message":{"type":"string"}}}}},"Trust":{"type":"object","properties":{"level":{"type":"string","enum":["verified","unverified","pending"]},"label":{"type":"string"},"score":{"type":"number"}}},"Saas":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"description":{"type":"string"},"websiteUrl":{"type":"string"},"logoUrl":{"type":"string"},"category":{"type":"string"},"tags":{"type":"array","items":{"type":"string"}},"demo":{"type":"boolean"},"projectType":{"type":"string","enum":["web","mobile","hybrid"]},"stores":{"type":"object","properties":{"appStore":{"type":"string"},"googlePlay":{"type":"string"}}},"trust":{"$ref":"#/components/schemas/Trust"},"metrics":{"type":"object","properties":{"totalUsers":{"type":"integer"},"newUsers24h":{"type":"integer"},"newUsers7d":{"type":"integer"},"newUsers30d":{"type":"integer"},"growth7dPct":{"type":"number"},"growth30dPct":{"type":"number"},"activated":{"type":"object"},"retention":{"type":"object"},"traffic":{"type":"object"},"conversion":{"$ref":"#/components/schemas/ConversionMetrics"},"revenue":{"type":"object","deprecated":true,"description":"Alias of conversion.convertedUsers as payingUsers; no amounts"}}},"identityQuality":{"$ref":"#/components/schemas/IdentityQuality"},"ranks":{"type":"object","description":"previous* = position at the previous rerank; *7dAgo / *Delta7d = stored position 7 UTC days ago and the climb since (positive = up); bestTrending = best 7-day trending position ever","properties":{"leaderboard":{"type":"integer"},"previousLeaderboard":{"type":"integer"},"leaderboard7dAgo":{"type":"integer"},"leaderboardDelta7d":{"type":"integer"},"trending":{"type":"integer"},"previousTrending":{"type":"integer"},"trending7dAgo":{"type":"integer"},"trendingDelta7d":{"type":"integer"},"bestTrending":{"type":"integer"},"trendingScore7d":{"type":"number"}}},"followers":{"type":"integer"},"anonymous":{"type":"boolean","description":"Anonymous mode: owner, cofounders, logoUrl, websiteUrl and stores are omitted"},"cofounders":{"type":"array","items":{"type":"object","properties":{"name":{"type":"string"},"x":{"type":"string"},"github":{"type":"string"}}}},"markets":{"type":"array","items":{"type":"string"}},"techStack":{"type":"array","items":{"type":"string"},"description":"Slugs from the curated catalog (src/lib/tech-stack.ts) plus free-text entries"},"marketingChannels":{"type":"array","items":{"type":"string"}},"company":{"type":"object","properties":{"country":{"type":"string","description":"ISO 3166-1 alpha-2"},"funding":{"type":"string","enum":["bootstrapped","vc"]},"teamSize":{"type":"string","enum":["1","2-5","6-10","11-50","50+"]}}},"about":{"type":"object","description":"Descriptive text only — never revenue","properties":{"valueProposition":{"type":"string"},"problemSolved":{"type":"string"},"audience":{"type":"string"},"pricingSummary":{"type":"string"},"additionalInfo":{"type":"string"}}},"owner":{"type":"object","description":"Absent in anonymous mode","properties":{"username":{"type":"string"},"displayName":{"type":"string"},"xFollowers":{"type":"integer","nullable":true,"description":"X follower count of the founder's connected account"}}},"foundedAt":{"type":"string","format":"date-time","description":"Founding month entered by the founder, when present"},"timestamps":{"type":"object","properties":{"firstSnapshotAt":{"type":"string","format":"date-time"},"lastSyncedAt":{"type":"string","format":"date-time"}}},"urls":{"type":"object","properties":{"page":{"type":"string"},"badge":{"type":"string"}}},"milestones":{"type":"array","items":{"$ref":"#/components/schemas/Milestone"}}}},"Metrics":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"verification":{"type":"string","enum":["verified","unverified","pending"]},"metrics":{"type":"object","properties":{"totalUsers":{"type":"integer"},"newUsers24h":{"type":"integer"},"newUsers7d":{"type":"integer"},"newUsers30d":{"type":"integer"},"growth7dPercentage":{"type":"number"},"growth30dPercentage":{"type":"number"},"activatedUsers":{"type":"integer"},"activationRatePercentage":{"type":"number"},"trendingRank":{"type":"integer"},"overallRank":{"type":"integer"}}},"updatedAt":{"type":"string","format":"date-time"},"urls":{"type":"object"}}},"Movement":{"type":"object","nullable":true,"properties":{"kind":{"type":"string","enum":["up","down","same","new"]},"delta":{"type":"integer"}}},"History":{"type":"object","properties":{"range":{"type":"string","enum":["24h","7d","30d","90d","1y","all"]},"resolution":{"type":"string","enum":["raw","day","week","month"],"description":"What one point is: a sync snapshot (~4h), a UTC day, an ISO week or a month"},"points":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","format":"date-time"},"totalUsers":{"type":"integer"},"newUsers":{"type":"integer"},"activatedUsers":{"type":"integer"},"visitors":{"type":"integer"},"convertedUsers":{"type":"integer"}}}},"gaps":{"type":"array","description":"Stretches without stored rows; nothing is interpolated","items":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"},"days":{"type":"integer"}}}}}},"RankHistory":{"type":"object","properties":{"slug":{"type":"string"},"kind":{"type":"string","enum":["leaderboard","trending"]},"window":{"type":"string","enum":["24h","7d","30d"]},"current":{"type":"integer"},"best":{"type":"integer"},"rank7dAgo":{"type":"integer"},"movement7d":{"$ref":"#/components/schemas/Movement"},"points":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string","example":"2026-09-01"},"rank":{"type":"integer"},"score":{"type":"number","description":"Trending score, trending kind only"}}}}}},"BenchmarkHistory":{"type":"object","properties":{"slug":{"type":"string"},"weeks":{"type":"array","items":{"type":"object","properties":{"week":{"type":"string","example":"2026-W36"},"day":{"type":"string"},"computedAt":{"type":"string","format":"date-time"},"standings":{"type":"array","items":{"type":"object","properties":{"cohort":{"type":"string"},"metric":{"type":"string"},"metricLabel":{"type":"string"},"percentile":{"type":"integer","minimum":75,"maximum":95},"band":{"type":"string","nullable":true},"sampleSize":{"type":"integer"}}}}}}}}},"Following":{"type":"object","properties":{"days":{"type":"integer"},"saas":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Saas"},{"type":"object","properties":{"via":{"type":"string","enum":["direct","founder"]},"followed":{"type":"boolean"},"rankMovement7d":{"$ref":"#/components/schemas/Movement"},"trendingMovement7d":{"$ref":"#/components/schemas/Movement"}}}]}},"founders":{"type":"array","items":{"type":"object","properties":{"username":{"type":"string"},"displayName":{"type":"string"},"avatarUrl":{"type":"string"},"followers":{"type":"integer"},"urls":{"type":"object"}}}},"feed":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/FeedItem"},{"type":"object","properties":{"via":{"type":"string","enum":["direct","founder"]},"founder":{"type":"object"}}}]}}}},"DatasetRow":{"type":"object","properties":{"position":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"category":{"type":"string"},"projectType":{"type":"string","enum":["web","mobile","hybrid"]},"totalUsers":{"type":"integer"},"newUsers24h":{"type":"integer"},"newUsers7d":{"type":"integer"},"newUsers30d":{"type":"integer"},"growth7dPct":{"type":"number"},"growth30dPct":{"type":"number"},"activationRatePct":{"type":"number"},"trendingRank":{"type":"integer"},"trendingScore7d":{"type":"number"},"rank":{"type":"integer"},"rank7dAgo":{"type":"integer"},"rankDelta7d":{"type":"integer"},"trust":{"type":"string","enum":["verified","unverified","pending"]},"verified":{"type":"boolean"},"lastSyncedAt":{"type":"string","format":"date-time"},"url":{"type":"string"}}},"Dataset":{"type":"array","items":{"$ref":"#/components/schemas/DatasetRow"}},"DatasetCsv":{"type":"string","description":"RFC 4180 CSV, UTF-8, CRLF, header row: position,slug,name,category,projectType,totalUsers,newUsers24h,newUsers7d,newUsers30d,growth7dPct,growth30dPct,activationRatePct,trendingRank,trendingScore7d,rank,rank7dAgo,rankDelta7d,trust,verified,lastSyncedAt,url"},"DatasetMeta":{"allOf":[{"$ref":"#/components/schemas/Meta"},{"type":"object","properties":{"dataset":{"type":"string"},"board":{"type":"string","enum":["trending","fastest","most-users","most-new","most-activated","activation-rate","new-rising","hidden-gems","movers","best-conversion","best-trial-conversion","converted-growth"]},"window":{"type":"string","enum":["24h","7d","30d"]},"category":{"type":"string"},"platform":{"type":"string","enum":["web","mobile","hybrid"]},"count":{"type":"integer"},"total":{"type":"integer","description":"Rows in the capped window (≤ 100)"},"nextCursor":{"type":"string"},"updatedAt":{"type":"string","format":"date-time","nullable":true},"methodology":{"type":"string","description":"URL of the page section that explains the ranking"},"maxRows":{"type":"integer","const":100}}}]},"RankingPeriods":{"type":"array","items":{"type":"object","properties":{"period":{"type":"string","example":"2026-08"},"board":{"type":"string"},"category":{"type":"string","nullable":true},"sampleSize":{"type":"integer"},"computedAt":{"type":"string","format":"date-time"},"url":{"type":"string"}}}},"RankingSnapshot":{"type":"array","description":"Frozen ranking rows for one period / board / category (meta carries period, board, category, sampleSize, computedAt, page)","items":{"type":"object","properties":{"rank":{"type":"integer"},"slug":{"type":"string"},"name":{"type":"string"},"category":{"type":"string"},"value":{"type":"number","description":"The board's sort value at freeze time"},"totalUsers":{"type":"integer"},"newUsers30d":{"type":"integer"},"growth30dPct":{"type":"number"},"trust":{"type":"string"},"verified":{"type":"boolean"},"logoUrl":{"type":"string"},"url":{"type":"string"}}}},"Milestone":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string"},"title":{"type":"string"},"copy":{"type":"string"},"value":{"type":"number"},"achievedAt":{"type":"string","format":"date-time"}}},"Milestones":{"type":"array","items":{"$ref":"#/components/schemas/Milestone"}},"Leaderboard":{"type":"object","properties":{"board":{"type":"string","enum":["trending","fastest","most-users","most-new","most-activated","activation-rate","new-rising","hidden-gems","movers","best-conversion","best-trial-conversion","converted-growth"]},"window":{"type":"string","enum":["24h","7d","30d"]},"platform":{"type":"string","enum":["web","mobile","hybrid"]},"rows":{"type":"array","items":{"allOf":[{"type":"object","properties":{"position":{"type":"integer"},"movement":{"$ref":"#/components/schemas/Movement"},"explain":{"type":"string","description":"trending only"},"rank7dAgo":{"type":"integer","description":"movers only"},"rankDelta7d":{"type":"integer","description":"movers only"}}},{"$ref":"#/components/schemas/Saas"}]}}}},"IdentityQuality":{"type":"string","enum":["aggregate_only","partially_mapped","cohort_verified"]},"ConversionMetrics":{"type":"object","properties":{"convertedUsers":{"type":"integer"},"newConverted7d":{"type":"integer"},"newConverted30d":{"type":"integer"},"convertedGrowth30dPct":{"type":"number"},"trialUsers":{"type":"integer"},"signupToConvertedPct":{"type":"number"},"activatedToConvertedPct":{"type":"number"},"trialToConvertedPct":{"type":"number"}}},"Conversion":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"verification":{"type":"string","enum":["verified","unverified","pending"]},"basis":{"type":"string","const":"aggregate"},"identityQuality":{"$ref":"#/components/schemas/IdentityQuality"},"conversion":{"oneOf":[{"$ref":"#/components/schemas/ConversionMetrics"},{"type":"null"}]},"note":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"},"urls":{"type":"object"}}},"Engagement":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"},"verification":{"type":"string","enum":["verified","unverified","pending"]},"engagement":{"type":"object","nullable":true,"properties":{"activatedUsers":{"type":"integer"},"activated7d":{"type":"integer"},"activated30d":{"type":"integer"},"activationRatePct":{"type":"number"},"retention":{"type":"object"}}},"note":{"type":"string"},"updatedAt":{"type":"string","format":"date-time"},"urls":{"type":"object"}}},"Cohorts":{"type":"object","properties":{"slug":{"type":"string"},"basis":{"type":"string","const":"cohort"},"identityQuality":{"$ref":"#/components/schemas/IdentityQuality"},"identityQualityLabel":{"type":"string"},"explanation":{"type":"string"},"cohorts":{"type":"array","items":{"type":"object","properties":{"cohort":{"type":"string","example":"2026-08"},"signedUp":{"type":"integer","nullable":true},"activated":{"type":"integer","nullable":true},"activationPct":{"type":"number"},"activatedD7Pct":{"type":"number"},"trial":{"type":"integer","nullable":true},"trialPct":{"type":"number"},"converted":{"type":"integer","nullable":true},"convertedPct":{"type":"number"},"convertedD30Pct":{"type":"number"},"trialToConvertedPct":{"type":"number"},"medianTimeToActivationMs":{"type":"integer"},"medianTimeToConversionMs":{"type":"integer"},"computedAt":{"type":"string","format":"date-time"}}}},"note":{"type":"string"}}},"Funnel":{"type":"object","properties":{"timeframe":{"type":"string","enum":["7d","30d","90d"]},"days":{"type":"integer"},"verification":{"type":"string","enum":["verified","mixed","self_reported","none"]},"coverageDays":{"type":"integer"},"basis":{"type":"string","const":"aggregate"},"identityQuality":{"$ref":"#/components/schemas/IdentityQuality"},"stages":{"type":"array","items":{"type":"object","properties":{"key":{"type":"string","enum":["reached","signed_up","activated","trial","converted"]},"label":{"type":"string"},"value":{"type":"integer","nullable":true,"description":"null when the owner publishes the rate but not the count"},"previous":{"type":"integer"},"changePct":{"type":"number"},"conversionPct":{"type":"number"},"previousConversionPct":{"type":"number"},"kind":{"type":"string","enum":["flow","stock"]},"verified":{"type":"boolean"},"health":{"type":"string","enum":["healthy","attention","stale"]},"updatedAt":{"type":"string","format":"date-time"},"source":{"type":"object","properties":{"provider":{"type":"string"},"label":{"type":"string"},"verification":{"type":"string","enum":["verified","partially_verified","self_reported"]}}}}}},"rates":{"type":"array","items":{"type":"object","properties":{"from":{"type":"string"},"to":{"type":"string"},"label":{"type":"string"},"pct":{"type":"number"},"previousPct":{"type":"number"},"adjacent":{"type":"boolean"}}}}}},"BenchmarkHighlight":{"type":"object","properties":{"slug":{"type":"string"},"highlight":{"type":"object","nullable":true,"properties":{"statement":{"type":"string"},"metric":{"type":"string"},"cohort":{"type":"string"},"percentile":{"type":"integer"},"sampleSize":{"type":"integer"}}},"note":{"type":"string"}}},"FeedItem":{"type":"object","properties":{"id":{"type":"string"},"kind":{"type":"string","enum":["milestone","spike","activation_spike","launched","verified","rank_jump","traction","benchmark","rank_change","new_project"]},"subkind":{"type":"string"},"at":{"type":"string","format":"date-time"},"title":{"type":"string"},"detail":{"type":"string"},"value":{"type":"number"},"saas":{"type":"object"},"urls":{"type":"object"}}},"Discover":{"type":"object","properties":{"category":{"type":"string","nullable":true},"sections":{"type":"object","description":"trending, fastestToday, fastestWeek, fastestMonth, newAndRising, recentlyVerified, biggestMovers (rows also carry rank7dAgo / rankDelta7d), hiddenGems, mobile","additionalProperties":{"type":"array","items":{"allOf":[{"type":"object","properties":{"movement":{"$ref":"#/components/schemas/Movement"}}},{"$ref":"#/components/schemas/Saas"}]}}},"hiddenGemRules":{"type":"object"},"newRisingRules":{"type":"object","properties":{"maxAgeDays":{"type":"integer"},"minNew7d":{"type":"integer"}}},"categories":{"type":"array","items":{"type":"object"}},"feed":{"type":"array","items":{"$ref":"#/components/schemas/FeedItem"}},"updatedAt":{"type":"string","format":"date-time","nullable":true}}},"Compare":{"type":"object","properties":{"days":{"oneOf":[{"type":"integer"},{"type":"string","const":"all"}]},"products":{"type":"array","items":{"allOf":[{"$ref":"#/components/schemas/Saas"},{"type":"object","properties":{"series":{"type":"array","items":{"type":"object","properties":{"day":{"type":"string"},"totalUsers":{"type":"integer"},"newUsers":{"type":"integer"},"activatedUsers":{"type":"integer"},"index":{"type":"number"}}}}}}]}},"urls":{"type":"object"}}},"Categories":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"label":{"type":"string"},"count":{"type":"integer"},"url":{"type":"string"}}}},"Profile":{"type":"object","properties":{"username":{"type":"string"},"displayName":{"type":"string"},"avatarUrl":{"type":"string"},"bio":{"type":"string"},"location":{"type":"string"},"links":{"type":"object"},"xState":{"type":"string","enum":["connected_via_oauth","handle_provided","unavailable"]},"xFollowers":{"type":"integer","nullable":true,"description":"X follower count read from the founder's own connected X account (never looked up by handle); absent for typed handles"},"xFollowersAt":{"type":"string","format":"date-time","nullable":true},"followers":{"type":"integer","description":"UserTrack followers of this founder"},"joinedAt":{"type":"string","format":"date-time"},"urls":{"type":"object","properties":{"profile":{"type":"string"},"card":{"type":"string"},"history":{"type":"string"}}},"metrics":{"type":"object","description":"Aggregates over public projects only; activation is weighted (sum activated / sum users of projects with an activation source)","properties":{"projects":{"type":"integer"},"verifiedProjects":{"type":"integer"},"totalUsers":{"type":"integer"},"newUsers7d":{"type":"integer"},"newUsers30d":{"type":"integer"},"growth30dPct":{"type":"number"},"changeVsPrev30dPct":{"type":"number"},"activation":{"type":"object"},"convertedUsers":{"type":"integer"},"bestRank":{"type":"integer"},"trendingProjects":{"type":"integer"},"biggestGrowth":{"type":"object"}}},"saas":{"type":"array","items":{"$ref":"#/components/schemas/Saas"}}}},"FounderHistory":{"type":"object","properties":{"username":{"type":"string"},"range":{"type":"string"},"projects":{"type":"array","items":{"type":"object","properties":{"slug":{"type":"string"},"name":{"type":"string"}}}},"points":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","format":"date-time"},"totalUsers":{"type":"integer"},"newUsers":{"type":"integer"},"byProject":{"type":"array","items":{"type":"integer"}}}}},"method":{"type":"string"}}}}}}