{"openapi":"3.0.3","info":{"title":"Changelog.gg Public API","version":"1.0.0","description":"Request schema for Changelog.gg public, dashboard, admin, Discord, and signed internal Hono API routes. The document is OpenAPI 3.0.x so it can be uploaded to Cloudflare API Shield Schema Validation."},"servers":[{"url":"https://changelog.gg/api/v1"}],"paths":{"/health":{"get":{"operationId":"getHealth","responses":{"200":{"description":"Successful response."}},"summary":"Check API health."}},"/home":{"get":{"operationId":"getHome","responses":{"200":{"description":"Successful response."}},"summary":"Get public homepage data.","tags":["Public"]}},"/home/activity":{"get":{"operationId":"getHomeActivity","responses":{"200":{"description":"Successful response."}},"summary":"Get public homepage activity.","tags":["Public"]}},"/public-config":{"get":{"operationId":"getPublicConfig","responses":{"200":{"description":"Successful response."}},"summary":"Get public client configuration.","tags":["Public"]}},"/games":{"get":{"operationId":"listGames","responses":{"200":{"description":"Successful response."}},"summary":"List tracked public games.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":200}},{"in":"query","name":"limit","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"in":"query","name":"platform","required":false,"schema":{"type":"string","pattern":"^[a-z0-9-]{1,48}$"}},{"in":"query","name":"updatedWithin","required":false,"schema":{"type":"string","enum":["24h","7d","30d"]}}],"tags":["Public"]}},"/platforms":{"get":{"operationId":"listPlatforms","responses":{"200":{"description":"Successful response."}},"summary":"List public game platforms.","tags":["Public"]}},"/games/{slug}":{"get":{"operationId":"getGame","responses":{"200":{"description":"Successful response."},"404":{"description":"Resource not found."}},"summary":"Get a tracked game by slug.","parameters":[{"description":"Game slug.","in":"path","name":"slug","required":true,"schema":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}}],"tags":["Public"]}},"/games/{slug}/updates":{"get":{"operationId":"listGameUpdates","responses":{"200":{"description":"Successful response."},"404":{"description":"Resource not found."}},"summary":"List updates for a tracked game.","parameters":[{"description":"Game slug.","in":"path","name":"slug","required":true,"schema":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}}],"tags":["Public"]}},"/games/{slug}/deals":{"get":{"operationId":"listGameDeals","responses":{"200":{"description":"Successful response."},"404":{"description":"Resource not found."}},"summary":"List deals for a tracked game.","parameters":[{"description":"Game slug.","in":"path","name":"slug","required":true,"schema":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}},{"in":"query","name":"country","required":false,"schema":{"type":"string","default":"US","maxLength":2,"minLength":2,"pattern":"^[a-zA-Z]{2}$"}},{"in":"query","name":"currency","required":false,"schema":{"type":"string","default":"USD","maxLength":3,"minLength":3,"pattern":"^[a-zA-Z]{3}$"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"kind","required":false,"schema":{"type":"string","enum":["discount","free-to-keep","free-weekend","subscription"]}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":25,"maximum":100,"minimum":1}},{"in":"query","name":"storeSlug","required":false,"schema":{"type":"string","maxLength":80,"pattern":"^[a-z0-9-]{1,80}$"}}],"tags":["Public"]}},"/games/{slug}/profile":{"get":{"operationId":"getGameProfile","responses":{"200":{"description":"Successful response."}},"summary":"Get a game profile.","parameters":[{"description":"Game slug.","in":"path","name":"slug","required":true,"schema":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}}],"tags":["Public"]}},"/games/{slug}/profile/{sectionKind}":{"get":{"operationId":"getGameProfileSection","responses":{"200":{"description":"Successful response."}},"summary":"Get one game profile section.","parameters":[{"description":"Game slug.","in":"path","name":"slug","required":true,"schema":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}},{"in":"path","name":"sectionKind","required":true,"schema":{"type":"string","enum":["heroes","team-ups","events"]}}],"tags":["Public"]}},"/games/{slug}/intelligence/marvel-rivals":{"get":{"operationId":"getMarvelRivalsIntelligence","responses":{"200":{"description":"Successful response."}},"summary":"Get Marvel Rivals game intelligence.","parameters":[{"description":"Game slug.","in":"path","name":"slug","required":true,"schema":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}}],"tags":["Public"]}},"/platforms/{platformSlug}/games/{platformGameId}/profile":{"get":{"operationId":"getPlatformGameProfile","responses":{"200":{"description":"Successful response."}},"summary":"Get a game profile by platform game id.","parameters":[{"in":"path","name":"platformSlug","required":true,"schema":{"type":"string","maxLength":48,"pattern":"^[a-z0-9-]{1,48}$"}},{"in":"path","name":"platformGameId","required":true,"schema":{"type":"string","maxLength":96,"pattern":"^[A-Za-z0-9_.:-]+$"}}],"tags":["Public"]}},"/platforms/{platformSlug}/games/{platformGameId}/profile/{sectionKind}":{"get":{"operationId":"getPlatformGameProfileSection","responses":{"200":{"description":"Successful response."}},"summary":"Get one platform game profile section.","parameters":[{"in":"path","name":"platformSlug","required":true,"schema":{"type":"string","maxLength":48,"pattern":"^[a-z0-9-]{1,48}$"}},{"in":"path","name":"platformGameId","required":true,"schema":{"type":"string","maxLength":96,"pattern":"^[A-Za-z0-9_.:-]+$"}},{"in":"path","name":"sectionKind","required":true,"schema":{"type":"string","enum":["heroes","team-ups","events"]}}],"tags":["Public"]}},"/updates":{"get":{"operationId":"listUpdates","responses":{"200":{"description":"Successful response."}},"summary":"List latest public game updates.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}}],"tags":["Public"]}},"/updates/{identifier}":{"get":{"operationId":"getUpdate","responses":{"200":{"description":"Successful response."},"404":{"description":"Resource not found."}},"summary":"Get a public game update by slug or ID.","parameters":[{"description":"Update slug or stable update ID.","in":"path","name":"identifier","required":true,"schema":{"type":"string","maxLength":96,"minLength":1,"pattern":"^(?:[a-z0-9](?:[a-z0-9-]*[a-z0-9])?|upd_[a-z0-9]{1,64})$"}}],"tags":["Public"]}},"/entities":{"get":{"operationId":"listEntities","responses":{"200":{"description":"Successful response."}},"summary":"List tracked public entities.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":200}},{"in":"query","name":"limit","required":false,"schema":{"default":50,"type":"integer","minimum":1,"maximum":100}},{"in":"query","name":"platform","required":false,"schema":{"type":"string","pattern":"^[a-z0-9-]{1,48}$"}},{"in":"query","name":"updatedWithin","required":false,"schema":{"type":"string","enum":["24h","7d","30d"]}},{"in":"query","name":"kind","required":false,"schema":{"default":"game","type":"string","enum":["game","repo","package","code","deal","guide","tool","driver","other"]}}],"tags":["Public"]}},"/entities/{kind}/{slug}":{"get":{"operationId":"getEntity","responses":{"200":{"description":"Successful response."},"404":{"description":"Resource not found."}},"summary":"Get a tracked public entity.","parameters":[{"description":"Entity slug.","in":"path","name":"slug","required":true,"schema":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}},{"description":"Entity kind.","in":"path","name":"kind","required":true,"schema":{"type":"string","enum":["game","repo","package","code","deal","guide","tool","driver","other"]}}],"tags":["Public"]}},"/entities/{kind}/{slug}/records":{"get":{"operationId":"listEntityRecords","responses":{"200":{"description":"Successful response."}},"summary":"List records for an entity.","parameters":[{"description":"Entity slug.","in":"path","name":"slug","required":true,"schema":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}},{"description":"Entity kind.","in":"path","name":"kind","required":true,"schema":{"type":"string","enum":["game","repo","package","code","deal","guide","tool","driver","other"]}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":25,"type":"integer","minimum":1,"maximum":100}}],"tags":["Public"]}},"/deals":{"get":{"operationId":"listDeals","responses":{"200":{"description":"Successful response."}},"summary":"List public deals.","parameters":[{"in":"query","name":"country","required":false,"schema":{"type":"string","default":"US","maxLength":2,"minLength":2,"pattern":"^[a-zA-Z]{2}$"}},{"in":"query","name":"currency","required":false,"schema":{"type":"string","default":"USD","maxLength":3,"minLength":3,"pattern":"^[a-zA-Z]{3}$"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"kind","required":false,"schema":{"type":"string","enum":["discount","free-to-keep","free-weekend","subscription"]}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":25,"maximum":100,"minimum":1}},{"in":"query","name":"storeSlug","required":false,"schema":{"type":"string","maxLength":80,"pattern":"^[a-z0-9-]{1,80}$"}}],"tags":["Public"]}},"/deals/{slug}":{"get":{"operationId":"getDeal","responses":{"200":{"description":"Successful response."}},"summary":"Get a public deal.","parameters":[{"description":"Deal slug.","in":"path","name":"slug","required":true,"schema":{"type":"string","minLength":1,"maxLength":160,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}},{"in":"query","name":"country","required":false,"schema":{"type":"string","default":"US","maxLength":2,"minLength":2,"pattern":"^[a-zA-Z]{2}$"}},{"in":"query","name":"currency","required":false,"schema":{"type":"string","default":"USD","maxLength":3,"minLength":3,"pattern":"^[a-zA-Z]{3}$"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"kind","required":false,"schema":{"type":"string","enum":["discount","free-to-keep","free-weekend","subscription"]}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","default":25,"maximum":100,"minimum":1}},{"in":"query","name":"storeSlug","required":false,"schema":{"type":"string","maxLength":80,"pattern":"^[a-z0-9-]{1,80}$"}}],"tags":["Public"]}},"/search":{"get":{"operationId":"searchPublicCatalog","responses":{"200":{"description":"Successful response."}},"summary":"Search public games and updates.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":200}},{"in":"query","name":"q","required":false,"schema":{"type":"string","maxLength":120,"minLength":1}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","maximum":100,"minimum":1}},{"in":"query","name":"scope","required":false,"schema":{"type":"string","enum":["all","games","updates","deals","drivers","pages"]}}],"tags":["Public"]}},"/semantic-search":{"get":{"operationId":"searchSemanticPublicCatalog","responses":{"200":{"description":"Successful response."}},"summary":"Search public content semantically.","parameters":[{"in":"query","name":"game","required":false,"schema":{"type":"string","maxLength":96,"pattern":"^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$"}},{"in":"query","name":"kind","required":false,"schema":{"type":"string","enum":["all","game","update"]}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","maximum":10,"minimum":1}},{"in":"query","name":"q","required":false,"schema":{"type":"string","maxLength":120,"minLength":1}}],"tags":["Public"]}},"/feed.xml":{"get":{"operationId":"getLatestUpdatesRssFeed","responses":{"200":{"description":"Successful response."}},"summary":"Get latest updates as RSS.","tags":["Feeds"],"servers":[{"url":"https://changelog.gg/api"}]}},"/feed.atom":{"get":{"operationId":"getLatestUpdatesAtomFeed","responses":{"200":{"description":"Successful response."}},"summary":"Get latest updates as Atom.","tags":["Feeds"],"servers":[{"url":"https://changelog.gg/api"}]}},"/feed.json":{"get":{"operationId":"getLatestUpdatesJsonFeed","responses":{"200":{"description":"Successful response."}},"summary":"Get latest updates as JSON Feed.","tags":["Feeds"],"servers":[{"url":"https://changelog.gg/api"}]}},"/feed/games/{file}":{"get":{"operationId":"getGameUpdatesFeed","responses":{"200":{"description":"Successful response."},"404":{"description":"Resource not found."}},"summary":"Get a tracked game update feed.","parameters":[{"description":"Game slug plus feed extension, such as counter-strike-2.xml, counter-strike-2.atom, or counter-strike-2.json.","in":"path","name":"file","required":true,"schema":{"type":"string","maxLength":180,"pattern":"^[a-z0-9-]+\\.(xml|atom|json)$"}}],"tags":["Feeds"],"servers":[{"url":"https://changelog.gg/api"}]}},"/sitemap.xml":{"get":{"operationId":"getSitemapIndex","responses":{"200":{"description":"Successful response."}},"summary":"Get sitemap index.","tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/sitemaps/static.xml":{"get":{"operationId":"getStaticSitemap","responses":{"200":{"description":"Successful response."}},"summary":"Get static sitemap.","tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/sitemaps/entities.xml":{"get":{"operationId":"getEntitySitemap","responses":{"200":{"description":"Successful response."}},"summary":"Get entity sitemap.","tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/sitemaps/{kind}/{file}":{"get":{"operationId":"getSitemapShard","responses":{"200":{"description":"Successful response."}},"summary":"Get a sitemap shard.","parameters":[{"in":"path","name":"kind","required":true,"schema":{"type":"string","enum":["games","updates"]}},{"in":"path","name":"file","required":true,"schema":{"type":"string","maxLength":80,"pattern":"^[a-z0-9-]+\\.xml$"}}],"tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/robots.txt":{"get":{"operationId":"getRobotsTxt","responses":{"200":{"description":"Successful response."}},"summary":"Get robots.txt.","tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/.well-known/api-catalog":{"get":{"operationId":"getApiCatalog","responses":{"200":{"description":"Successful response."}},"summary":"Get API catalog linkset.","tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/openapi.json":{"get":{"operationId":"getOpenApiDocument","responses":{"200":{"description":"Successful response."}},"summary":"Get this OpenAPI document.","tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/.well-known/openapi.json":{"get":{"operationId":"getWellKnownOpenApiDocument","responses":{"200":{"description":"Successful response."}},"summary":"Get this OpenAPI document.","tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/.well-known/http-message-signatures-directory":{"get":{"operationId":"getHttpMessageSignaturesDirectory","responses":{"200":{"description":"Successful response."}},"summary":"Get HTTP Message Signatures key directory.","tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/.well-known/security.txt":{"get":{"operationId":"getSecurityTxt","responses":{"200":{"description":"Successful response."}},"summary":"Get security.txt.","tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/llms.txt":{"get":{"operationId":"getLlmsTxt","responses":{"200":{"description":"Successful response."}},"summary":"Get compact agent context.","tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/llms-full.txt":{"get":{"operationId":"getLlmsFullTxt","responses":{"200":{"description":"Successful response."}},"summary":"Get full agent context.","tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/{file}":{"get":{"operationId":"getIndexNowKeyFile","responses":{"200":{"description":"Successful response."},"404":{"description":"Resource not found."}},"summary":"Get the configured IndexNow key file.","parameters":[{"in":"path","name":"file","required":true,"schema":{"type":"string","maxLength":132,"pattern":"^[A-Za-z0-9-]{8,128}\\.txt$"}}],"tags":["Discovery"],"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/targets/resolve":{"post":{"operationId":"resolveDashboardTarget","responses":{"200":{"description":"Successful response."}},"summary":"Resolve a dashboard target before activation.","tags":["Dashboard"],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"target":{"type":"string","maxLength":2048,"minLength":1}},"required":["target"],"type":"object"}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/targets":{"post":{"operationId":"createDashboardTarget","responses":{"200":{"description":"Successful response."}},"summary":"Activate a dashboard target.","tags":["Dashboard"],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"target":{"type":"string","maxLength":2048,"minLength":1}},"required":["target"],"type":"object"}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/billing":{"get":{"operationId":"getDashboardBilling","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Get dashboard billing state.","tags":["Dashboard"],"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/account-connections":{"get":{"operationId":"getDashboardAccountConnections","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Get linked dashboard accounts.","tags":["Dashboard"],"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/account-connections/steam/disconnect":{"post":{"operationId":"disconnectDashboardSteamAccount","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Disconnect the Steam account linked to the dashboard user.","tags":["Dashboard"],"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/servers":{"get":{"operationId":"listDashboardServers","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"List dashboard Discord servers.","tags":["Dashboard"],"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/servers/{serverId}":{"get":{"operationId":"getDashboardServer","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Get dashboard server details.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}}],"tags":["Dashboard"],"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/servers/{serverId}/billing/authorize":{"post":{"operationId":"authorizeDashboardServerBilling","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Authorize billing for a dashboard server.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}}],"tags":["Dashboard"],"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/servers/{serverId}/roles":{"get":{"operationId":"listDashboardServerRoles","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"List server roles.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}}],"tags":["Dashboard"],"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/servers/{serverId}/delivery-avatar-assets":{"get":{"operationId":"listDashboardAvatarAssets","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"List delivery avatar assets.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}}],"tags":["Dashboard"],"servers":[{"url":"https://changelog.gg/api"}]},"post":{"operationId":"uploadDashboardAvatarAsset","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Upload a delivery avatar asset.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}},{"in":"header","name":"content-type","required":true,"schema":{"type":"string","enum":["image/gif","image/jpeg","image/png","image/webp"]}},{"in":"header","name":"x-avatar-filename","required":true,"schema":{"type":"string","maxLength":180,"minLength":1}}],"tags":["Dashboard"],"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/servers/{serverId}/delivery-avatar-assets/{assetId}":{"delete":{"operationId":"deleteDashboardAvatarAsset","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Delete a delivery avatar asset.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}},{"in":"path","name":"assetId","required":true,"schema":{"type":"string","pattern":"^discord_avatar_[a-f0-9]{32}$"}}],"tags":["Dashboard"],"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/servers/{serverId}/routes":{"get":{"operationId":"listDashboardRoutes","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"List Discord delivery routes.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}},{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":256}},{"in":"query","name":"limit","required":false,"schema":{"type":"integer","maximum":250,"minimum":1}}],"tags":["Dashboard"],"servers":[{"url":"https://changelog.gg/api"}]},"post":{"operationId":"createDashboardRoute","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Create a Discord delivery route.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}}],"tags":["Dashboard"],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"channelId":{"type":"string","pattern":"^\\d{1,32}$"},"gameTitleId":{"type":"string","maxLength":160,"minLength":1}},"required":["channelId","gameTitleId"],"type":"object"}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]},"delete":{"operationId":"deleteDashboardRoute","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Delete a Discord delivery route.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}}],"tags":["Dashboard"],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"channelId":{"type":"string","pattern":"^\\d{1,32}$"},"gameTitleId":{"type":"string","maxLength":160,"minLength":1}},"required":["channelId","gameTitleId"],"type":"object"}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/servers/{serverId}/routes/settings":{"patch":{"operationId":"updateDashboardRouteSettings","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Update Discord delivery route settings.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}}],"tags":["Dashboard"],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"channelId":{"type":"string","pattern":"^\\d{1,32}$"},"gameTitleId":{"type":"string","maxLength":160,"minLength":1},"deliveryPreferences":{"nullable":true,"type":"object"},"mentionRoleIds":{"items":{"type":"string","pattern":"^\\d{1,32}$"},"maxItems":10,"type":"array"},"pinUpdates":{"type":"boolean"},"useThreads":{"type":"boolean"}},"required":["channelId","gameTitleId","mentionRoleIds","pinUpdates","useThreads"],"type":"object"}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/servers/{serverId}/routes/send-latest":{"post":{"operationId":"sendLatestDashboardRouteUpdate","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Send the latest update to a configured route.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}}],"tags":["Dashboard"],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"channelId":{"type":"string","pattern":"^\\d{1,32}$"},"gameTitleId":{"type":"string","maxLength":160,"minLength":1}},"required":["channelId","gameTitleId"],"type":"object"}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/dashboard/servers/{serverId}/routes/send-latest/channel":{"post":{"operationId":"sendLatestDashboardChannelUpdate","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Send the latest update to a channel.","parameters":[{"in":"path","name":"serverId","required":true,"schema":{"type":"string","pattern":"^\\d{1,32}$"}}],"tags":["Dashboard"],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"channelId":{"type":"string","pattern":"^\\d{1,32}$"}},"required":["channelId"],"type":"object"}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/discord/interactions":{"post":{"operationId":"handleDiscordInteraction","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."}},"summary":"Handle Discord interactions.","requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"required":true},"tags":["Discord"],"servers":[{"url":"https://changelog.gg/api"}]}},"/internal/source-evidence":{"post":{"operationId":"ingestSourceEvidence","responses":{"200":{"description":"Successful response."}},"summary":"Ingest signed source evidence.","tags":["Internal"],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":false,"properties":{"appId":{"type":"integer","minimum":1},"bodyBase64":{"type":"string","minLength":1},"contentSha256":{"type":"string","maxLength":64,"minLength":64},"fetchedAt":{"type":"string","format":"date-time"},"httpStatus":{"type":"integer","maximum":599,"minimum":100},"producerId":{"type":"string","maxLength":120,"minLength":3},"requestUrl":{"type":"string","maxLength":4096,"minLength":1},"responseHeaders":{"additionalProperties":{"type":"string"},"type":"object"},"sourceType":{"type":"string","enum":["steam-appdetails"]}},"required":["appId","bodyBase64","contentSha256","fetchedAt","httpStatus","producerId","requestUrl","responseHeaders","sourceType"],"type":"object"}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/internal/source-events":{"post":{"operationId":"enqueueInternalSourceEvent","responses":{"200":{"description":"Successful response."},"202":{"description":"Request accepted."},"422":{"description":"Request failed schema validation."}},"summary":"Enqueue a signed source event.","tags":["Internal"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"sourceId":{"type":"string","minLength":3,"maxLength":160},"appid":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"reason":{"default":"manual","type":"string","enum":["cron","manual","pics","retry"]}},"required":["sourceId","appid","reason"],"additionalProperties":false}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/internal/pics-events":{"post":{"operationId":"ingestPicsEvent","responses":{"200":{"description":"Successful response."},"202":{"description":"Request accepted."},"422":{"description":"Request failed schema validation."}},"summary":"Ingest a signed Steam PICS event.","tags":["Internal"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"appid":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"buildId":{"type":"string","minLength":1},"changeNumber":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"packageIds":{"default":[],"maxItems":100,"type":"array","items":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991}},"sourceId":{"type":"string","minLength":3,"maxLength":160}},"required":["appid","packageIds","sourceId"],"additionalProperties":false}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/internal/pics-events/batch":{"post":{"operationId":"ingestPicsEventBatch","responses":{"200":{"description":"Successful response."},"202":{"description":"Request accepted."},"422":{"description":"Request failed schema validation."}},"summary":"Ingest signed Steam PICS events.","tags":["Internal"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"events":{"minItems":1,"maxItems":100,"type":"array","items":{"type":"object","properties":{"appid":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"buildId":{"type":"string","minLength":1},"changeNumber":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"packageIds":{"default":[],"maxItems":100,"type":"array","items":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991}}},"required":["appid","packageIds"],"additionalProperties":false}},"sourceId":{"type":"string","minLength":3,"maxLength":160}},"required":["events","sourceId"],"additionalProperties":false}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/internal/pics-health":{"post":{"operationId":"reportPicsHealth","responses":{"200":{"description":"Successful response."}},"summary":"Report PICS sidecar health.","tags":["Internal"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"backoffMs":{"type":"integer","minimum":0,"maximum":9007199254740991},"connected":{"type":"boolean"},"cursor":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991,"nullable":true},"failureCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"forwardedAppCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"ignoredPackageCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"lastPollAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"loggedOn":{"type":"boolean"},"skippedAppCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"sourceId":{"type":"string","minLength":3,"maxLength":160}},"required":["backoffMs","connected","cursor","failureCount","forwardedAppCount","ignoredPackageCount","lastPollAt","loggedOn","skippedAppCount","sourceId"],"additionalProperties":false}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/internal/platform-cursors/{vendor}/{cursorKey}":{"get":{"operationId":"getInternalPlatformCursor","responses":{"200":{"description":"Successful response."}},"summary":"Get a signed platform cursor.","parameters":[{"description":"Cursor key.","in":"path","name":"cursorKey","required":true,"schema":{"type":"string","minLength":3,"maxLength":80,"pattern":"^[a-z0-9_-]+$"}},{"description":"Platform vendor.","in":"path","name":"vendor","required":true,"schema":{"type":"string","minLength":2,"maxLength":40,"pattern":"^[a-z0-9_-]+$"}}],"tags":["Internal"],"servers":[{"url":"https://changelog.gg/api"}]},"put":{"operationId":"upsertInternalPlatformCursor","responses":{"200":{"description":"Successful response."}},"summary":"Upsert a signed platform cursor.","parameters":[{"description":"Cursor key.","in":"path","name":"cursorKey","required":true,"schema":{"type":"string","minLength":3,"maxLength":80,"pattern":"^[a-z0-9_-]+$"}},{"description":"Platform vendor.","in":"path","name":"vendor","required":true,"schema":{"type":"string","minLength":2,"maxLength":40,"pattern":"^[a-z0-9_-]+$"}}],"tags":["Internal"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"cursorValue":{"type":"string","minLength":1,"maxLength":80},"observedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"}},"required":["cursorValue"],"additionalProperties":false}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/internal/discord-curated-channel":{"post":{"operationId":"sendInternalDiscordCuratedChannel","responses":{"200":{"description":"Successful response."}},"summary":"Send a curated Discord channel payload.","tags":["Internal"],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/internal/discord-curated-channel/replay":{"post":{"operationId":"replayInternalDiscordCuratedChannel","responses":{"200":{"description":"Successful response."}},"summary":"Replay the curated Discord channel payload.","tags":["Internal"],"servers":[{"url":"https://changelog.gg/api"}]}},"/internal/discord-guild-metadata":{"post":{"operationId":"ingestDiscordGuildMetadata","responses":{"200":{"description":"Successful response."}},"summary":"Ingest Discord guild metadata from a trusted sidecar.","tags":["Internal"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"approximateMemberCount":{"type":"integer","minimum":0,"maximum":9007199254740991},"guildId":{"type":"string","pattern":"^\\d{17,20}$"},"logicalShardId":{"type":"integer","minimum":0,"maximum":255},"observedAt":{"type":"string","format":"date-time","pattern":"^(?:(?:\\d\\d[2468][048]|\\d\\d[13579][26]|\\d\\d0[48]|[02468][048]00|[13579][26]00)-02-29|\\d{4}-(?:(?:0[13578]|1[02])-(?:0[1-9]|[12]\\d|3[01])|(?:0[469]|11)-(?:0[1-9]|[12]\\d|30)|(?:02)-(?:0[1-9]|1\\d|2[0-8])))T(?:(?:[01]\\d|2[0-3]):[0-5]\\d(?::[0-5]\\d(?:\\.\\d+)?)?(?:Z))$"},"schemaVersion":{"type":"number","enum":[1]},"source":{"type":"string","enum":["dashboard","gateway"]}},"required":["approximateMemberCount","guildId","logicalShardId","observedAt","schemaVersion","source"],"additionalProperties":false}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/internal/discord-webhook-test":{"post":{"operationId":"testInternalDiscordWebhook","responses":{"200":{"description":"Successful response."}},"summary":"Send a signed Discord webhook test.","tags":["Internal"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"avatarUrl":{"type":"string","maxLength":2048,"format":"uri"},"content":{"type":"string","minLength":1,"maxLength":2000},"sourceId":{"type":"string","minLength":3,"maxLength":160},"username":{"type":"string","minLength":1,"maxLength":80}},"required":["content"],"additionalProperties":false}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/backfill/plans":{"get":{"operationId":"listAdminBackfillPlans","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List backfill plans.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/backfill/review":{"get":{"operationId":"listAdminBackfillReview","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List backfill review items.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/backfill/candidates/{id}/promote":{"post":{"operationId":"promoteAdminBackfillCandidate","responses":{"200":{"description":"Successful response."},"202":{"description":"Request accepted."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Promote a backfill candidate.","parameters":[{"description":"Candidate id.","in":"path","name":"id","required":true,"schema":{"type":"string","minLength":3,"maxLength":80,"pattern":"^[a-z0-9_-]+$"}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/backfill/candidates/{id}/reject":{"post":{"operationId":"rejectAdminBackfillCandidate","responses":{"200":{"description":"Successful response."},"202":{"description":"Request accepted."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Reject a backfill candidate.","parameters":[{"description":"Candidate id.","in":"path","name":"id","required":true,"schema":{"type":"string","minLength":3,"maxLength":80,"pattern":"^[a-z0-9_-]+$"}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/discord/dlq/{id}/replay":{"post":{"operationId":"replayAdminDiscordDlq","responses":{"200":{"description":"Successful response."},"202":{"description":"Request accepted."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Replay a Discord DLQ item.","parameters":[{"description":"DLQ id.","in":"path","name":"id","required":true,"schema":{"type":"string","minLength":3,"maxLength":80,"pattern":"^[a-z0-9_-]+$"}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/games":{"get":{"operationId":"listAdminGames","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List admin games.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/platforms":{"get":{"operationId":"listAdminPlatforms","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List admin platforms.","tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/sources":{"get":{"operationId":"listAdminSources","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List admin sources.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/fetches":{"get":{"operationId":"listAdminFetches","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List admin fetches.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/updates":{"get":{"operationId":"listAdminUpdates","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List admin updates.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/queues":{"get":{"operationId":"listAdminQueues","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List admin queues.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/discord/deliveries":{"get":{"operationId":"listAdminDiscordDeliveries","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List admin Discord deliveries.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/discord/ops":{"get":{"operationId":"getAdminDiscordOps","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Get Discord operations status.","tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/discord/partners/ops":{"get":{"operationId":"getAdminDiscordPartnerOps","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Get Discord partner operations status.","tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/discord/failures":{"get":{"operationId":"listAdminDiscordFailures","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List Discord failures.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/discord/rate-limits":{"get":{"operationId":"listAdminDiscordRateLimits","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List Discord rate limits.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/discord/dlq":{"get":{"operationId":"listAdminDiscordDlq","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List Discord DLQ items.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/rate-limits":{"get":{"operationId":"listAdminRateLimits","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List admin rate limits.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/actions":{"get":{"operationId":"listAdminActions","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List admin actions.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/diagnostics":{"get":{"operationId":"getAdminDiagnostics","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Get admin diagnostics.","tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/test-fetch":{"post":{"operationId":"enqueueAdminTestFetch","responses":{"200":{"description":"Successful response."},"202":{"description":"Request accepted."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Enqueue an admin test fetch.","tags":["Admin"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"appid":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991},"sourceId":{"type":"string","minLength":3,"maxLength":160}},"required":["sourceId"],"additionalProperties":false}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/sources/{id}/test-fetch":{"post":{"operationId":"enqueueAdminSourceTestFetch","responses":{"200":{"description":"Successful response."},"202":{"description":"Request accepted."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Enqueue an admin source test fetch.","parameters":[{"description":"Source id.","in":"path","name":"id","required":true,"schema":{"type":"string","minLength":3,"maxLength":80,"pattern":"^[a-z0-9_-]+$"}}],"tags":["Admin"],"requestBody":{"content":{"application/json":{"schema":{"type":"object","properties":{"appid":{"type":"integer","minimum":0,"exclusiveMinimum":true,"maximum":9007199254740991}},"additionalProperties":false}}},"required":true},"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/sources/{id}/reparse":{"post":{"operationId":"reparseAdminSource","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Reparse a source.","parameters":[{"description":"Source id.","in":"path","name":"id","required":true,"schema":{"type":"string","minLength":3,"maxLength":80,"pattern":"^[a-z0-9_-]+$"}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/sources/{id}/enable":{"post":{"operationId":"enableAdminSource","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Enable a source.","parameters":[{"description":"Source id.","in":"path","name":"id","required":true,"schema":{"type":"string","minLength":3,"maxLength":80,"pattern":"^[a-z0-9_-]+$"}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/sources/{id}/disable":{"post":{"operationId":"disableAdminSource","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Disable a source.","parameters":[{"description":"Source id.","in":"path","name":"id","required":true,"schema":{"type":"string","minLength":3,"maxLength":80,"pattern":"^[a-z0-9_-]+$"}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/enrichment/steam/dlq":{"get":{"operationId":"listAdminSteamEnrichmentDlq","responses":{"200":{"description":"Successful response."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"List Steam enrichment DLQ rows.","parameters":[{"in":"query","name":"cursor","required":false,"schema":{"type":"string","maxLength":300}},{"in":"query","name":"limit","required":false,"schema":{"default":100,"type":"integer","minimum":1,"maximum":500}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/enrichment/steam/dlq/{id}/replay":{"post":{"operationId":"replayAdminSteamEnrichmentDlq","responses":{"200":{"description":"Successful response."},"202":{"description":"Request accepted."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Replay Steam enrichment DLQ row.","parameters":[{"description":"DLQ id.","in":"path","name":"id","required":true,"schema":{"type":"string","minLength":3,"maxLength":80,"pattern":"^[a-z0-9_-]+$"}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}},"/admin/enrichment/steam/{gameTitleId}":{"post":{"operationId":"runAdminSteamEnrichment","responses":{"200":{"description":"Successful response."},"202":{"description":"Request accepted."},"401":{"description":"Authentication is required."},"403":{"description":"Authentication is required."}},"summary":"Run Steam enrichment for a game title.","parameters":[{"in":"path","name":"gameTitleId","required":true,"schema":{"type":"string","maxLength":160,"minLength":1}}],"tags":["Admin"],"servers":[{"url":"https://changelog.gg/api"}]}}}}