{"openapi":"3.1.0","info":{"title":"roblox-trends data API","version":"1.0.0","description":"Private, versioned REST API over the roblox-trends dataset: games and merged CCU time-series, chart leaderboards and rank history, daily trend signals, experience events, and the YouTube/Twitch influencer graph.\n\n**Auth.** Every endpoint takes a bearer key: `Authorization: Bearer rt_live_…`. Keys are issued out-of-band and carry per-domain read scopes.\n\n**Envelope.** Responses are wrapped: `{ data, meta? }` on success, `{ error: { code, message } }` on failure. Clients must tolerate unknown fields (the API evolves additively).\n\n**Pagination** is keyset: pass `meta.nextCursor` back as `?cursor=`; `null` means the end. **Time-series** endpoints bound payloads with `from`/`to` caps instead of cursors.\n\n**Versioning.** Additive-only within `/v1`; breaking changes ship as `/v2`."},"servers":[{"url":"/api/v1","description":"This deployment"}],"tags":[{"name":"Meta","description":"Service status and freshness."},{"name":"Games & CCU","description":"Game catalog, search, and concurrent-player series."},{"name":"Charts","description":"Discovery-sort leaderboards and rank history."},{"name":"Trends","description":"Daily computed trend signals (ids rotate daily)."},{"name":"Events","description":"Roblox experience events per game."},{"name":"Influencers","description":"YouTube channels and Twitch streamers, their metric series, and the game-mention graph."}],"security":[{"bearerAuth":[]}],"paths":{"/status":{"get":{"tags":["Meta"],"summary":"Service status & data freshness","description":"Requires any valid key (no scope).","x-required-scope":null,"responses":{"200":{"description":"Current data freshness.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Status"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/games":{"get":{"tags":["Games & CCU"],"summary":"Search games, or walk the catalog","description":"Requires the `games:read` scope. With `q`: top-N search (results carry `currentCcu`/`bestRank`). Without `q`: keyset catalog walk ordered by id.","x-required-scope":"games:read","parameters":[{"name":"q","in":"query","required":false,"description":"Search term (2–100 chars). Omit to walk the full catalog.","schema":{"type":"string","minLength":2,"maxLength":100}},{"name":"cursor","in":"query","required":false,"description":"Opaque keyset cursor from a prior response's `meta.nextCursor`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Page size (default 25, max 100). Out-of-range values are rejected.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Matching or paged games.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GameSearchResult"}},"meta":{"type":"object","properties":{"nextCursor":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/games/{id}":{"get":{"tags":["Games & CCU"],"summary":"Get one game","description":"Requires the `games:read` scope.","x-required-scope":"games:read","parameters":[{"name":"id","in":"path","required":true,"description":"Roblox universe id.","schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"The game.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Game"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/games/{id}/dna":{"get":{"tags":["Games & CCU"],"summary":"Design DNA (LLM-derived)","description":"Requires the `games:read` scope. Theme / mechanics / incentives / monetization elements reverse-engineered from creator video transcripts, with per-element vote counts. Reading also enqueues the game for compute. `status` is ready | pending | insufficient | failed; `payload` is present only when ready. Behind the `game_dna` feature flag (404 when disabled).","x-required-scope":"games:read","parameters":[{"name":"id","in":"path","required":true,"description":"Roblox universe id.","schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"DNA status, plus payload when ready.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/GameDna"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/games/{id}/ccu":{"get":{"tags":["Games & CCU"],"summary":"Merged CCU time-series","description":"Requires the `games:read` scope. Chart samples ∪ off-chart polls, deduped per scrape tick. Range caps: raw ≤ 14d, hour ≤ 92d, day ≤ 731d.","x-required-scope":"games:read","parameters":[{"name":"id","in":"path","required":true,"description":"Roblox universe id.","schema":{"type":"integer","format":"int64"}},{"name":"granularity","in":"query","required":false,"description":"Bucket size. `raw` returns per-sample points.","schema":{"type":"string","enum":["raw","hour","day"],"default":"hour"}},{"name":"from","in":"query","required":false,"description":"Window start, ISO-8601. Defaults to a per-endpoint trailing span before `to`.","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"description":"Window end, ISO-8601. Defaults to now.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"CCU series.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/CcuResponse"},"meta":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/games/{id}/ranks":{"get":{"tags":["Charts"],"summary":"Rank history grouped by sort","description":"Requires the `charts:read` scope. Raw snapshot resolution. Range cap 92d.","x-required-scope":"charts:read","parameters":[{"name":"id","in":"path","required":true,"description":"Roblox universe id.","schema":{"type":"integer","format":"int64"}},{"name":"sortId","in":"query","required":false,"description":"Restrict to one sort.","schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Window start, ISO-8601. Defaults to a per-endpoint trailing span before `to`.","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"description":"Window end, ISO-8601. Defaults to now.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Per-sort rank series.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/RankSeries"}},"meta":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/games/{id}/events":{"get":{"tags":["Events"],"summary":"Stored experience events","description":"Requires the `events:read` scope. Every event ever stored for the universe. `eventStatus` is Roblox's lifecycle state, not temporal — derive past-ness from `endUtc`.","x-required-scope":"events:read","parameters":[{"name":"id","in":"path","required":true,"description":"Roblox universe id.","schema":{"type":"integer","format":"int64"}}],"responses":{"200":{"description":"Events, oldest start first.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Event"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/games/{id}/mentions":{"get":{"tags":["Influencers"],"summary":"Content mentioning this game","description":"Requires the `influencers:read` scope. Reverse mention graph. `platform` is required.","x-required-scope":"influencers:read","parameters":[{"name":"id","in":"path","required":true,"description":"Roblox universe id.","schema":{"type":"integer","format":"int64"}},{"name":"platform","in":"query","required":true,"description":"Source platform.","schema":{"type":"string","enum":["youtube","twitch"]}},{"name":"cursor","in":"query","required":false,"description":"Opaque keyset cursor from a prior response's `meta.nextCursor`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Page size (default 25, max 100). Out-of-range values are rejected.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Mentions, newest first.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Mention"}},"meta":{"type":"object","properties":{"nextCursor":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/sorts":{"get":{"tags":["Charts"],"summary":"List discovery sorts","description":"Requires the `charts:read` scope.","x-required-scope":"charts:read","responses":{"200":{"description":"All sorts.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Sort"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/sorts/{sortId}/leaderboard":{"get":{"tags":["Charts"],"summary":"Leaderboard snapshot","description":"Requires the `charts:read` scope. Latest snapshot, or — with `at` — the most recent at or before that instant.","x-required-scope":"charts:read","parameters":[{"name":"sortId","in":"path","required":true,"schema":{"type":"string"}},{"name":"at","in":"query","required":false,"description":"Time-travel to the snapshot at or before this instant (ISO-8601).","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"The leaderboard.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/Leaderboard"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/sorts/{sortId}/snapshots":{"get":{"tags":["Charts"],"summary":"Snapshot index","description":"Requires the `charts:read` scope. Capture times for a sort, to enumerate before requesting leaderboards. Range cap 92d.","x-required-scope":"charts:read","parameters":[{"name":"sortId","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Window start, ISO-8601. Defaults to a per-endpoint trailing span before `to`.","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"description":"Window end, ISO-8601. Defaults to now.","schema":{"type":"string","format":"date-time"}},{"name":"cursor","in":"query","required":false,"description":"Opaque keyset cursor from a prior response's `meta.nextCursor`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Page size (default 100, max 500). Out-of-range values are rejected.","schema":{"type":"integer","minimum":1,"maximum":500,"default":100}}],"responses":{"200":{"description":"Snapshot refs.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/SnapshotRef"}},"meta":{"allOf":[{"type":"object","properties":{"nextCursor":{"type":"string","nullable":true}}},{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}}]}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/trends":{"get":{"tags":["Trends"],"summary":"Today's trend signals","description":"Requires the `trends:read` scope. Trend ids are ephemeral — the set is rewritten daily.","x-required-scope":"trends:read","responses":{"200":{"description":"Active trends.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/TrendSummary"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/trends/{id}":{"get":{"tags":["Trends"],"summary":"Trend detail with exemplars","description":"Requires the `trends:read` scope.","x-required-scope":"trends:read","parameters":[{"name":"id","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The trend.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/TrendDetail"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/youtube/channels":{"get":{"tags":["Influencers"],"summary":"List tracked YouTube channels","description":"Requires the `influencers:read` scope.","x-required-scope":"influencers:read","responses":{"200":{"description":"Tracked channels.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Channel"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/youtube/channels/{channelId}":{"get":{"tags":["Influencers"],"summary":"Get a channel","description":"Requires the `influencers:read` scope.","x-required-scope":"influencers:read","parameters":[{"name":"channelId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The channel + latest snapshot.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/ChannelDetail"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/youtube/channels/{channelId}/snapshots":{"get":{"tags":["Influencers"],"summary":"Channel metric series","description":"Requires the `influencers:read` scope. Daily-cadence subscriber/view/video counts. Range cap 731d.","x-required-scope":"influencers:read","parameters":[{"name":"channelId","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Window start, ISO-8601. Defaults to a per-endpoint trailing span before `to`.","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"description":"Window end, ISO-8601. Defaults to now.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Snapshot series.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/ChannelSnapshot"}},"meta":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/youtube/channels/{channelId}/videos":{"get":{"tags":["Influencers"],"summary":"Channel videos","description":"Requires the `influencers:read` scope.","x-required-scope":"influencers:read","parameters":[{"name":"channelId","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Opaque keyset cursor from a prior response's `meta.nextCursor`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Page size (default 25, max 100). Out-of-range values are rejected.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Videos, newest first.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Video"}},"meta":{"type":"object","properties":{"nextCursor":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/youtube/channels/{channelId}/games":{"get":{"tags":["Influencers"],"summary":"Games this channel mentions","description":"Requires the `influencers:read` scope.","x-required-scope":"influencers:read","parameters":[{"name":"channelId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Game mention aggregate (top 50).","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GameMentionAgg"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/twitch/streamers":{"get":{"tags":["Influencers"],"summary":"List tracked Twitch streamers","description":"Requires the `influencers:read` scope.","x-required-scope":"influencers:read","responses":{"200":{"description":"Tracked streamers.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Streamer"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/twitch/streamers/{broadcasterId}":{"get":{"tags":["Influencers"],"summary":"Get a streamer","description":"Requires the `influencers:read` scope.","x-required-scope":"influencers:read","parameters":[{"name":"broadcasterId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"The streamer + latest snapshot.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"$ref":"#/components/schemas/StreamerDetail"}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/twitch/streamers/{broadcasterId}/snapshots":{"get":{"tags":["Influencers"],"summary":"Streamer metric series","description":"Requires the `influencers:read` scope. Clip-view momentum + live samples. Range cap 731d.","x-required-scope":"influencers:read","parameters":[{"name":"broadcasterId","in":"path","required":true,"schema":{"type":"string"}},{"name":"from","in":"query","required":false,"description":"Window start, ISO-8601. Defaults to a per-endpoint trailing span before `to`.","schema":{"type":"string","format":"date-time"}},{"name":"to","in":"query","required":false,"description":"Window end, ISO-8601. Defaults to now.","schema":{"type":"string","format":"date-time"}}],"responses":{"200":{"description":"Snapshot series.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/StreamerSnapshot"}},"meta":{"type":"object","properties":{"from":{"type":"string","format":"date-time"},"to":{"type":"string","format":"date-time"}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/twitch/streamers/{broadcasterId}/clips":{"get":{"tags":["Influencers"],"summary":"Streamer clips","description":"Requires the `influencers:read` scope.","x-required-scope":"influencers:read","parameters":[{"name":"broadcasterId","in":"path","required":true,"schema":{"type":"string"}},{"name":"cursor","in":"query","required":false,"description":"Opaque keyset cursor from a prior response's `meta.nextCursor`.","schema":{"type":"string"}},{"name":"limit","in":"query","required":false,"description":"Page size (default 25, max 100). Out-of-range values are rejected.","schema":{"type":"integer","minimum":1,"maximum":100,"default":25}}],"responses":{"200":{"description":"Clips, newest first.","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/Clip"}},"meta":{"type":"object","properties":{"nextCursor":{"type":"string","nullable":true}}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}},"/twitch/streamers/{broadcasterId}/games":{"get":{"tags":["Influencers"],"summary":"Games this streamer mentions","description":"Requires the `influencers:read` scope.","x-required-scope":"influencers:read","parameters":[{"name":"broadcasterId","in":"path","required":true,"schema":{"type":"string"}}],"responses":{"200":{"description":"Game mention aggregate (top 50).","content":{"application/json":{"schema":{"type":"object","required":["data"],"properties":{"data":{"type":"array","items":{"$ref":"#/components/schemas/GameMentionAgg"}}}}}}},"400":{"$ref":"#/components/responses/Error"},"401":{"$ref":"#/components/responses/Error"},"403":{"$ref":"#/components/responses/Error"},"404":{"$ref":"#/components/responses/Error"},"429":{"$ref":"#/components/responses/Error"},"503":{"$ref":"#/components/responses/Error"}}}}},"components":{"securitySchemes":{"bearerAuth":{"type":"http","scheme":"bearer","bearerFormat":"rt_live_…","description":"Bearer API key. Per-domain scopes gate each endpoint (see operation descriptions)."}},"responses":{"Error":{"description":"Error envelope. `code` is one of invalid_request (400), unauthorized (401), forbidden (403), not_found (404), rate_limited/quota_exceeded (429), service_unavailable (503).","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"schemas":{"Error":{"type":"object","required":["error"],"properties":{"error":{"type":"object","required":["code","message"],"properties":{"code":{"type":"string"},"message":{"type":"string"}}}}},"Status":{"type":"object","properties":{"lastChartSnapshotAt":{"type":"string","format":"date-time","nullable":true},"sortCount":{"type":"integer"},"trendsComputedAt":{"type":"string","format":"date-time","nullable":true},"serverTime":{"type":"string","format":"date-time"}}},"Game":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"placeId":{"type":"integer","format":"int64","nullable":true},"name":{"type":"string"},"description":{"type":"string","nullable":true},"creatorId":{"type":"integer","format":"int64","nullable":true},"creatorName":{"type":"string","nullable":true},"creatorType":{"type":"string","nullable":true},"genre":{"type":"string","nullable":true},"thumbnailUrl":{"type":"string","nullable":true},"createdAtRoblox":{"type":"string","format":"date-time","nullable":true},"firstSeenAt":{"type":"string","format":"date-time"},"lastSeenAt":{"type":"string","format":"date-time"}}},"GameSearchResult":{"allOf":[{"$ref":"#/components/schemas/Game"},{"type":"object","description":"Search mode adds these; absent in catalog-walk mode.","properties":{"currentCcu":{"type":"integer","nullable":true},"bestRank":{"type":"integer","nullable":true}}}]},"DnaBucketItem":{"type":"object","properties":{"element":{"type":"string"},"videoCount":{"type":"integer","description":"Distinct videos expressing this element."}}},"GameDna":{"type":"object","properties":{"gameId":{"type":"integer","format":"int64"},"status":{"type":"string","enum":["ready","pending","insufficient","failed"]},"relevantCount":{"type":"integer","description":"Corroborating videos (ready only)."},"computedAt":{"type":"string","format":"date-time","nullable":true},"payload":{"type":"object","description":"Present only when status is ready.","properties":{"theme":{"type":"array","items":{"$ref":"#/components/schemas/DnaBucketItem"}},"mechanics":{"type":"array","items":{"$ref":"#/components/schemas/DnaBucketItem"}},"incentives":{"type":"array","items":{"$ref":"#/components/schemas/DnaBucketItem"}},"monetization":{"type":"array","items":{"$ref":"#/components/schemas/DnaBucketItem"}}}}}},"CcuResponse":{"type":"object","properties":{"gameId":{"type":"integer","format":"int64"},"granularity":{"type":"string","enum":["raw","hour","day"]},"points":{"type":"array","items":{"$ref":"#/components/schemas/CcuPoint"}}}},"CcuPoint":{"type":"object","description":"Rollup buckets carry peak/min/samples; raw points carry only t/ccu.","properties":{"t":{"type":"string","format":"date-time"},"ccu":{"type":"integer"},"peakCcu":{"type":"integer"},"minCcu":{"type":"integer"},"samples":{"type":"integer"}}},"Sort":{"type":"object","properties":{"id":{"type":"string"},"name":{"type":"string"},"displayName":{"type":"string"},"topic":{"type":"string","nullable":true},"firstSeenAt":{"type":"string","format":"date-time"}}},"Leaderboard":{"type":"object","properties":{"sortId":{"type":"string"},"snapshotId":{"type":"integer","format":"int64"},"capturedAt":{"type":"string","format":"date-time"},"entries":{"type":"array","items":{"$ref":"#/components/schemas/LeaderboardEntry"}}}},"LeaderboardEntry":{"type":"object","properties":{"rank":{"type":"integer"},"playingCount":{"type":"integer"},"upVotes":{"type":"integer"},"downVotes":{"type":"integer"},"game":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"name":{"type":"string"},"creatorName":{"type":"string","nullable":true},"thumbnailUrl":{"type":"string","nullable":true}}}}},"SnapshotRef":{"type":"object","properties":{"id":{"type":"integer","format":"int64"},"capturedAt":{"type":"string","format":"date-time"}}},"RankSeries":{"type":"object","properties":{"sortId":{"type":"string"},"sortName":{"type":"string"},"points":{"type":"array","items":{"type":"object","properties":{"t":{"type":"string","format":"date-time"},"rank":{"type":"integer"},"playingCount":{"type":"integer"},"upVotes":{"type":"integer"},"downVotes":{"type":"integer"}}}}}},"TrendSummary":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"signalKind":{"type":"string"},"computedAt":{"type":"string","format":"date-time"},"exemplarCount":{"type":"integer"}}},"TrendDetail":{"type":"object","properties":{"id":{"type":"string"},"title":{"type":"string"},"summary":{"type":"string"},"methodologyMd":{"type":"string"},"signalKind":{"type":"string"},"computedAt":{"type":"string","format":"date-time"},"exemplars":{"type":"array","items":{"type":"object","properties":{"gameId":{"type":"integer","format":"int64"},"name":{"type":"string"},"score":{"type":"number"},"rationaleMd":{"type":"string"},"creatorName":{"type":"string","nullable":true},"thumbnailUrl":{"type":"string","nullable":true},"currentCcu":{"type":"integer","nullable":true},"ccuLiftPct":{"type":"number","nullable":true,"description":"Week-over-week CCU change as a fraction (0.12 = +12%). Current concurrents vs the sample from ~7 days ago. Null when the game wasn't tracked 7 days ago (see isNew) or has a gap in the baseline window."},"isNew":{"type":"boolean","description":"True when first tracked under 7 days ago, so there is no week-old baseline for ccuLiftPct. Distinguishes a genuinely new game from a null ccuLiftPct caused by a baseline-window gap."}}}}}},"Event":{"type":"object","properties":{"eventId":{"type":"string"},"title":{"type":"string"},"subtitle":{"type":"string","nullable":true},"startUtc":{"type":"string","format":"date-time"},"endUtc":{"type":"string","format":"date-time"},"eventStatus":{"type":"string","nullable":true},"category":{"type":"string","nullable":true},"hostName":{"type":"string","nullable":true},"thumbnailUrl":{"type":"string","nullable":true},"placeId":{"type":"integer","format":"int64","nullable":true}}},"Channel":{"type":"object","properties":{"channelId":{"type":"string"},"title":{"type":"string"},"handle":{"type":"string","nullable":true},"thumbnailUrl":{"type":"string","nullable":true},"subscriberCount":{"type":"integer","nullable":true},"totalViews":{"type":"integer","format":"int64","nullable":true},"videoCount":{"type":"integer","nullable":true},"subsDelta7d":{"type":"integer","nullable":true},"latestUpload":{"type":"object","nullable":true,"description":"Most recent video by this channel returned in a game's search results (game detail page).","properties":{"videoId":{"type":"string"},"title":{"type":"string"},"thumbnailUrl":{"type":"string","nullable":true},"publishedAt":{"type":"string","format":"date-time"}}}}},"ChannelDetail":{"type":"object","properties":{"channelId":{"type":"string"},"title":{"type":"string"},"handle":{"type":"string","nullable":true},"thumbnailUrl":{"type":"string","nullable":true},"country":{"type":"string","nullable":true},"addedAt":{"type":"string","format":"date-time"},"lastRefreshedAt":{"type":"string","format":"date-time","nullable":true},"subscriberCount":{"type":"integer","nullable":true},"viewCount":{"type":"integer","format":"int64","nullable":true},"videoCount":{"type":"integer","nullable":true},"snapshotAt":{"type":"string","format":"date-time","nullable":true}}},"ChannelSnapshot":{"type":"object","properties":{"t":{"type":"string","format":"date-time"},"subscriberCount":{"type":"integer","nullable":true},"viewCount":{"type":"integer","format":"int64","nullable":true},"videoCount":{"type":"integer","nullable":true}}},"Video":{"type":"object","properties":{"videoId":{"type":"string"},"title":{"type":"string"},"thumbnailUrl":{"type":"string","nullable":true},"publishedAt":{"type":"string","format":"date-time"},"viewCount":{"type":"integer","format":"int64","nullable":true},"durationSeconds":{"type":"integer","nullable":true}}},"Streamer":{"type":"object","properties":{"broadcasterId":{"type":"string"},"login":{"type":"string"},"displayName":{"type":"string"},"profileImageUrl":{"type":"string","nullable":true},"broadcasterType":{"type":"string","nullable":true},"totalClipViews":{"type":"integer","format":"int64","nullable":true},"clipCount":{"type":"integer","nullable":true},"viewsDelta7d":{"type":"integer","format":"int64","nullable":true},"latestClip":{"type":"object","nullable":true,"properties":{"clipId":{"type":"string"},"title":{"type":"string"},"thumbnailUrl":{"type":"string","nullable":true},"url":{"type":"string"},"createdAt":{"type":"string","format":"date-time"}}}}},"StreamerDetail":{"type":"object","properties":{"broadcasterId":{"type":"string"},"login":{"type":"string"},"displayName":{"type":"string"},"profileImageUrl":{"type":"string","nullable":true},"broadcasterType":{"type":"string","nullable":true},"description":{"type":"string","nullable":true},"addedAt":{"type":"string","format":"date-time"},"lastRefreshedAt":{"type":"string","format":"date-time","nullable":true},"totalClipViews":{"type":"integer","format":"int64","nullable":true},"clipCount":{"type":"integer","nullable":true},"isLive":{"type":"boolean"},"liveViewerCount":{"type":"integer","nullable":true},"snapshotAt":{"type":"string","format":"date-time","nullable":true}}},"StreamerSnapshot":{"type":"object","properties":{"t":{"type":"string","format":"date-time"},"totalClipViews":{"type":"integer","format":"int64","nullable":true},"clipCount":{"type":"integer","nullable":true},"liveViewerCount":{"type":"integer","nullable":true},"isLive":{"type":"boolean"}}},"Clip":{"type":"object","properties":{"clipId":{"type":"string"},"title":{"type":"string"},"url":{"type":"string"},"thumbnailUrl":{"type":"string","nullable":true},"viewCount":{"type":"integer","format":"int64","nullable":true},"durationSeconds":{"type":"number","nullable":true},"createdAt":{"type":"string","format":"date-time"}}},"GameMentionAgg":{"type":"object","properties":{"gameId":{"type":"integer","format":"int64"},"name":{"type":"string"},"mentionCount":{"type":"integer"},"latestMentionAt":{"type":"string","format":"date-time"}}},"Mention":{"type":"object","properties":{"platform":{"type":"string","enum":["youtube","twitch"]},"videoId":{"type":"string","description":"Video id (YouTube) or clip id (Twitch)."},"title":{"type":"string"},"url":{"type":"string"},"channelId":{"type":"string"},"channelTitle":{"type":"string"},"publishedAt":{"type":"string","format":"date-time"},"viewCount":{"type":"integer","format":"int64","nullable":true},"durationSeconds":{"type":"integer","nullable":true},"matchedAt":{"type":"string","format":"date-time"}}}}}}